| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include "mainwindow.h"
- #include "ui_mainwindow.h"
- #include <QPainter>
- #include <QTimer>
- MainWindow::MainWindow(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- // setMinimumSize(simulator.size * 40, simulator.size * 40);
- simulator.loadProgram(Qt::red, 10, 10);
- simulator.loadProgram(Qt::blue, 15, 15);
- QTimer* timer = new QTimer(this);
- connect(timer, &QTimer::timeout, this, [this](){
- simulator.simulate();
- repaint();
- });
- timer->start(50);
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::paintEvent(QPaintEvent* event) {
- QPainter painter(this);
- int w = qMin(width(), height()) / simulator.size;
- int h = qMin(width(), height()) / simulator.size;
- for(int y = 0; y < simulator.size; ++y) {
- for(int x = 0; x < simulator.size; ++x) {
- int xx = x * w;
- int yy = y * w;
- painter.setPen(Qt::black);
- painter.setBrush(Qt::gray);
- painter.drawRect(QRect(xx, yy,w, h));
- }
- }
- for (auto& program : simulator.programs) {
- int xx = program.position.x * w;
- int yy = program.position.y * w;
- painter.setPen(Qt::black);
- painter.setBrush(program.color);
- QRect rect(xx, yy,w, h);
- painter.drawRect(rect);
- auto& taskIndex = program.taskIndex;
- if(program.tasks.empty()) {
- continue;
- }
- taskIndex += 1;
- taskIndex %= program.tasks.size();
- if (taskIndex < program.tasks.size()) {
- auto& task = program.tasks[taskIndex];
- switch(task.direction) {
- case Right: painter.drawLine(rect.center(), QPoint(rect.right(), rect.center().y())); break;
- case Down: painter.drawLine(rect.center(), QPoint(rect.center().x(), rect.bottom())); break;
- case Left: painter.drawLine(rect.center(), QPoint(rect.left(), rect.center().y())); break;
- case Up: painter.drawLine(rect.center(), QPoint(rect.center().x(), rect.top())); break;
- }
- painter.drawText(rect, QString("%1:%2:%3").arg(program.banks.size()).arg(task.bankIndex).arg(task.instIndex));
- }
- }
- }
|