summaryrefslogtreecommitdiffstats
path: root/Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp
downloadStudium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.gz
Studium-33613a85afc4b1481367fbe92a17ee59c240250b.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp')
-rw-r--r--Master/Modellbildung_und_Simulation/Aufgabenblatt2/DiceSim/src/DiceSimController.cpp127
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;
+ }
+}