void GameView::setGameSetup(NewGameSetup *gameSetup) { this->gameSetup = gameSetup; for (int i=0; i<2; ++i) { } if (game) delete game; game = new FourInARowGame(gameSetup->startPlayer, gameSetup->columns, gameSetup->rows ); columnIndex = 0; if (scene()) delete scene(); GameScene * scene = newScene(); //PrimitivesGameScene * scene = new PrimitivesGameScene(ui->gameView); //SvgGameScene * scene = new SvgGameScene(ui->gameView); setScene(scene); scene->setBoard(game->getBoard()); scene->toggleSound(false); for (int i=0; i<gameSetup->moveHistory.length(); ++i) { QString number(gameSetup->moveHistory.at(i)); columnIndex = number.toInt(); game->move(columnIndex); scene->addToken(i%2, columnIndex, game->getLatestTokenRow()); qDebug() << "column: " << columnIndex; scene->setupNextToken(columnIndex); qDebug() << "move: " << columnIndex; } scene->toggleSound(true); printNextPlayer(); if (gameSetup->isCpu[game->getPlayerToMoveNext()]) { move(); } }
void GameView::move() { GameScene * gameScene = (GameScene*)this->scene(); int player = game->getPlayerToMoveNext(); if (gameSetup->isCpu[player]) { columnIndex = cpuPlayers[player].getCpuMove(*game); } MoveResult res = game->move(columnIndex); QString message; switch (res) { case MoveResult::SUCCESS: gameScene->addToken(player, columnIndex, game->getLatestTokenRow()); gameSetup->moveHistory.append(QString::number(columnIndex)); gameScene->setupNextToken(columnIndex); ++gameSetup->moves; printNextPlayer(); break; case MoveResult::WIN: gameScene->toggleSound(false); gameScene->addToken(player, columnIndex, game->getLatestTokenRow()); gameScene->toggleSound(true); gameSetup->moveHistory.append(QString::number(columnIndex)); gameSetup->startPlayer=player; gameSetup->finished=1; ++gameSetup->moves; mainWindow->setStatusMessage( (game->getPlayerToMoveNext()==0 ? gameSetup->player0 : gameSetup->player1) + "wins with " + QString::number(gameSetup->moves+1) + " moves!" ); gameScene->playerWins( player, game->getWinRow() ); mainWindow->saveGame(); break; case MoveResult::TIE: gameScene->toggleSound(false); gameScene->addToken(player, columnIndex, game->getLatestTokenRow()); gameSetup->moveHistory.append(QString::number(columnIndex)); gameSetup->finished=2; ++gameSetup->moves; gameScene->tie(); mainWindow->saveGame(); qDebug() << "tie"; mainWindow->setStatusMessage("Game finished with a tie!"); break; case MoveResult::INVALID_COLUMN: gameScene->failToken(player, columnIndex, game->getLatestTokenRow()); break; case MoveResult::FULL_COLUMN: gameScene->failToken(player, columnIndex, game->getLatestTokenRow()); mainWindow->setStatusMessage( "Column is full, try another one " + (game->getPlayerToMoveNext()==0 ? gameSetup->player0 : gameSetup->player1) + "!" ); break; } // if game isnt finished and next player is cpu, begin next turn immediately if (!game->isFinished() && gameSetup->isCpu[game->getPlayerToMoveNext()]) { move(); } }