File indexing completed on 2024-04-14 04:02:00

0001 /*
0002     SPDX-FileCopyrightText: 2006 Matthew Williams <matt@milliams.com>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 //header
0008 #include "ksquaresdemowindow.h"
0009 
0010 //qt
0011 #include <QTimer>
0012 
0013 //kde
0014 #include <QApplication>
0015 #include <QStatusBar>
0016 #include <KActionCollection>
0017 #include <QDebug>
0018 #include <KLocalizedString>
0019 #include <KGameStandardAction>
0020 
0021 //classes
0022 #include "aicontroller.h"
0023 #include "gameboardview.h"
0024 
0025 KSquaresDemoWindow::KSquaresDemoWindow() : KXmlGuiWindow(), m_view(new GameBoardView(this)), m_scene(nullptr)
0026 {
0027     sGame = new KSquaresGame();
0028     connect(sGame, &KSquaresGame::takeTurnSig, this, &KSquaresDemoWindow::playerTakeTurn);
0029     connect(sGame, &KSquaresGame::gameOver, this, &KSquaresDemoWindow::gameOver);
0030 
0031     m_view->setRenderHints(QPainter::Antialiasing);
0032     m_view->setFrameStyle(QFrame::NoFrame);
0033     m_view->setDisabled(true);
0034     setCentralWidget(m_view);
0035 
0036     KGameStandardAction::quit(qApp, &QApplication::quit, actionCollection());
0037     setupGUI();
0038 
0039     //QT5 statusBar()->insertPermanentItem(i18n("Current Player"), 0);
0040     statusBar()->show();
0041 }
0042 
0043 void KSquaresDemoWindow::gameNew()
0044 {
0045     //create players
0046     QList<KSquaresPlayer> playerList;
0047     for (int i = 0; i < 4; i++) {
0048         QColor color;
0049         switch (i) {
0050         case 0:
0051             color = Qt::red;
0052             break;
0053         case 1:
0054             color = Qt::blue;
0055             break;
0056         case 2:
0057             color = Qt::green;
0058             break;
0059         case 3:
0060             color = Qt::yellow;
0061             break;
0062         default:
0063             qCritical() << "KSquaresGame::playerSquareComplete(); currentPlayerId() != 0|1|2|3";
0064         }
0065         playerList.append(KSquaresPlayer(i18n("Player %1", i + 1), color, false));
0066     }
0067 
0068     //create physical board
0069     GameBoardScene *temp = m_scene;
0070     m_scene = new GameBoardScene(15, 10);
0071 
0072     m_view->setScene(m_scene);
0073     delete temp;
0074 
0075     m_view->setBoardSize(); //refresh board zooming
0076 
0077     //start game etc.
0078     sGame->createGame(playerList, 15, 10);
0079     connect(m_scene, &GameBoardScene::lineDrawn, sGame, &KSquaresGame::addLineToIndex);
0080     connect(sGame, &KSquaresGame::drawLine, m_scene, &GameBoardScene::drawLine);
0081     connect(sGame, &KSquaresGame::highlightMove, m_scene, &GameBoardScene::highlightLine);
0082     connect(sGame, &KSquaresGame::drawSquare, m_scene, &GameBoardScene::drawSquare);
0083 
0084     sGame->start();
0085 }
0086 
0087 void KSquaresDemoWindow::playerTakeTurn(KSquaresPlayer *currentPlayer)
0088 {
0089     Q_UNUSED(currentPlayer);
0090     //QT5 statusBar()->changeItem(currentPlayer->name(), 0);
0091     QTimer::singleShot(200, this, &KSquaresDemoWindow::aiChooseLine);
0092 }
0093 
0094 void KSquaresDemoWindow::aiChooseLine()
0095 {
0096     aiController ai(sGame->currentPlayerId(), sGame->lines(), sGame->squares(), sGame->boardWidth(), sGame->boardHeight());
0097     sGame->addLineToIndex(ai.chooseLine());
0098 }
0099 
0100 void KSquaresDemoWindow::gameOver(const QList<KSquaresPlayer> & /*playerList*/)
0101 {
0102     //qDebug() << "Game Over";
0103     QTimer::singleShot(1000, this, &KSquaresDemoWindow::gameNew);
0104 }
0105 
0106 #include "moc_ksquaresdemowindow.cpp"