Преглед изворни кода

loading program from file working

Zoadian пре 10 година
родитељ
комит
1c1dd36620
2 измењених фајлова са 57 додато и 28 уклоњено
  1. 53 28
      mainwindow.cpp
  2. 4 0
      mainwindow.h

+ 53 - 28
mainwindow.cpp

@@ -5,6 +5,8 @@
 
 #include <QFile>
 #include <QTextStream>
+#include <QDebug>
+#include <QException>
 #include "parse.h"
 
 MainWindow::MainWindow(QWidget *parent)
@@ -15,31 +17,12 @@ MainWindow::MainWindow(QWidget *parent)
     lblCycles = new QLabel(ui->statusBar);
     ui->statusBar->addWidget(lblCycles);
 
+    loadProgramFromFile("C:\\test.ccp", Qt::red, 10, 10);
 
 
-	QFile file("c:/test.ccp");
-
-	if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
-	{
-		return;
-	}
-
-	QTextStream in(&file);
-
-	QVector<QVector<Instruction>> banks;
-
-	while(!in.atEnd())
-	{
-		QString line = in.readLine();
-		process_line(line, banks);
-	}
-
 
-
-
-
-    simulator.loadProgram(Qt::red, 10, 10);
-    simulator.loadProgram(Qt::blue, 15, 15);
+//    simulator.loadProgram(Qt::red, 10, 10);
+//    simulator.loadProgram(Qt::blue, 15, 15);
 
     ui->centralWidget->layout()->addWidget(new Playfield(simulator, ui->centralWidget));
 
@@ -47,7 +30,8 @@ MainWindow::MainWindow(QWidget *parent)
     connect(timerRepaint, &QTimer::timeout, this, [this](){
         mutex.lock();
         repaint();
-        lblCycles->setText(QString(tr("Cycles: %1 CntA: %2 CntB: %3")).arg(simulator.cycle).arg(simulator.teams[0]->programCount).arg(simulator.teams[1]->programCount));
+        lblCycles->setText(QString(tr("Cycles: %1")).arg(simulator.cycle));
+//        lblCycles->setText(QString(tr("Cycles: %1 CntA: %2 CntB: %3")).arg(simulator.cycle).arg(simulator.teams[0]->programCount).arg(simulator.teams[1]->programCount));
         mutex.unlock();
     });
     timerRepaint->start(100);
@@ -58,7 +42,7 @@ MainWindow::MainWindow(QWidget *parent)
 
 
     connect(ui->actionStart, &QAction::triggered, this, [this](){
-        timer->start(100);
+        timer->start(1);
     });
 
     connect(ui->actionPause, &QAction::triggered, this, [this](){
@@ -76,12 +60,53 @@ MainWindow::MainWindow(QWidget *parent)
 
 MainWindow::~MainWindow()
 {
-    delete ui;
+	delete ui;
+}
+
+QVector<QVector<Instruction>> MainWindow::loadProgramCodeFromFile(QString path) {
+	QFile file(path);
+
+	if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
+	{
+		throw QException();
+	}
+
+	QTextStream in(&file);
+
+	QVector<QVector<Instruction>> banks;
+
+	while(!in.atEnd())
+	{
+		QString line = in.readLine();
+		process_line(line, banks);
+	}
+
+	return banks;
+}
+
+void MainWindow::loadProgramFromFile(QString path, QColor color, int x, int y) {
+    auto programCode = loadProgramCodeFromFile(path);
+
+    shared_ptr<Team> team = make_shared<Team>(color);
+    ++team->programCount;
+    simulator.teams.push_back(team);
+
+    Program program(team, Right, Position{x, y}, 2, 0, 1);
+    program.active = team->id;
+    for(auto& bank : programCode) {
+        vector<Instruction> instructions;
+        for(auto& inst : bank) {
+           instructions.push_back(inst);
+        }
+
+        program.banks.push_back(make_shared<Bank>(team, instructions));
+    }
+    simulator.programs.push_back(program);
 }
 
 void MainWindow::simulate()
 {
-    mutex.lock();
-    simulator.simulate();
-    mutex.unlock();
+	mutex.lock();
+	simulator.simulate();
+	mutex.unlock();
 }

+ 4 - 0
mainwindow.h

@@ -26,6 +26,10 @@ private:
     QLabel* lblCycles;
     QMutex mutex;
 
+//public:
+    QVector<QVector<Instruction>> loadProgramCodeFromFile(QString path);
+    void loadProgramFromFile(QString path, QColor color, int x, int y);
+
 public slots:
     void simulate();
 };