Exemplo n.º 1
0
 public TicTacToeLobby(Guid id)
 {
     _id       = id;
     playerOne = null;
     playerTwo = null;
     gameboard = new TicTacToeGameBoardCellState[3, 3];
     gameboard.SetInitState();
     isPlayOneTurn = true;
     gameState     = TicTacToeLobbyGameBoardState.OnGoing;
 }
Exemplo n.º 2
0
        public async Task ProcessClientMessage(string message, IUser user)
        {
            if (playerOne == null || playerTwo == null)
            {
                await user.SendMessage("Waiting on other player");

                return;
            }

            if (gameState != TicTacToeLobbyGameBoardState.OnGoing)
            {
                await user.SendMessage("The game is over, please leave the lobby with :leave lobby");

                return;
            }

            if ((user == playerTwo && isPlayOneTurn) || (user == playerOne && !isPlayOneTurn))
            {
                await user.SendMessage("Not your turn");

                return;
            }

            if (!await ApplyPlayerMove(message, user))
            {
                return;
            }

            await SendMessageToBothPlayers(playerOne, playerTwo, gameboard.ToGameString());

            if (gameboard.DidTagWin(isPlayOneTurn ? TicTacToeGameBoardCellState.X : TicTacToeGameBoardCellState.O))
            {
                var winningMessage = isPlayOneTurn ? $"{playerOne.GetUserName()} Won!\n" : $"{playerTwo.GetUserName()} Won!\n";

                await SendMessageToBothPlayers(playerOne, playerTwo, winningMessage);
                await SendMessageToBothPlayers(playerOne, playerTwo, "The game is over, please leave the lobby with :leave lobby");

                gameState = TicTacToeLobbyGameBoardState.GameOver;
            }
            else if (gameboard.IsTie())
            {
                await SendMessageToBothPlayers(playerOne, playerTwo, "Game is tie!");
                await SendMessageToBothPlayers(playerOne, playerTwo, "The game is over, please leave the lobby with :leave lobby");

                gameState = TicTacToeLobbyGameBoardState.GameOver;
            }

            isPlayOneTurn = !isPlayOneTurn;

            await SendMessageToBothPlayers(playerOne, playerTwo, isPlayOneTurn?$"{playerOne.GetUserName()} turn" : $"{playerTwo.GetUserName()} turn");
        }