public void WhenThereAreMorePositionAndNoPlayerWinsTheGameIsNotFinished() { string board1 = "XX-" + "O-O" + "--X"; string board2 = "XOX" + "--X" + "-O-"; string board3 = "X--" + "-O-" + "OX-"; string board4 = "OXX" + "---" + "X-O"; ITicTacToeLogic logic = new TicTacToeLogic(); Assert.AreEqual(GameResult.NotFinished, logic.GetResult(board1)); Assert.AreEqual(GameResult.NotFinished, logic.GetResult(board2)); Assert.AreEqual(GameResult.NotFinished, logic.GetResult(board3)); Assert.AreEqual(GameResult.NotFinished, logic.GetResult(board4)); }
public GameState ResolveMoves(GameState oldState, GameTurn gameTurn) { foreach (GameMove move in gameTurn.moves) { oldState.cells [move.targetRow * 3 + move.targetCol] = oldState.whoseTurn; } // Check winner string[] roles = { "0", "1" }; List <string> players = new List <string> (roles); string winner = TicTacToeLogic.GetWinner(players, oldState.cells); if (winner != null) { oldState.stage = 1; oldState.winner = winner; } else { if (oldState.whoseTurn == "0") { oldState.whoseTurn = "1"; } else { oldState.whoseTurn = "0"; } } return(oldState); }
public void WhenThereAreThreeOPlayerTwoWins() { string board1 = "XX-" + "OOO" + "X-X"; string board2 = "XOX" + "-OX" + "-O-"; string board3 = "XXO" + "XO-" + "OX-"; string board4 = "OXX" + "-O-" + "X-O"; ITicTacToeLogic logic = new TicTacToeLogic(); Assert.AreEqual(GameResult.WonByO, logic.GetResult(board1)); Assert.AreEqual(GameResult.WonByO, logic.GetResult(board2)); Assert.AreEqual(GameResult.WonByO, logic.GetResult(board3)); Assert.AreEqual(GameResult.WonByO, logic.GetResult(board4)); }
public void WhenThereAreThreeXPlayerOneWins() { string board1 = "XXO" + "OXO" + "OXX"; string board2 = "XXO" + "XOX" + "XXO"; string board3 = "XXX" + "XOO" + "OXX"; string board4 = "XOX" + "OXO" + "XOX"; ITicTacToeLogic logic = new TicTacToeLogic(); Assert.AreEqual(GameResult.WonByX, logic.GetResult(board1)); Assert.AreEqual(GameResult.WonByX, logic.GetResult(board2)); Assert.AreEqual(GameResult.WonByX, logic.GetResult(board3)); Assert.AreEqual(GameResult.WonByX, logic.GetResult(board4)); }
public void Test_MakeMove_simpleMove_currectResult() { logic = new TicTacToeLogic(); logic.MakeMove(0, 0, 0, 0, 1); Assert.AreEqual(1, logic.GetInsideCell(0, 0, 0, 0)); Assert.AreEqual(0, logic.GetOutsideCell(0, 0)); }
public void StartGameTest() { TicTacToeLogic ticTacToeLogic = new TicTacToeLogic(); var output = ticTacToeLogic.StartGame(1, 2, 3); Assert.True(output.Message == "Game is started, GameId : " + output.Guid); }
public MatchState PlayerMove(Guid matchId, Guid playerId, MovePosition move) { var match = _onlineMatches.FirstOrDefault(x => x.id == matchId); MatchState nextState = null; if (match == null) { throw new EmptyResultsException(); } if (match.operationState == GameOperationState.WaitingForPlayers) { throw new WaitingForPlayersException(); } if (match.operationState == GameOperationState.Completed) { throw new GameIsOverException(); } if (!match.players.Contains(playerId)) { throw new PlayerNotInSpecifiedGameException(); } nextState = TicTacToeLogic.CalculateNextState(match, playerId, move); if (nextState.operationState == GameOperationState.Completed) { _dataController.StoreMatch(nextState); } return(nextState); }
private void button_newGame_Click(object sender, RoutedEventArgs e) { canvas_play.Children.Clear(); InitializeField(); queueTeam = 1; mainLogic = new TicTacToeLogic(); label_queue.Content = "Ходит: X"; }
public void Test_IsWon_Won2_CurrectResult() { logic = new TicTacToeLogic(); MakeTeamWonInOneCellDiag(1, 1, 2); MakeTeamWonInOneCellDiag(2, 2, 2); MakeTeamWonInOneCellDiag(0, 0, 2); Assert.IsTrue(logic.IsWon(2)); }
public void Test_IsDraw_NoDraw1_CurrectResult() { logic = new TicTacToeLogic(); MakeTeamWonInOneCellDiag(0, 1, 1); MakeTeamWonInOneCellDiag(0, 2, 1); MakeTeamWonInOneCellDiag(0, 0, 1); Assert.IsFalse(logic.IsDraw()); }
/// <summary> /// Finds out if there is a sequence /// </summary> private bool isWon() { char currentSymbol = PlayerDetails.s_Symbols[s_CurrentTurn % 2]; char[,] symbols = toChars(); return(TicTacToeLogic.checkforStraight(symbols, currentSymbol, s_CurrentTurn)); }
public void Test_IsFull_NotFull2_CurrectResult() { logic = new TicTacToeLogic(); MakeFullOutsideCell(0, 0); MakeFullOutsideCell(1, 1); MakeFullOutsideCell(2, 2); Assert.IsFalse(logic.IsFull()); }
public void Test_MakeMove_WonInOneCellColumn_CurrectResult() { for (int i = 0; i < 3; i++) { logic = new TicTacToeLogic(); MakeTeamWonInOneCellColumn(0, 0, 1, i); Assert.AreEqual(1, logic.GetOutsideCell(0, 0)); } }
// Use this for initialization void Start() { values = new string[3,3]; TicTacToeLogic.PlaceMarker placeX = (x, y) => {values[x, y] = "X";}; TicTacToeLogic.PlaceMarker placeO = (x, y) => {values[x, y] = "O";}; TicTacToeLogic.EndGame endGameListener= (result) => {endString = result;}; logic = new TicTacToeLogic(placeX, placeO, endGameListener); }
public void CalculateNextState_GameIsOver_ThrowsException() { var playerOne = Guid.NewGuid(); var move = MovePosition.MiddleCenter; var currentState = new MatchState { operationState = GameOperationState.Completed, }; Assert.Throws(typeof(GameIsOverException), () => TicTacToeLogic.CalculateNextState(currentState, playerOne, move)); }
public void CalculateNextState_PlayerTwoMakesMove_IsSuccessful() { var matchId = Guid.NewGuid(); var playerOne = Guid.NewGuid(); var playerTwo = Guid.NewGuid(); var move = MovePosition.MiddleCenter; var currentState = new MatchState { id = matchId, operationState = GameOperationState.InProgress, playerTurnId = playerTwo, players = new List <Guid> { playerOne, playerTwo }, inGameState = new TicTacToeState { firstPlayer = playerOne, secondPlayer = playerTwo, board = new List <PlayerMark> { PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, } }, }; var expectedState = new MatchState { id = matchId, operationState = GameOperationState.InProgress, playerTurnId = playerOne, players = new List <Guid> { playerOne, playerTwo }, inGameState = new TicTacToeState { firstPlayer = playerOne, secondPlayer = playerTwo, board = new List <PlayerMark> { PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.O, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, } }, }; var nextState = TicTacToeLogic.CalculateNextState(currentState, playerTwo, move); Assert.Equal(expectedState.playerTurnId, nextState.playerTurnId); Assert.Equal(expectedState.inGameState.board, nextState.inGameState.board); }
public void CalculateNextState_GameIsATie_ReturnsUpdatedMatch() { var playerOne = Guid.NewGuid(); var playerTwo = Guid.NewGuid(); var move = MovePosition.MiddleCenter; var currentState = new MatchState { operationState = GameOperationState.InProgress, playerTurnId = playerOne, players = new List <Guid> { playerOne, playerTwo }, inGameState = new TicTacToeState { firstPlayer = playerOne, secondPlayer = playerTwo, board = new List <PlayerMark> { PlayerMark.X, PlayerMark.O, PlayerMark.O, PlayerMark.O, PlayerMark.Empty, PlayerMark.X, PlayerMark.O, PlayerMark.X, PlayerMark.O, } }, }; var expectedState = new MatchState { operationState = GameOperationState.Completed, playerTurnId = Guid.Empty, winnerId = Guid.Empty, players = new List <Guid> { playerOne, playerTwo }, inGameState = new TicTacToeState { firstPlayer = playerOne, secondPlayer = playerTwo, board = new List <PlayerMark> { PlayerMark.X, PlayerMark.O, PlayerMark.O, PlayerMark.O, PlayerMark.X, PlayerMark.X, PlayerMark.O, PlayerMark.X, PlayerMark.O, } }, }; var nextState = TicTacToeLogic.CalculateNextState(currentState, playerOne, move); Assert.Equal(expectedState.operationState, nextState.operationState); Assert.Equal(expectedState.playerTurnId, nextState.playerTurnId); Assert.Equal(expectedState.winnerId, nextState.winnerId); Assert.Equal(expectedState.inGameState.board, nextState.inGameState.board); }
public void CaptureMoveTest() { TicTacToeLogic ticTacToeLogic = new TicTacToeLogic(); var output2 = ticTacToeLogic.StartGame(9, 10, 3); Assert.True(output2.Message == "Game is started, GameId : " + output2.Guid); Assert.True(ticTacToeLogic.CaptureMove(output2.Guid, 10, 0, 0).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output2.Guid, 9, 1, 2).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output2.Guid, 10, 0, 2).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output2.Guid, 9, 1, 1).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output2.Guid, 10, 0, 1).Message == "You win"); }
public void Test_IsDraw_NoDraw2_CurrectResult() { logic = new TicTacToeLogic(); MakeFullOutsideCell(0, 0); MakeFullOutsideCell(1, 1); MakeFullOutsideCell(2, 2); MakeTeamWonInOneCellDiag(0, 1, 1); MakeTeamWonInOneCellDiag(0, 2, 1); MakeTeamWonInOneCellDiag(1, 2, 2); MakeTeamWonInOneCellDiag(1, 0, 2); MakeTeamWonInOneCellDiag(2, 0, 1); Assert.IsFalse(logic.IsDraw()); }
public void CalculateNextState_NotPlayersTurn_ThrowsException() { var playerOne = Guid.NewGuid(); var playerTwo = Guid.NewGuid(); var move = MovePosition.MiddleCenter; var currentState = new MatchState { operationState = GameOperationState.InProgress, playerTurnId = playerTwo, }; Assert.Throws(typeof(NotPlayersTurnException), () => TicTacToeLogic.CalculateNextState(currentState, playerOne, move)); }
public void IsBoardFull_IsFalse() { var state = new TicTacToeState { board = new List <PlayerMark> { PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, } }; var isFull = TicTacToeLogic.IsBoardFull(state); Assert.False(isFull); }
public void IsBoardFull_IsTrue() { var state = new TicTacToeState { board = new List <PlayerMark> { PlayerMark.X, PlayerMark.O, PlayerMark.X, PlayerMark.X, PlayerMark.O, PlayerMark.X, PlayerMark.O, PlayerMark.X, PlayerMark.O, } }; var isFull = TicTacToeLogic.IsBoardFull(state); Assert.True(isFull); }
public void IsLineEqual_IsFalse() { var board = new List <PlayerMark> { PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.X, PlayerMark.O, PlayerMark.X, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, }; var result = TicTacToeLogic.IsLineAllEqual(board, MovePosition.MiddleLeft, MovePosition.MiddleCenter, MovePosition.MiddleRight); Assert.False(result); }
public void AlternateTurn_PlayerTwo() { var one = Guid.NewGuid(); var two = Guid.NewGuid(); var match = new MatchState { playerTurnId = two, inGameState = new TicTacToeState { firstPlayer = one, secondPlayer = two, }, }; var result = TicTacToeLogic.AlternateTurn(match); Assert.Equal(one, result); }
public void DoesGameHaveWinner_IsFalse() { var state = new TicTacToeState { firstPlayer = Guid.Empty, secondPlayer = Guid.Empty, board = new List <PlayerMark> { PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.X, PlayerMark.O, PlayerMark.X, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, } }; var hasWinner = TicTacToeLogic.IsGameOver(state); Assert.False(hasWinner); }
public void TestVerticalWin() { var ticTacToeLogic = new TicTacToeLogic(); int[] spaces = { 0, -1, 0, -1, 0, -1, 0, -1, 0, -1, 0, 0, -1, -1, 0, -1 }; var isOneWin = ticTacToeLogic.IsWin(spaces, 1); var isZeroWin = ticTacToeLogic.IsWin(spaces, 0); Assert.IsFalse(isOneWin); Assert.IsTrue(isZeroWin); }
public void TestReverseDiagonalWin() { var ticTacToeLogic = new TicTacToeLogic(); int[] spaces = { 1, -1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 1, 0, -1, 1, 0 }; var isOneWin = ticTacToeLogic.IsWin(spaces, 1); var isZeroWin = ticTacToeLogic.IsWin(spaces, 0); Assert.IsFalse(isOneWin); Assert.IsTrue(isZeroWin); }
public void WhenThereAreNoFreePositionsAnNoOneWinsGameShouldBeDraw() { string board1 = "XXO" + "OXX" + "XOO"; string board2 = "XOX" + "XXO" + "OXO"; string board3 = "OXO" + "XXO" + "XOX"; ITicTacToeLogic logic = new TicTacToeLogic(); Assert.AreEqual(GameResult.Draw, logic.GetResult(board1)); Assert.AreEqual(GameResult.Draw, logic.GetResult(board2)); Assert.AreEqual(GameResult.Draw, logic.GetResult(board3)); }
public void CaptureMoveTest() { TicTacToeLogic ticTacToeLogic = new TicTacToeLogic(); Assert.True(ticTacToeLogic.CaptureMove(Guid.NewGuid(), 1, 0, 0).Message == "Invalid GameId"); var output1 = ticTacToeLogic.StartGame(1, 2, 3); Assert.True(output1.Message == "Game is started, GameId : " + output1.Guid); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 2, 0, 0).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 1, 0, 1).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 2, 0, 2).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 1, 1, 1).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 2, 1, 2).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 1, 2, 0).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 2, 2, 1).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 1, 2, 2).Message == "Recorded move succesfully"); Assert.True(ticTacToeLogic.CaptureMove(output1.Guid, 2, 1, 0).Message == "Match is drawed"); }
public void CalculateNextState_InvalidMovePositionIsNotEmpty_ThrowsException() { var playerOne = Guid.NewGuid(); var playerTwo = Guid.NewGuid(); var move = MovePosition.MiddleCenter; var currentState = new MatchState { operationState = GameOperationState.InProgress, playerTurnId = playerOne, inGameState = new TicTacToeState { firstPlayer = playerOne, board = new List <PlayerMark> { PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.X, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, PlayerMark.Empty, } }, }; Assert.Throws(typeof(InvalidPlayerMoveException), () => TicTacToeLogic.CalculateNextState(currentState, playerOne, move)); }
// Update is called once per frame void Update() { //Win condition checks if (TicTacToeLogic.win(logicScript.positions) == 1) { winText.text = "X Wins!"; logicScript.playerTurn = false; logicScript.gameStart = false; } else if (TicTacToeLogic.win(logicScript.positions) == -1) { winText.text = "O Wins!"; logicScript.playerTurn = false; logicScript.gameStart = false; } else if (TicTacToeLogic.isDraw(logicScript.positions)) { winText.text = "It's a Draw!"; logicScript.playerTurn = false; logicScript.gameStart = false; } }
protected override void SetUp() { mockEndGame = (result) => {endGameResult = result;}; mockPlaceO = (x, y) => {oPlacedAtX = x; oPlacedAtY = y;}; mockPlaceX = (x, y) => {xPlacedAtX = x; xPlacedAtY = y;}; underTest = new TicTacToeLogic(mockPlaceX, mockPlaceO, mockEndGame); }