diff options
| author | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
|---|---|---|
| committer | Sven Eisenhauer <sven@sven-eisenhauer.net> | 2023-11-10 15:11:48 +0100 |
| commit | 33613a85afc4b1481367fbe92a17ee59c240250b (patch) | |
| tree | 670b842326116b376b505ec2263878912fca97e2 /Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp | |
| download | Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2 | |
Diffstat (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp')
| -rw-r--r-- | Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp b/Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp new file mode 100644 index 0000000..cd5e750 --- /dev/null +++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp @@ -0,0 +1,127 @@ +/* + * DiceSimController.cpp + * + * Created on: 11.05.2011 + * Author: sven + */ +#ifndef DICESIMCONTROLLER_H_ + #include "DiceSimController.h" +#endif + +#ifndef _LIBGLADEMM_XML_H + #include <libglademm/xml.h> +#endif + +#ifndef DICESIM_H_ + #include "DiceSim.h" +#endif + +#include <iostream> +#include <fstream> +#include "Util.h" + +// because of static +const char* DiceSimController::UI_FILENAME = "ui/dicesim.glade"; + +DiceSimController::DiceSimController() { + Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file(UI_FILENAME); + builder->get_widget("mainwindow",mPtrMainWin); + builder->get_widget("startbtn",mPtrStartBtn); + builder->get_widget("dicecombo",mPtrDiceCombo); + builder->get_widget("rollscombo",mPtrRollsCombo); + builder->get_widget("textview1",mPtrTextView); + + mRefPtrTextBuffer = Gtk::TextBuffer::create(); + mPtrTextView->set_buffer(mRefPtrTextBuffer); + + mRollsTreeStore = Gtk::TreeStore::create(mRollsCols); + mPtrRollsCombo->set_model(mRollsTreeStore); + mDiceTreeStore = Gtk::TreeStore::create(mDiceCols); + mPtrDiceCombo->set_model(mDiceTreeStore); + + Gtk::TreeModel::Row rowDice1 = *(mDiceTreeStore->append()); + rowDice1[mDiceCols.mData] = 1; + Gtk::TreeModel::Row rowDice2 = *(mDiceTreeStore->append()); + rowDice2[mDiceCols.mData] = 2; + Gtk::TreeModel::Row rowDice10 = *(mDiceTreeStore->append()); + rowDice10[mDiceCols.mData] = 10; + + Gtk::TreeModel::Row rowRolls500 = *(mRollsTreeStore->append()); + rowRolls500[mRollsCols.mData] = 500; + Gtk::TreeModel::Row rowRolls1000 = *(mRollsTreeStore->append()); + rowRolls1000[mRollsCols.mData] = 1000; + Gtk::TreeModel::Row rowRolls10000 = *(mRollsTreeStore->append()); + rowRolls10000[mRollsCols.mData] = 10000; + + mPtrDiceCombo->pack_start(mDiceCols.mData); + mPtrRollsCombo->pack_start(mRollsCols.mData); + mPtrDiceCombo->set_active(0); + mPtrRollsCombo->set_active(0); + + mPtrMainWin->signal_hide().connect(sigc::ptr_fun(&Gtk::Main::quit)); + mPtrStartBtn->signal_clicked().connect(sigc::mem_fun(this,&DiceSimController::on_startbutton_clicked)); +} + +DiceSimController::~DiceSimController() { + // TODO Auto-generated destructor stub +} + +void DiceSimController::startApp(Gtk::Main& kit) +{ + kit.run(*mPtrMainWin); +} + +void DiceSimController::on_startbutton_clicked() +{ + Gtk::TreeModel::iterator diceIter = mPtrDiceCombo->get_active(); + Gtk::TreeModel::Row diceRow = *diceIter; + Gtk::TreeModel::iterator rollsIter = mPtrRollsCombo->get_active(); + Gtk::TreeModel::Row rollsRow = *rollsIter; + unsigned numDice = diceRow[mDiceCols.mData]; + unsigned numRolls = rollsRow[mRollsCols.mData]; + std::cout << "dice: " << numDice << " rolls: " << numRolls << std::endl; + DiceSim diceSim(numDice,numRolls); + std::string text = "Eyes\tabs. freq.\n"; + const std::vector<unsigned>& results = diceSim.getResult(); + std::vector<unsigned>::const_iterator it = results.begin(); + unsigned n=numDice; + for( ; it != results.end() ; it++) + { + if (n <= 6 * numDice) { + text += Util::ToUString(n); + text += "\t"; + text += Util::ToUString(*it); + text += "\n"; + n++; + } + } + mRefPtrTextBuffer->set_text(text); + writeToCSV(results,numDice); + startGnuPlot(); +} + +void DiceSimController::writeToCSV(const std::vector<unsigned>& results, unsigned numDice) +{ + std::ofstream csvFile; + csvFile.open("dicesim.csv", std::ios::out); + std::vector<unsigned>::const_iterator it; + unsigned n=numDice; + for(it = results.begin() ; it != results.end() ; it++) { + if (n <= 6 * numDice) { + if (it != results.begin()) { + csvFile << std::endl; + } + csvFile << n << ";"; + csvFile << *it; + n++; + } + } + csvFile.close(); +} +void DiceSimController::startGnuPlot() +{ + int i = system("gnuplot dicesim.plt -p"); + if (i != 0) { + std::cerr << "Error starting gnuplot: " << i << std::endl; + } +} |
