示例#1
0
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();		
}
示例#2
0
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();
}
示例#3
0
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();
}
示例#5
0
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();
}
示例#6
0
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();
        }
    }
}