#ifndef MOJEOKNO_H #define MOJEOKNO_H #include #include #include namespace Ui { class MojeOkno; } class MojeOkno : public QMainWindow { Q_OBJECT public: explicit MojeOkno(QWidget *parent = 0); ~MojeOkno(); private: int limit; QTreeWidgetItem * top; // QTableWidgetItem * v [8][8]; int z [8][8]; void skoc (int x0, int y0, int n, int x, int y); void hraj (int x0, int y0, int n); private slots: void on_treeWidget_itemClicked(QTreeWidgetItem* item, int column); void on_actionRun_triggered(); private: Ui::MojeOkno *ui; }; #endif // MOJEOKNO_H #include "mojeokno.h" #include "ui_mojeokno.h" #include QString sloupec (int x) { return QString ('a' + x); } QString radka (int y) { return QString ('8' - y); } QString popis (int x, int y) { return sloupec (x) + radka (y); } class MyItem : public QTreeWidgetItem { public: MyItem () : QTreeWidgetItem () { } QTableWidgetItem * pole [8][8]; }; void setupTable (QTableWidget * table) { table->setColumnCount (8); table->setRowCount (8); int h = table->rowHeight (0); for (int i = 0; i <= 7; i++) table->setColumnWidth (i, h); QStringList list; for (int i = 0; i <= 7; i++) list << sloupec (i); table->setHorizontalHeaderLabels(list); list.clear(); for (int i = 0; i <= 7; i++) list << radka (i); table->setVerticalHeaderLabels(list); } MojeOkno::MojeOkno(QWidget *parent) : QMainWindow(parent), ui(new Ui::MojeOkno) { ui->setupUi(this); setupTable (ui->tableWidget); setupTable (ui->traceTable); } MojeOkno::~MojeOkno() { delete ui; } void MojeOkno::skoc (int x0, int y0, int n, int x, int y) { if (x >= 0 && x <= 7 && y >= 0 && y <= 7 && n <= limit) { if (z[x][y] < 0 || z[x][y] > z[x0][y0] + 1) { QString s = QString::number (n); QString t = popis (x0, y0); if (n == 1) t = "zacatek"; QColor c = QColor::fromHsv((n*20) % 256, 200, 255); QTableWidgetItem * p = new QTableWidgetItem; p->setText (s); p->setToolTip (t); p->setBackgroundColor (c); p->setTextColor(QColor ("red")); ui->tableWidget->setItem(y, x, p); // v[x][y] = p; z[x][y] = n; MyItem * q = new MyItem; q->setText (0, QString::number (n) + " : " + t + " -> " + popis (x, y)); if (top != NULL) top->addChild (q); else ui->treeWidget->addTopLevelItem (q); for (int i = 0; i <= 7; i++) for (int j = 0; j <= 7; j++) { QTableWidgetItem * u = ui->tableWidget->item (j,i); if (u != NULL) u = u->clone(); else u = new QTableWidgetItem (); q->pole[i][j] = u; } QTreeWidgetItem * save = top; top = q; skoc (x, y, n+1, x+2, y+1); skoc (x, y, n+1, x-2, y+1); skoc (x, y, n+1, x+2, y-1); skoc (x, y, n+1, x-2, y-1); skoc (x, y, n+1, x+1, y+2); skoc (x, y, n+1, x-1, y+2); skoc (x, y, n+1, x+1, y-2); skoc (x, y, n+1, x-1, y-2); top = save; } } } void MojeOkno::hraj (int x0, int y0, int n) { limit = n; top = NULL; ui->tableWidget->clearContents (); ui->treeWidget->clear (); // for (int i = 0; i <= 7; i++) // for (int j = 0; j <= 7; j++) // v[i][j] = NULL; for (int i = 0; i <= 7; i++) for (int j = 0; j <= 7; j++) z[i][j] = -1; skoc (0, 0, 0, x0, y0); } void MojeOkno::on_actionRun_triggered() { int n = ui->horizontalSlider->sliderPosition (); int x = ui->spinBoxX->value (); int y = ui->spinBoxY->value (); hraj (x, y, n); } void MojeOkno::on_treeWidget_itemClicked (QTreeWidgetItem* treeItem, int column) { MyItem * item = dynamic_cast (treeItem); if (item != NULL) { ui->traceTable->clearContents(); for (int i = 0; i <= 7; i++) for (int j = 0; j <= 7; j++) ui->traceTable->setItem (j, i, item->pole [i][j]->clone()); } }