#include "mainwindow.h" #include "ui_mainwindow.h" #include "playfield.h" #include #include #include "parse.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); lblCycles = new QLabel(ui->statusBar); ui->statusBar->addWidget(lblCycles); QFile file("c:/test.ccp"); if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { return; } QTextStream in(&file); QVector> banks; while(!in.atEnd()) { QString line = in.readLine(); process_line(line, banks); } simulator.loadProgram(Qt::red, 10, 10); simulator.loadProgram(Qt::blue, 15, 15); ui->centralWidget->layout()->addWidget(new Playfield(simulator, ui->centralWidget)); auto timerRepaint = new QTimer(this); 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)); mutex.unlock(); }); timerRepaint->start(100); connect(timer, &QTimer::timeout, this, [this](){ simulate(); }); connect(ui->actionStart, &QAction::triggered, this, [this](){ timer->start(100); }); connect(ui->actionPause, &QAction::triggered, this, [this](){ timer->stop(); }); connect(ui->actionSingleStep, &QAction::triggered, this, [this](){ timer->stop(); simulate(); }); } MainWindow::~MainWindow() { delete ui; } void MainWindow::simulate() { mutex.lock(); simulator.simulate(); mutex.unlock(); }