1
0
mirror of git://projects.qi-hardware.com/openwrt-packages.git synced 2024-06-28 22:56:21 +03:00

Tile: the 15 Puzzle game written in Qt4

This was my first real try for Qt (and C++, too).
Don't beat me hard :)
This commit is contained in:
kyak 2011-01-14 16:30:00 +03:00
parent 9186e374b2
commit bd53759d02
6 changed files with 1232 additions and 0 deletions

43
Tile/Makefile Normal file
View File

@ -0,0 +1,43 @@
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=Tile
PKG_VERSION:=20110114
PKG_RELEASE:=1
include $(INCLUDE_DIR)/package.mk
PKG_UNPACK:=$(CP) ./src/{tile.*,main.cpp,Tile.pro} $(PKG_BUILD_DIR)
$(call include_mk,qmake.mk)
define Package/Tile
SECTION:=games
CATEGORY:=Games
TITLE:=15 Puzzle game, written in Qt
DEPENDS:=+qt4 +qt4-gui +dejavu-fonts-ttf
endef
define Build/Prepare
$(call Build/Prepare/Default)
(\
cd $(PKG_BUILD_DIR); \
echo "QMAKE_LIBS+=-Wl,-rpath-link=$(STAGING_DIR)/usr/lib" >> Tile.pro; \
echo "INCLUDEPATH += $(STAGING_DIR)/usr/include/QtGui" >> Tile.pro; \
echo "INCLUDEPATH += $(STAGING_DIR)/usr/include/QtCore" >> Tile.pro; \
)
endef
define Build/Configure
$(call Build/Configure/Qmake,Tile)
endef
define Package/Tile/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/Tile $(1)/usr/bin/
endef
$(eval $(call BuildPackage,Tile))

9
Tile/src/Tile.pro Normal file
View File

@ -0,0 +1,9 @@
# -------------------------------------------------
# Project created by QtCreator 2011-01-13T20:55:49
# -------------------------------------------------
TARGET = Tile
TEMPLATE = app
SOURCES += main.cpp \
tile.cpp
HEADERS += tile.h
FORMS += tile.ui

18
Tile/src/main.cpp Normal file
View File

@ -0,0 +1,18 @@
#include <QtGui/QApplication>
#include "tile.h"
#if defined(Q_WS_QWS)
#include <QtGui/QWSServer>
#endif
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Tile w;
#if defined(Q_WS_QWS)
QWSServer::setCursorVisible(false);
#endif
w.show();
return a.exec();
}

354
Tile/src/tile.cpp Normal file
View File

