14 #include <QtGui/QStandardItemModel>
15 #include <QtCore/QTimer>
18 #include <KConfigDialog>
19 #include <KActionCollection>
22 #include <KScoreDialog>
24 #include <KStandardGameAction>
41 setCentralWidget(m_view);
42 QTimer::singleShot(0,
this, SLOT(initObject()));
52 void KSquaresWindow::initObject()
56 connect(sGame, SIGNAL(gameOver(QVector<KSquaresPlayer>)),
this, SLOT(gameOver(QVector<KSquaresPlayer>)));
57 m_view->setRenderHints(QPainter::Antialiasing);
58 m_view->setFrameStyle(QFrame::NoFrame);
60 statusBar()->insertPermanentItem(i18n(
"Current Player"), statusplayer);
62 setAutoSaveSettings();
70 KScoreDialog ksdialog(KScoreDialog::Name,
this);
71 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Easy"), i18n(
"Easy")));
72 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Medium"), i18n(
"Medium")));
73 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Hard"), i18n(
"Hard")));
83 QList<QLineEdit*> nameLineEditList;
84 nameLineEditList.append(dialog.playerOneName);
85 nameLineEditList.append(dialog.playerTwoName);
86 nameLineEditList.append(dialog.playerThreeName);
87 nameLineEditList.append(dialog.playerFourName);
88 QList<QCheckBox*> humanCheckBoxList;
89 humanCheckBoxList.append(dialog.playerOneHuman);
90 humanCheckBoxList.append(dialog.playerTwoHuman);
91 humanCheckBoxList.append(dialog.playerThreeHuman);
92 humanCheckBoxList.append(dialog.playerFourHuman);
102 humanCheckBoxList.at(i)->setCheckState(Qt::Checked);
104 humanCheckBoxList.at(i)->setCheckState(Qt::Unchecked);
110 dialog.quickStartCheck->setCheckState(Qt::Checked);
112 dialog.quickStartCheck->setCheckState(Qt::Unchecked);
116 if (dialog.result() == QDialog::Rejected)
return;
121 QStringList tempNames;
122 for(
int i=0; i<=3; i++)
124 tempNames.append(nameLineEditList.at(i)->text());
128 QList<int> tempHuman;
129 for(
int i=0; i<=3; i++)
131 tempHuman.append(humanCheckBoxList.at(i)->checkState());
146 QVector<KSquaresPlayer> playerList;
153 color = QColor(191,3,3);
156 color = QColor(0,67,138);
159 color = QColor(0,137,44);
162 color = QColor(243,195,0);
165 kError() <<
"KSquaresGame::playerSquareComplete(); currentPlayerId() != 0|1|2|3";
174 m_view->setScene(m_scene);
181 connect(m_scene, SIGNAL(lineDrawn(
int)), sGame, SLOT(addLineToIndex(
int)));
182 connect(m_scene, SIGNAL(signalMoveRequest(
int,
int,
int,
int)), SLOT(slotMoveRequest(
int,
int,
int,
int)));
183 connect(sGame, SIGNAL(drawLine(
int,QColor)), m_scene, SLOT(drawLine(
int,QColor)));
184 connect(sGame, SIGNAL(highlightMove(
int)), m_scene, SLOT(highlightLine(
int)));
185 connect(sGame, SIGNAL(drawSquare(
int,QColor)), m_scene, SLOT(drawSquare(
int,QColor)));
192 QListIterator<int> i(lines);
201 void KSquaresWindow::gameOver(
const QVector<KSquaresPlayer> &_playerList)
203 QVector<KSquaresPlayer> playerList = _playerList;
204 qSort(playerList.begin(), playerList.end(), qGreater<KSquaresPlayer>());
208 scoresDialog.setButtons(KDialog::Close);
209 scoresDialog.setDefaultButton(KDialog::Close);
210 scoresDialog.setCaption(i18n(
"Scores"));
212 QStandardItemModel* scoreTableModel =
new QStandardItemModel(&scoresDialog);
213 scoreTableModel->setRowCount(playerList.size());
214 scoreTableModel->setColumnCount(2);
215 scoreTableModel->setHeaderData(0, Qt::Horizontal, i18n(
"Player Name"));
216 scoreTableModel->setHeaderData(1, Qt::Horizontal, i18n(
"Completed Squares"));
218 for(
int i = 0; i < playerList.size(); i++)
220 scoreTableModel->setItem(i, 0,
new QStandardItem(playerList.at(i).name()));
221 scoreTableModel->item(i, 0)->setEditable(
false);
224 temp.setNum(playerList.at(i).score());
225 scoreTableModel->setItem(i, 1,
new QStandardItem(temp));
226 scoreTableModel->item(i, 1)->setEditable(
false);
229 scoresDialog.scoreTable->setModel(scoreTableModel);
230 scoresDialog.scoreTable->resizeColumnsToContents();
233 if(playerList.at(0).isHuman())
237 KScoreDialog ksdialog(KScoreDialog::Name,
this);
241 ksdialog.setConfigGroup(qMakePair(QByteArray(
"Easy"), i18n(
"Easy")));
242 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Medium"), i18n(
"Medium")));
243 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Hard"), i18n(
"Hard")));
246 ksdialog.setConfigGroup(qMakePair(QByteArray(
"Medium"), i18n(
"Medium")));
247 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Easy"), i18n(
"Easy")));
248 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Hard"), i18n(
"Hard")));
251 ksdialog.setConfigGroup(qMakePair(QByteArray(
"Hard"), i18n(
"Hard")));
252 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Easy"), i18n(
"Easy")));
253 ksdialog.addLocalizedConfigGroupName(qMakePair(QByteArray(
"Medium"), i18n(
"Medium")));
256 KScoreDialog::FieldInfo scoreInfo;
257 scoreInfo[KScoreDialog::Name]=playerList.at(0).name();
258 scoreInfo[KScoreDialog::Score].setNum(score);
260 if(ksdialog.addScore(scoreInfo, KScoreDialog::AskName))
265 void KSquaresWindow::playerTakeTurn(
KSquaresPlayer* currentPlayer)
268 statusBar()->changeItem(
269 QString::fromLatin1(
"<font color=\"%1\">%2</font>")
270 .arg(currentPlayer->
colour().name())
271 .arg(currentPlayer->
name()),
278 setCursor(Qt::ArrowCursor);
284 setCursor(Qt::WaitCursor);
287 QTimer::singleShot(200,
this, SLOT(aiChooseLine()));
288 setCursor(Qt::ArrowCursor);
293 void KSquaresWindow::aiChooseLine()
299 void KSquaresWindow::setupActions()
301 KStandardGameAction::gameNew(
this, SLOT(
gameNew()), actionCollection());
302 KAction *resetGame = KStandardGameAction::restart(
this, SLOT(
gameReset()), actionCollection());
303 resetGame->setStatusTip(i18n(
"Start a new game with the current settings"));
305 KStandardGameAction::highscores(
this, SLOT(
showHighscores()), actionCollection());
306 KStandardGameAction::quit(
this, SLOT(close()), actionCollection());
309 KStandardAction::preferences(
this, SLOT(optionsPreferences()), actionCollection());
314 void KSquaresWindow::optionsPreferences()
316 KConfigDialog *dialog =
new KConfigDialog(
this,
"settings",
Settings::self());
318 QWidget *displaySettingsDialog =
new QWidget;
319 ui_prefs_display.setupUi(displaySettingsDialog);
320 dialog->addPage(displaySettingsDialog, i18n(
"Display"),
"preferences-desktop-display");
322 QWidget *aiSettingsDialog =
new QWidget;
323 ui_prefs_ai.setupUi(aiSettingsDialog);
324 dialog->addPage(aiSettingsDialog, i18n(
"Computer Player"),
"games-difficult");
326 connect(dialog, SIGNAL(settingsChanged(QString)), m_view, SLOT(setBoardSize()));
330 #include "ksquareswindow.moc"
Player class for KSquares.
void disableEvents()
enables mouse events
static int quickStart()
Get Quick start the game.
void createGame(const QVector< KSquaresPlayer > &startPlayers, int startWidth, int startHeight)
Create a new game.
Scene for displaying the game board.
static void setBoardWidth(int v)
Set Width of board.
static void setQuickStart(int v)
Set Quick start the game.
QList< bool > lines() const
static void setNumOfPlayers(int v)
Set Number of Players.
static void setPlayerNames(const QStringList &v)
Set Player Names.
void start()
Starts the game.
void gameReset()
Start a new game with the same settings (read from KConfig Settings)
void addLineToIndex(int index)
static int numOfPlayers()
Get Number of Players.
static void setBoardHeight(int v)
Set Height of board.
static int boardHeight()
Get Height of board.
QList< int > squares() const
static QStringList playerNames()
Get Player Names.
static int difficulty()
Get Difficulty.
static int boardWidth()
Get Width of board.
AI Controller for KSquares.
void gameNew()
Launch the new game dialog and create a new game.
QList< int > autoFill(int safeMovesLeft)
Finds lines that can be filled without causing squares to be surrounded by 3 lines as a result...
void setBoardSize()
Automatically resizes the board according to the users preferences. Deprecated for a bit...
int currentPlayerId() const
KSquaresWindow()
Constructor.
static void setHumanList(const QList< int > &v)
Set Human or AI.
void enableEvents()
disables mouse events
static QList< int > humanList()
Get Human or AI.
Actual game board widget.
QString name() const
Sets the players name.