void gamestart()//游戏初始化 { system("mode con cols=100 lines=30"); welcometogame(); creatMap(); initsnake(); createfood(); }
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; } } }