[[kun]]
 
#ifndef MOJEOKNO_H
#define MOJEOKNO_H
 
#include <QMainWindow>
#include <QTableWidgetItem>
#include <QTreeWidgetItem>
 
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 <cassert>
 
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 <MyItem*> (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());
    }
}
 
kun.txt · Last modified: 2013/04/17 11:24 by 147.32.8.22
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki