public TicTacToeLobby(Guid id) { _id = id; playerOne = null; playerTwo = null; gameboard = new TicTacToeGameBoardCellState[3, 3]; gameboard.SetInitState(); isPlayOneTurn = true; gameState = TicTacToeLobbyGameBoardState.OnGoing; }
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"); }