void SGBattle::SendCurrentTurn() { SFRoom* pRoom = GetOwner()->GetOwner(); auto& roomMember = pRoom->GetRoomMemberMap(); int currentUserID = m_pSevenGameManager->GetCurrentUserID(); SGUser* pSGUser = m_pSevenGameManager->FindUser(currentUserID); SFProtobufPacket<SevenGamePacket::CurrentTurn> currentTurn(SevenGame::CurrentTurn); if (pSGUser->GetID() <= 0) { currentTurn.GetData().set_playerindex(pSGUser->GetID()); currentTurn.GetData().set_playername("AI"); } else { auto& iter = roomMember.find(pSGUser->GetID()); SFASSERT(iter != roomMember.end()); SFPlayer* pCurrentTurnPlayer = iter->second; currentTurn.GetData().set_playerindex(pCurrentTurnPlayer->GetSerial()); currentTurn.GetData().set_playername(pCurrentTurnPlayer->GetPlayerName()); } m_dwLastPlayTickCount = GetTickCount(); BroadCast(currentTurn); }
Move moveBuilder(Point position, Piece piece, board GameState) { Move result = malloc(sizeof(struct defMove)); result->xFrom = position->x; result->yFrom = position->y; result->movedPiece = piece; result->currentPieceTurnBefore = piece->lastMove; result->currentPieceTurnAfter = currentTurn(GameState); result->command = DO_NOTHING; result->isPieceCreated = NULL; result->isPieceRemoved = NULL; return result; }
int getPossibleMoves(board Game, Piece piece, Move *movesTable, Point point) { int n = 0; movesTable[n] = newMove(); n++; if (piece->lastMove == currentTurn(Game)) { return n; } n = getMovesCommands(Game, piece, movesTable, point); Move result = moveBuilder(point, piece, Game); int board_Size = boardSize(Game); int x = point->x; int y = point->y; if (toupper(piece->letter) == 'C' && currentTurn(Game) - piece->lastMove >=3 ) { for (int j=-1; j<=1; j++) { for (int i=-1; i<=1; i++) { if ( (j != 0 || i != 0) && validatePoint(makePoint(x + i, y + j), board_Size) && isPositionFree(Game, x + i, y + j)) { result->xTo = x + i; result->yTo = y + j; result->isPieceRemoved= NULL; char letter = piece->letter; Piece pieceCreated = createNewPiece(piece->owner, letter, currentTurn(Game)); result->isPieceCreated = pieceCreated; result->command = PRODUCE_PEASANT; movesTable[n] = newMove(); copyMoveData(movesTable[n], result); n++; free(result->isPieceCreated); letter = matchingKnightLetter(letter); pieceCreated = createNewPiece(piece->owner, letter, currentTurn(Game) - 1); result->isPieceCreated = pieceCreated; result->command = PRODUCE_KNIGHT; movesTable[n] = newMove(); copyMoveData(movesTable[n], result); n++; free(result->isPieceCreated); } } } } free(result); return n; }