Ejemplo n.º 1
0
void gamestart()//游戏初始化

{

	system("mode con cols=100 lines=30");

	welcometogame();

	creatMap();

	initsnake();

	createfood();

}
Ejemplo n.º 2
0
void GameEngine::gameProcessing()
{
    switch (currentGameState)
    {
        case GS_INIT:
        {
            //create GameState window
            gameState = new GameState();
            gameState->setActive("NextTurnBtn", false);
            gameState->setActive("ExchangeBtn", false);

            //init bank
            createCardBank();

            //players
            createPlayers();

            //init map
            creatMap();

            throwDices();

            currentGameState = GS_SELECT_PLAYER_ORDER;
            break;
        }
        case GS_SELECT_PLAYER_ORDER:
        {
            createPlayersQueue();
            gameState->setCurrentPlayer(*currentPlayer);
            currentChipType = VILLAGE;
            currentGameState = GS_PUT_FIRST_CHIP;

            break;
        }
        case GS_PUT_FIRST_CHIP:
        {
            highlightAllowedVertexes();
            if (chipPut)
            {
                currentPlayer->putChip(*chipForPut, true);

                chipPut = false;
                isCalcAllowedPuts = true;

                currentChipType = ROAD;
                currentGameState = GS_PUT_FIRST_ROAD;
            }
            break;
        }
        case GS_PUT_FIRST_ROAD:
        {
            highlightAllowedVertexes();
            if (chipPut)
            {
                currentPlayer->putChip(*chipForPut, true);

                chipPut = false;
                isCalcAllowedPuts = true;

                currentChipType = VILLAGE;
                ++firstTurnsCounter;
                if (firstTurnsCounter < players.size())
                {
                    currentGameState = GS_PUT_FIRST_CHIP;
                    nextTurn();
                }
                else
                {
                    currentGameState = GS_PUT_SECOND_CHIP;
               }
            }
        }
        case GS_PUT_SECOND_CHIP:
        {
            highlightAllowedVertexes();
            if (chipPut)
            {
                currentPlayer->putChip(*chipForPut, true);
                currentPlayer->getLastChip()->getRecourcesFromHexagons();

                chipPut = false;
                isCalcAllowedPuts = true;

                currentChipType = ROAD;
                currentGameState = GS_PUT_SECOND_ROAD;
            }
            break;
        }
        case GS_PUT_SECOND_ROAD:
        {
            highlightAllowedVertexes();
            if (chipPut)
            {
                currentPlayer->putChip(*chipForPut, true);

                chipPut = false;
                isCalcAllowedPuts = true;

                currentChipType = VILLAGE;

                ++firstTurnsCounter;
                if (firstTurnsCounter < players.size()*2)
                {
                    currentGameState = GS_PUT_SECOND_CHIP;
                    nextTurn();
                }
                else
                    currentGameState = GS_THROW_DICES;
            }
            break;
        }
        case GS_THROW_DICES:
        {
            throwDices();
            for (int i = 0; i < MAX_HEXAGON_COUNT; ++i)
            {
                if (hexagons[i].getDice() == dices.dice())
                {
                    int resToDist = hexagons[i].getResourcesCountToDistribute();

                    if (canGetFromBank((eCardType) hexagons[i].getType(), resToDist))
                    {
                        hexagons[i].distributeResources();
                    }
                }
            }
            gameState->setCurrentPlayer(*currentPlayer);
            currentGameState = GS_PLAYER_TURN;
            break;
        }
        case GS_PLAYER_TURN:
        {
            gameState->setActive("NextTurnBtn", true);
            gameState->setActive("ExchangeBtn", true);

            highlightAllowedVertexes();
            if (chipPut)
            {
                currentPlayer->putChip(*chipForPut);
                chipPut = false;

                allowedPuts.clear();

                gameState->setCurrentPlayer(*currentPlayer);
            }
            break;
        }
        case GS_TURN_END:
        {
            isCalcAllowedPuts = true;
            currentGameState = GS_THROW_DICES;
            nextTurn();
            break;
        }
        case GS_END:
        {
            break;
        }
        case GS_ERROR:
        {
            break;
        }
    }
}