void Round::update(Float32 elapsedTime) { // Check if there's a winner if (!hasWinner()) { checkWinner(); } else { gameOverWait = std::max(gameOverWait - elapsedTime, 0.0f); if (gameOverWait < (D6_GAME_OVER_WAIT - D6_ROUND_OVER_WAIT)) { return; } } for (Player &player : world.getPlayers()) { player.update(world, game.getSettings().getScreenMode(), elapsedTime); if (game.getSettings().isGhostEnabled() && !player.isInGame() && !player.isGhost()) { player.makeGhost(); } } world.update(elapsedTime); if (suddenDeathMode) { waterFillWait += elapsedTime; if (waterFillWait > D6_RAISE_WATER_WAIT) { waterFillWait = 0; world.raiseWater(); } } showYouAreHere = std::max(showYouAreHere - 3 * elapsedTime, 0.0f); }
int localGame() { system("cls"); char winner = 0; TILE board[121]; memset(&board, 0, sizeof board); initBoard(board); char currentPlayer = 1; TILE t = {0,0,0,0}, g; do { jumpTo(0,0); printf("%s, make a move!\n", currentPlayer==1?"Attacker":"Defender"); printBoard(board); int r; t = selectPiece(board, currentPlayer, t); if (tileEmpty(t)) return 0; printIntense(t); g = selectNewPosition(board, t, &r); if (tileEmpty(g)) return 0; if (r) continue; makeMove(t, g, board); winner = hasWinner(board, board[getIndex(g)]); currentPlayer = currentPlayer % 2 + 1; t = g; } while (!winner); // reblit board to capture last move jumpTo(0,1); printBoard(board); return winner; }
/*If the game is over it writes the scores on the argument and returns true, otherwise it returns false*/ int GameBoard::score(int &score) { int winningScore = (last_to_play == Player::Human) ? -1 : 1; if(hasWinner()) { score = winningScore; return true; } else if(!hasPlace()) { score = 0; return true; } return false; }
bool Round::isOver() const { return hasWinner() && gameOverWait <= 0; }
void Tron::switchKeyOn(int player, KBAction::Action action) { // Set key pressed if (!players[player]->isComputer()) { switch (action) { case KBAction::UP: case KBAction::DOWN: case KBAction::LEFT: case KBAction::RIGHT: players[player]->setKeyPressed(true); break; case KBAction::ACCELERATE: break; default: break; } } // if both players press keys at the same time, start game... if (players[0]->hasKeyPressed() && players[1]->hasKeyPressed()) { // Start game if (gameEnded && !gameBlocked) { if (hasWinner()) { newGame(); } reset(); startGame(); } // ...or continue else if (gamePaused) { togglePause(); } } // Key handling for movement if (!players[player]->isComputer()) { switch (action) { case KBAction::UP: players[player]->setDirection(PlayerDirections::Up); break; case KBAction::DOWN: players[player]->setDirection(PlayerDirections::Down); break; case KBAction::LEFT: players[player]->setDirection(PlayerDirections::Left); break; case KBAction::RIGHT: players[player]->setDirection(PlayerDirections::Right); break; case KBAction::ACCELERATE: if (!Settings::acceleratorBlocked()) { players[player]->setAccelerated(true); } break; default: break; } } }
void Tron::paintEvent(QPaintEvent *e) { QPainter p(this); p.drawPixmap(e->rect().topLeft(), *Renderer::self()->getPlayField(), e->rect()); if (gamePaused) // if game is paused, print message { QString message = i18n("Game paused"); QPixmap messageBox = Renderer::self()->messageBox(message); QPoint point(width() / 2 - messageBox.width() / 2, height() / 2 - messageBox.height() / 2); p.drawPixmap(point, messageBox, e->rect()); } else if (gameEnded) // If game ended, print "Crash!" { QString message = QString(); if (Settings::gameType() != Settings::EnumGameType::Snake) { if (hasWinner()) { int winner = getWinner(); int loser = 1 - winner; QString winnerName = players[winner]->getName(); QString loserName = players[loser]->getName(); int winnerScore = players[winner]->getScore(); int loserScore = players[loser]->getScore(); message += i18np("%1 has won versus %2 with %4 versus %3 point!", "%1 has won versus %2 with %4 versus %3 points!", winnerName, loserName, loserScore, winnerScore); message += QLatin1Char( '\n' ); } else { QString name1 = players[0]->getName(); QString name2 = players[1]->getName(); int points1 = players[0]->getScore(); int points2 = players[1]->getScore(); message += i18nc("%2 = 'x points' [player %1], %4 = 'x points' [player %3]", "%1 (%2) versus %3 (%4)", name2, i18np("%1 point", "%1 points", points2), name1, i18np("%1 point", "%1 points", points1)); message += QLatin1Char( '\n' ); } } else { int points = players[0]->getScore(); message += i18np("KSnake game ended with 1 point", "KSnake game ended with %1 points", points); message += QLatin1Char( '\n' ); } if (Settings::gameType() == Settings::EnumGameType::PlayerVSPlayer) { message += i18n("The game starts when each player has pressed one of their direction keys!"); } else { message += i18n("Press any of your direction keys to start!"); } QPixmap messageBox = Renderer::self()->messageBox(message); QPoint point(width() / 2 - messageBox.width() / 2, height() / 2 - messageBox.height() / 2); p.drawPixmap(point, messageBox, e->rect()); } }