@ -0,0 +1,354 @@
#include "tile.h"
#include "ui_tile.h"
Tile::Tile(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Tile)
{
ui->setupUi(this);
ui->pushButton_16->hide();
ui->pushButton->setProperty("id","1");
ui->pushButton_2->setProperty("id","2");
ui->pushButton_3->setProperty("id","3");
ui->pushButton_4->setProperty("id","4");
ui->pushButton_5->setProperty("id","5");
ui->pushButton_6->setProperty("id","6");
ui->pushButton_7->setProperty("id","7");
ui->pushButton_8->setProperty("id","8");
ui->pushButton_9->setProperty("id","9");
ui->pushButton_10->setProperty("id","10");
ui->pushButton_11->setProperty("id","11");
ui->pushButton_12->setProperty("id","12");
ui->pushButton_13->setProperty("id","13");
ui->pushButton_14->setProperty("id","14");
ui->pushButton_15->setProperty("id","15");
ui->pushButton_16->setProperty("id","16");
/*ui->pushButton_Reset->setProperty("id","Reset");
ui->pushButton_Shuffle->setProperty("id","Shuffle");
ui->pushButton_Help->setProperty("id","Help");
ui->pushButton_Quit->setProperty("id","Quit");*/
/*
ui->pushButton->setAccessibleDescription("1");
ui->pushButton_2->setAccessibleDescription("2");
ui->pushButton_3->setAccessibleDescription("3");
ui->pushButton_4->setAccessibleDescription("4");
ui->pushButton_5->setAccessibleDescription("5");
ui->pushButton_6->setAccessibleDescription("6");
ui->pushButton_7->setAccessibleDescription("7");
ui->pushButton_8->setAccessibleDescription("8");
ui->pushButton_9->setAccessibleDescription("9");
ui->pushButton_10->setAccessibleDescription("10");
ui->pushButton_11->setAccessibleDescription("11");
ui->pushButton_12->setAccessibleDescription("12");
ui->pushButton_13->setAccessibleDescription("13");
ui->pushButton_14->setAccessibleDescription("14");
ui->pushButton_15->setAccessibleDescription("15");
ui->pushButton_16->setAccessibleDescription("16");
*/
// Create seed for the random
// That is needed only once on application startup
QTime time = QTime::currentTime();
qsrand((uint)time.msec());
qApp->installEventFilter(this);
//ui->pushButton->installEventFilter(this);
}
Tile::~Tile()
{
delete ui;
}
void Tile::changeEvent(QEvent *e)
{
QMainWindow::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void Tile::checkNeighbours()
{
QPushButton *button = qobject_cast< QPushButton* >(QObject::sender());
//int id = button->accessibleDescription().toInt();
int id = button->property("id").toInt();
//check button to the right
if (id != 16 && id != 12 && id != 8 && id != 4) {
QPushButton *button_neighbour = idtoButton(id+1);
if (button_neighbour->text() == "16" && button_neighbour->isHidden()) {
swapButtons(button, button_neighbour);
return;
}
}
//check button to the left
if (id != 13 && id != 9 && id != 5 && id != 1) {
QPushButton *button_neighbour = idtoButton(id-1);
if (button_neighbour->text() == "16" && button_neighbour->isHidden()) {
swapButtons(button, button_neighbour);
return;
}
}
//check button to the bottom
if (id != 16 && id != 15 && id != 14 && id != 13) {
QPushButton *button_neighbour = idtoButton(id+4);
if (button_neighbour->text() == "16" && button_neighbour->isHidden()) {
swapButtons(button, button_neighbour);
return;
}
}
//check button to the up
if (id != 4 && id != 3 && id != 2 && id != 1) {
QPushButton *button_neighbour = idtoButton(id-4);
if (button_neighbour->text() == "16" && button_neighbour->isHidden()) {
swapButtons(button, button_neighbour);
return;
}
}
//qDebug() << "No swap candidates...";
return;
}
QPushButton* Tile::idtoButton(int id)
{
switch (id) {
case 1:
return ui->pushButton;
case 2:
return ui->pushButton_2;
case 3:
return ui->pushButton_3;
case 4:
return ui->pushButton_4;
case 5:
return ui->pushButton_5;
case 6:
return ui->pushButton_6;
case 7:
return ui->pushButton_7;
case 8:
return ui->pushButton_8;
case 9:
return ui->pushButton_9;
case 10:
return ui->pushButton_10;
case 11:
return ui->pushButton_11;
case 12:
return ui->pushButton_12;
case 13:
return ui->pushButton_13;
case 14:
return ui->pushButton_14;
case 15:
return ui->pushButton_15;
case 16:
return ui->pushButton_16;
default:
break;
}
return NULL;
}
void Tile::swapButtons(QPushButton *button, QPushButton *button_neighbour) {
button->hide();
button_neighbour->setText(button->text());
button->setText("16");
button_neighbour->show();
button_neighbour->setFocus();
}
void Tile::Reset()
{
for (int i = 1; i < 16; i++) {
QPushButton *button = idtoButton(i);
QString str;
button->show();
button->setText(str.setNum(i));
}
QPushButton *button = idtoButton(16);
button->hide();
button->setText("16");
}
void Tile::Quit()
{
switch (QMessageBox::information(this,
"Confirm Quit",
"Are you sure to quit?",
"&Quit","&Cancel"))
{
case 0:
qApp->quit();
default:
break;
}
}
void Tile::Shuffle()
{
Reset();
for (int i = 1; i < 16; i++) {
//get random number 1..15
int id = randInt(1,15);
//swap it
QPushButton *button_1 = idtoButton(i);
QPushButton *button_2 = idtoButton(id);
QString str = button_1->text();
button_1->setText(button_2->text());
button_2->setText(str);
}
if (!isSolvable()) {
Shuffle();
}
}
int Tile::randInt(int low, int high)
{
// Random number between low and high
return qrand() % ((high + 1) - low) + low;
}
bool Tile::isSolvable()
{
//http://mathworld.wolfram.com/15Puzzle.html
//accumulator
int acc = 0;
//iterate through all tiles
for (int i = 1; i < 17; i++) {
//get button from id
QPushButton *button = idtoButton(i);
//get the number on tile
int num = button->text().toInt();
if (num == 16) {
//get row of empty tile
if (i < 5) {
acc = acc + 1;
} else if (i < 9) {
acc = acc + 2;
} else if (i < 13) {
acc = acc + 3;
} else {
acc = acc + 4;
}
continue;
}
//iterate though the rest of tiles
for (int j = i+1; j < 17; j++) {
//get next button
QPushButton *button_next = idtoButton(j);
//get the number of next tile
int num_next = button_next->text().toInt();
//compare and increment accumulator
if (num_next < num) {
acc++;
}
}
}
//qDebug() << acc;
if (acc%2 == 0) {
return 1;
} else {
return 0;
}
}
void Tile::Help()
{
QMessageBox::about(this,
"15 Puzzle",
"\
This is the famous 15 Puzzle game.\n\
The object of the puzzle is to place the\n\
tiles in order by making sliding moves\n\
that use the empty space.\n\
\n\
\"Reset\" (Alt+R): reset the puzzle to solved position\n\
\"Shuffle\" (Alt+S): shuffle the puzzle. Note that this\n\
always produces solvable positions, don\'t give up\n\
\"Help\" (Alt+H): show this help\n\
\"Quit\" (Alt+Q): quit the app");
}
void Tile::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Escape || event->key() == Qt::Key_Q) {
Quit();
} else if (event->key() == Qt::Key_Up) {
//focusNextChild();
//qDebug() << qApp->focusWidget();
QPushButton *button = qobject_cast< QPushButton* >(qApp->focusWidget());
keyUp(button);
} else if (event->key() == Qt::Key_Down) {
//focusPreviousChild();
//qDebug() << qApp->focusWidget();
QPushButton *button = qobject_cast< QPushButton* >(qApp->focusWidget());
keyDown(button);
} else {
return;
}
}
bool Tile::eventFilter(QObject *obj, QEvent *event)
{
QKeyEvent *keyEvent = NULL;//event data, if this is a keystroke event
bool result = false;//return true to consume the keystroke
if (event->type() == QEvent::KeyPress)
{
keyEvent = dynamic_cast<QKeyEvent*>(event);
//override Key Up and Key Down only
if (keyEvent->key() == Qt::Key_Up || keyEvent->key() == Qt::Key_Down) {
this->keyPressEvent(keyEvent);
result = true;
} else {
result = QObject::eventFilter(obj, event);
}
}//if type()
/*else if (event->type() == QEvent::KeyRelease)
{
keyEvent = dynamic_cast<QKeyEvent*>(event);
this->keyReleaseEvent(keyEvent);
result = true;
}*///else if type()
//### Standard event processing ###
else
result = QObject::eventFilter(obj, event);
return result;
}//eventFilter
void Tile::keyUp(QPushButton *button) {
int id = button->property("id").toInt();
QPushButton *button_up;
if (id < 5) {
button_up = idtoButton(id+12);
} else {
button_up = idtoButton(id-4);
}
if (button_up->isHidden()) {
keyUp(button_up);
} else {
button_up->setFocus();
}
}
void Tile::keyDown(QPushButton *button) {
int id = button->property("id").toInt();
QPushButton *button_down;
if (id > 12) {
button_down = idtoButton(id-12);
} else {
button_down = idtoButton(id+4);
}
if (button_down->isHidden()) {
keyDown(button_down);
} else {
button_down->setFocus();
}
}

