void Player::play(){ //play the game // Player would increase step every time one makes a movement, // And modify it depthlimit every 5 steps gameOver = 0; // nobody wins the game step = 0; depthLimit_ = 7; sab.setDepthLimit(depthLimit_); if (role == MIN) { takeIn(); curState.print(); } move(); putOut(); curState.print(); takeIn(); curState.print(); while (gameOver == 0) { move(); putOut(); curState.print(); if (gameOver == 0) { takeIn(); curState.print(); } } checkGame(); }
void GameModel::markMine(int m, int n) { // 如果标记错了,就记为错误标记,在ui层游戏结束时做绘制区分 // 注意这里有个逻辑,如果一个方块标记两次会回到未挖掘的状态 if(gameMap[m][n].curState == UN_DIG) { if(gameMap[m][n].valueFlag == -1) { gameMap[m][n].curState = MARKED; } else { gameState = FAULT; gameMap[m][n].curState = WRONG_BOMB; } curMineNumber--; // 挖对了雷就减1 } else if(gameMap[m][n].curState == MARKED || gameMap[m][n].curState == WRONG_BOMB) { gameMap[m][n].curState = UN_DIG; gameState = PLAYING; curMineNumber++; // 雷数加回来 } // 检查游戏输赢,并作调整 checkGame(); }
void BossSnakePlay::scheUpdate(float time) { for(int i=0; i<m_snakes.size(); i++) { m_snakes[i]->m_victorFlag = true; if (m_snakes[i]->count()) continue; Location nextLoc = m_controls[i]->nextMove(m_snakes[i]->getSnakeLoc()); m_snakes[i]->moveTo(nextLoc); } checkGame(); judge(); }
void battleLocalWindow::fire(){ int xFire = ui->FireRowText->text().toInt(); int yFire = ui->FireColText->text().toInt(); QString playerNum; if(ui->FireRowText->text() == ""){ QMessageBox::information(this, tr("Bad Coordinates"),tr("No X coordinate entered. Please enter valid coordinate")); return; } else if(ui->FireColText->text() == ""){ QMessageBox::information(this, tr("Bad Coordinates"), tr("No Y coordinate entered. Please enter valid coordinate")); return; } else if(!goodCoordinate(xFire, yFire)){ QMessageBox::information(this, tr("Bad Coordinates"), tr("Bad coordinates entered. Please enter valid coordinates")); return; } if(CurrentPlayer==1){ EnemyBoard = Player2Board; playerNum = "1"; } else{ EnemyBoard = Player1Board; playerNum = "2"; } Location firePos(xFire,yFire); if(EnemyBoard->getSpotValue(firePos) >2){ QMessageBox::information(this, tr("Status: ERROR"), tr("Attempt to fire on repeat coordinates.")); return; } else if(EnemyBoard->recieveShot(firePos)) QMessageBox::information(this, tr("Status: HIT"), tr("HIT!")); else QMessageBox::information(this, tr("Status: MISS"), tr("MISS!")); if(!checkGame()){ QMessageBox::information(this, tr("GAME OVER"), "Game over. Player " % playerNum %"Wins"); this->close(); } nextTurn(); }
void GameModel::digMine(int m, int n) { // 正常方块且没有被翻开过,标记为已挖 if(gameMap[m][n].valueFlag > 0 && gameMap[m][n].curState == UN_DIG) { gameMap[m][n].curState = DIGGED; } // 遇到空白块(数字0)就递归挖雷,如果踩雷就爆掉,游戏结束 if(gameMap[m][n].valueFlag == 0 && gameMap[m][n].curState == UN_DIG) { gameMap[m][n].curState = DIGGED; for(int y = -1; y <= 1; y++) { for(int x = -1; x <= 1; x++) { if(m + y >= 0 && m + y < mRow && n + x >= 0 && n + x < mCol && !(x == 0 && y == 0)) { digMine(m + y, n + x); } } } } // 踩雷了 if(gameMap[m][n].valueFlag == -1) { gameState = OVER; gameMap[m][n].curState = BOMB; } // 检查游戏输赢,并作调整 checkGame(); }
void Server::playedCard(QString message, Player *pl) { qDebug() << "Server::playedCard"; QString num; QString suit; int value; if (message == "0") { num = pl->card(0)->number(); suit = pl->card(0)->suit(); value = pl->card(0)->value(); } else if (message == "1") { num = pl->card(1)->number(); suit = pl->card(1)->suit(); value = pl->card(1)->value(); } else { num = pl->card(2)->number(); suit = pl->card(2)->suit(); value = pl->card(2)->value(); } QString newMessage; QString code; code = "04"; //code for played card. newMessage = num + suit; qDebug() << newMessage; if (numberOfPlayers == 4) { if (players[0] == pl) { players[1]->sendMessage(code + "03" + newMessage); players[2]->sendMessage(code + "02" + newMessage); players[3]->sendMessage(code + "01" + newMessage); players[0]->setPlayed(true); players[0]->setPlayedCardValue(value); if (getRound() == 0) cardsOfRoundOne[0] = value; if (getRound() == 1) cardsOfRoundTwo[0] = value; if (getRound() == 2) cardsOfRoundThree[0] = value; } else if (players[1] == pl) { players[0]->sendMessage(code + "01" + newMessage); players[2]->sendMessage(code + "03" + newMessage); players[3]->sendMessage(code + "02" + newMessage); players[1]->setPlayed(true); players[1]->setPlayedCardValue(value); if (getRound() == 0) cardsOfRoundOne[1] = value; if (getRound() == 1) cardsOfRoundTwo[1] = value; if (getRound() == 2) cardsOfRoundThree[1] = value; } else if (players[2] == pl) { players[0]->sendMessage(code + "02" + newMessage); players[1]->sendMessage(code + "01" + newMessage); players[3]->sendMessage(code + "03" + newMessage); players[2]->setPlayed(true); players[2]->setPlayedCardValue(value); if (getRound() == 0) cardsOfRoundOne[2] = value; if (getRound() == 1) cardsOfRoundTwo[2] = value; if (getRound() == 2) cardsOfRoundThree[2] = value; } else { players[0]->sendMessage(code + "03" + newMessage); players[1]->sendMessage(code + "02" + newMessage); players[2]->sendMessage(code + "01" + newMessage); players[3]->setPlayed(true); players[3]->setPlayedCardValue(value); if (getRound() == 0) cardsOfRoundOne[3] = value; if (getRound() == 1) cardsOfRoundTwo[3] = value; if (getRound() == 2) cardsOfRoundThree[3] = value; } if (players[0]->hasPlayed() && players[1]->hasPlayed() && players[2]->hasPlayed() && players[3]->hasPlayed()) { checkGame(); } else { nextPlayer(); } } else { if (players[0] == pl) { players[1]->sendMessage(code + "02" + newMessage); players[1]->setPlayed(true); players[1]->setPlayedCardValue(value); if (getRound() == 0) cardsOfRoundOne[0] = value; if (getRound() == 1) cardsOfRoundTwo[0] = value; if (getRound() == 2) cardsOfRoundThree[0] = value; } else { players[0]->sendMessage(code + "02" + newMessage); players[0]->setPlayed(true); players[0]->setPlayedCardValue(value); if (getRound() == 0) cardsOfRoundOne[1] = value; if (getRound() == 1) cardsOfRoundTwo[1] = value; if (getRound() == 2) cardsOfRoundThree[1] = value; } if (players[0]->hasPlayed() && players[1]->hasPlayed()) { qDebug() << "All players have played!"; checkGame(); } else { qDebug() << "Someone not have played yet, going to next player"; nextPlayer(); } } }