|
|
@@ -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();
|
|
|
}
|