Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
Arquivo: move.c Projeto: mplaton1/IPP
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;
}
Exemplo n.º 3
0
Arquivo: move.c Projeto: mplaton1/IPP
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;
}