43
Tile/src/tile.h Normal file
View File

@ -0,0 +1,43 @@
#ifndef TILE_H
#define TILE_H
#include <QMainWindow>
#include <QDebug>
#include <QPushButton>
#include <QTime>
#include <QMessageBox>
#include <QKeyEvent>
namespace Ui {
class Tile;
}
class Tile : public QMainWindow {
Q_OBJECT
public:
Tile(QWidget *parent = 0);
~Tile();
public slots:
void checkNeighbours();
QPushButton* idtoButton(int id);
void swapButtons(QPushButton *button, QPushButton *button_neighbour);
void Reset();
void Quit();
void Shuffle();
int randInt(int low, int high);
bool isSolvable();
void Help();
void keyPressEvent(QKeyEvent *event);
bool eventFilter(QObject *obj, QEvent *event);
void keyUp(QPushButton *button);
void keyDown(QPushButton *button);
protected:
void changeEvent(QEvent *e);
private:
Ui::Tile *ui;
};
#endif // TILE_H

765
Tile/src/tile.ui Normal file
View File

@ -0,0 +1,765 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Tile</class>
<widget class="QMainWindow" name="Tile">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>320</width>
<height>240</height>
</rect>
</property>
<property name="windowTitle">
<string>Tile</string>
</property>
<property name="toolTip">
<string notr="true"/>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777213</height>
</size>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>1</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="pushButton_2">
<property name="geometry">
<rect>
<x>60</x>
<y>0</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>2</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_3">
<property name="geometry">
<rect>
<x>120</x>
<y>0</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>3</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_4">
<property name="geometry">
<rect>
<x>180</x>
<y>0</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>4</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_5">
<property name="geometry">
<rect>
<x>0</x>
<y>60</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>5</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_6">
<property name="geometry">
<rect>
<x>60</x>
<y>60</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>6</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_7">
<property name="geometry">
<rect>
<x>120</x>
<y>60</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>7</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_8">
<property name="geometry">
<rect>
<x>180</x>
<y>60</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>8</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_9">
<property name="geometry">
<rect>
<x>0</x>
<y>120</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>9</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_10">
<property name="geometry">
<rect>
<x>60</x>
<y>120</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>10</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_11">
<property name="geometry">
<rect>
<x>120</x>
<y>120</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>11</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_12">
<property name="geometry">
<rect>
<x>180</x>
<y>120</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>12</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_13">
<property name="geometry">
<rect>
<x>0</x>
<y>180</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>13</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_14">
<property name="geometry">
<rect>
<x>60</x>
<y>180</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>14</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_15">
<property name="geometry">
<rect>
<x>120</x>
<y>180</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>15</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_16">
<property name="geometry">
<rect>
<x>180</x>
<y>180</y>
<width>60</width>
<height>60</height>
</rect>
</property>
<property name="font">
<font>
<family>DejaVu Sans</family>
<pointsize>28</pointsize>
</font>
</property>
<property name="text">
<string>16</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_Reset">
<property name="geometry">
<rect>
<x>255</x>
<y>20</y>
<width>60</width>
<height>20</height>
</rect>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string>&amp;Reset</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_Shuffle">
<property name="geometry">
<rect>
<x>255</x>
<y>80</y>
<width>60</width>
<height>20</height>
</rect>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string>&amp;Shuffle</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_Quit">
<property name="geometry">
<rect>
<x>255</x>
<y>200</y>
<width>60</width>
<height>20</height>
</rect>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string>&amp;Quit</string>
</property>
</widget>
<widget class="QPushButton" name="pushButton_Help">
<property name="geometry">
<rect>
<x>255</x>
<y>140</y>
<width>60</width>
<height>20</height>
</rect>
</property>
<property name="focusPolicy">
<enum>Qt::NoFocus</enum>
</property>
<property name="text">
<string>&amp;Help</string>
</property>
</widget>
<widget class="Line" name="line">
<property name="geometry">
<rect>
<x>240</x>
<y>0</y>
<width>20</width>
<height>240</height>
</rect>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</widget>
</widget>
<layoutdefault spacing="6" margin="11"/>
<tabstops>
<tabstop>pushButton</tabstop>
<tabstop>pushButton_2</tabstop>
<tabstop>pushButton_3</tabstop>
<tabstop>pushButton_4</tabstop>
<tabstop>pushButton_Reset</tabstop>
<tabstop>pushButton_5</tabstop>
<tabstop>pushButton_6</tabstop>
<tabstop>pushButton_7</tabstop>
<tabstop>pushButton_8</tabstop>
<tabstop>pushButton_Shuffle</tabstop>
<tabstop>pushButton_9</tabstop>
<tabstop>pushButton_10</tabstop>
<tabstop>pushButton_11</tabstop>
<tabstop>pushButton_12</tabstop>
<tabstop>pushButton_Help</tabstop>
<tabstop>pushButton_13</tabstop>
<tabstop>pushButton_14</tabstop>
<tabstop>pushButton_15</tabstop>
<tabstop>pushButton_16</tabstop>
<tabstop>pushButton_Quit</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>pushButton</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>40</x>
<y>23</y>
</hint>
<hint type="destinationlabel">
<x>373</x>
<y>34</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_2</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>109</x>
<y>20</y>
</hint>
<hint type="destinationlabel">
<x>343</x>
<y>47</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_3</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>156</x>
<y>15</y>
</hint>
<hint type="destinationlabel">
<x>371</x>
<y>19</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_4</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>236</x>
<y>21</y>
</hint>
<hint type="destinationlabel">
<x>357</x>
<y>29</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_5</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>46</x>
<y>100</y>
</hint>
<hint type="destinationlabel">
<x>340</x>
<y>91</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_6</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>116</x>
<y>75</y>
</hint>
<hint type="destinationlabel">
<x>369</x>
<y>136</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_7</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>165</x>
<y>71</y>
</hint>
<hint type="destinationlabel">
<x>356</x>
<y>81</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_8</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>239</x>
<y>110</y>
</hint>
<hint type="destinationlabel">
<x>396</x>
<y>107</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_9</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>38</x>
<y>158</y>
</hint>
<hint type="destinationlabel">
<x>355</x>
<y>149</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_10</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>103</x>
<y>139</y>
</hint>
<hint type="destinationlabel">
<x>395</x>
<y>160</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_11</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>179</x>
<y>168</y>
</hint>
<hint type="destinationlabel">
<x>376</x>
<y>180</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_12</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>239</x>
<y>174</y>
</hint>
<hint type="destinationlabel">
<x>414</x>
<y>201</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_13</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>48</x>
<y>211</y>
</hint>
<hint type="destinationlabel">
<x>344</x>
<y>218</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_14</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>102</x>
<y>200</y>
</hint>
<hint type="destinationlabel">
<x>335</x>
<y>211</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_15</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>161</x>
<y>194</y>
</hint>
<hint type="destinationlabel">
<x>360</x>
<y>188</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_16</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>checkNeighbours()</slot>
<hints>
<hint type="sourcelabel">
<x>225</x>
<y>229</y>
</hint>
<hint type="destinationlabel">
<x>387</x>
<y>234</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_Reset</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>Reset()</slot>
<hints>
<hint type="sourcelabel">
<x>284</x>
<y>31</y>
</hint>
<hint type="destinationlabel">
<x>288</x>
<y>59</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_Quit</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>Quit()</slot>
<hints>
<hint type="sourcelabel">
<x>273</x>
<y>211</y>
</hint>
<hint type="destinationlabel">
<x>287</x>
<y>120</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_Shuffle</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>Shuffle()</slot>
<hints>
<hint type="sourcelabel">
<x>278</x>
<y>90</y>
</hint>
<hint type="destinationlabel">
<x>267</x>
<y>121</y>
</hint>
</hints>
</connection>
<connection>
<sender>pushButton_Help</sender>
<signal>clicked()</signal>
<receiver>Tile</receiver>
<slot>Help()</slot>
<hints>
<hint type="sourcelabel">
<x>290</x>
<y>148</y>
</hint>
<hint type="destinationlabel">
<x>292</x>
<y>178</y>
</hint>
</hints>
</connection>
</connections>
<slots>
<slot>checkNeighbours()</slot>
<slot>Reset()</slot>
<slot>Quit()</slot>
<slot>Shuffle()</slot>
<slot>Help()</slot>
</slots>
</ui>