示例#1
0
        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);
    }
示例#3
0
        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));
        }
示例#4
0
        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));
        }
示例#5
0
文件: LogicTests.cs 项目: Miraxek/X90
 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));
 }
示例#6
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);
        }
示例#7
0
        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);
        }
示例#8
0
 private void button_newGame_Click(object sender, RoutedEventArgs e)
 {
     canvas_play.Children.Clear();
     InitializeField();
     queueTeam           = 1;
     mainLogic           = new TicTacToeLogic();
     label_queue.Content = "Ходит: X";
 }
示例#9
0
文件: LogicTests.cs 项目: Miraxek/X90
 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));
 }
示例#10
0
文件: LogicTests.cs 项目: Miraxek/X90
 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));
        }
示例#12
0
文件: LogicTests.cs 项目: Miraxek/X90
 public void Test_IsFull_NotFull2_CurrectResult()
 {
     logic = new TicTacToeLogic();
     MakeFullOutsideCell(0, 0);
     MakeFullOutsideCell(1, 1);
     MakeFullOutsideCell(2, 2);
     Assert.IsFalse(logic.IsFull());
 }
示例#13
0
文件: LogicTests.cs 项目: Miraxek/X90
 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));
     }
 }
示例#14
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);
    }
示例#15
0
        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));
        }
示例#16
0
        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);
        }
示例#17
0
        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);
        }
示例#18
0
        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");
        }
示例#19
0
文件: LogicTests.cs 项目: Miraxek/X90
 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());
 }
示例#20
0
        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));
        }
示例#21
0
        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);
        }
示例#22
0
        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);
        }
示例#23
0
        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);
        }
示例#24
0
        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);
        }
示例#25
0
        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);
        }
示例#26
0
        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);
        }
示例#27
0
        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);
        }
示例#28
0
        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));
        }
示例#29
0
        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");
        }
示例#30
0
        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));
        }
示例#31
0
    // 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;
        }
    }
示例#32
0
    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);
    }