예제 #1
0
        public void KickerCheck()
        {
            var table = new List <Card>()
            {
                new Card(Rank.Four, Suit.Diamonds),
                new Card(Rank.Six, Suit.Hearts),
                new Card(Rank.Seven, Suit.Diamonds),
                new Card(Rank.Jack, Suit.Diamonds),
                new Card(Rank.Five, Suit.Diamonds),
            };

            var hand1 = new List <Card>()
            {
                new Card(Rank.Seven, Suit.Spades),
                new Card(Rank.Ace, Suit.Hearts),
            };

            var hands = new List <List <Card> >()
            {
                hand1,
                new List <Card>()
                {
                    new Card(Rank.Seven, Suit.Clubs),
                    new Card(Rank.King, Suit.Spades),
                }
            };

            var winner = WinChecker.WinCheck(table, hands);

            Assert.AreEqual(winner.Hands.Count, 1);
            Assert.AreEqual(winner.Hands.Single(), hand1);
        }
예제 #2
0
        public ActionResult Get(int id)
        {
            count++;
            int x      = id / 10 - 1;
            int y      = id % 10 - 1;
            int player = count % 2;

            if (Board.board[x, y] == -1)
            {
                Board.board[x, y] = player;
                WinChecker winChecker = new WinChecker();
                if (winChecker.Won(player, x, y))
                {
                    return(Ok("You win"));
                }
            }
            else if (count == Board.board.Length)
            {
                return(Ok("DRAW"));
            }
            else
            {
                return(BadRequest("Place already taken"));
            }

            return(Ok());
        }
예제 #3
0
        public void NotDetermineWinnerIfWinConditionsAreNotMet(List<string> board)
        {
            var checker = new WinChecker();
            var isWinner = checker.CheckWinCondition(board);

            Assert.False(isWinner);

        }
예제 #4
0
        public void DetermineWinnerIfWinConditionsAreMet(List<string> winningBoard)
        {
            var checker = new WinChecker();
            var isWinner = checker.CheckWinCondition(winningBoard);

            Assert.True(isWinner);

        }
예제 #5
0
        public void IncrementCountIfSameElseReset()
        {
            const int currentCount = 1;
            const int expected     = 2;
            var       winChecker   = new WinChecker();

            var newCount = winChecker.GetCount(currentCount, 1, 1);

            Assert.Equal(newCount, expected);
        }
예제 #6
0
        public void ReturnNaughtPlayerAsWinnerWithDiagonal()
        {
            var winChecker = new WinChecker();

            Assert.IsTrue(winChecker.HasPlayerWon(
                              new[]
            {
                _, _, O,
                _, O, _,
                O, _, _
            },
                              PlayerGlyph.Naught));
        }
예제 #7
0
        public void ReturnCrossPlayerAsWinnerWithDiagonal()
        {
            var winChecker = new WinChecker();

            Assert.IsTrue(winChecker.HasPlayerWon(
                              new[]
            {
                X, _, _,
                _, X, _,
                _, _, X
            },
                              PlayerGlyph.Cross));
        }
예제 #8
0
        public void IdentifyDiagonalStraightFromRightTop()
        {
            var moveList   = new MoveList();
            var winChecker = new WinChecker();

            moveList.AddMove(new Move(2, 2));
            moveList.AddMove(new Move(2, 3));
            moveList.AddMove(new Move(1, 3));
            moveList.AddMove(new Move(3, 1));

            bool diagonal3InARow = winChecker.CheckForDiagonalWin(moveList.Moves);

            Assert.True(diagonal3InARow);
        }
예제 #9
0
        public void IdentifyNotADiagonalWin()
        {
            var moveList   = new MoveList();
            var winChecker = new WinChecker();

            moveList.AddMove(new Move(2, 1));
            moveList.AddMove(new Move(2, 3));
            moveList.AddMove(new Move(1, 1));
            moveList.AddMove(new Move(3, 3));

            var diagonal3InARow = winChecker.CheckForDiagonalWin(moveList.Moves);

            Assert.False(diagonal3InARow);
        }
예제 #10
0
        public void IdentifyADiagonalWinFromLeftTop()
        {
            var moveList   = new MoveList();
            var winChecker = new WinChecker();

            moveList.AddMove(new Move(2, 2));
            moveList.AddMove(new Move(2, 3));
            moveList.AddMove(new Move(1, 1));
            moveList.AddMove(new Move(3, 3));

            var didUserWin = winChecker.CheckForWin(moveList);

            Assert.True(didUserWin);
        }
예제 #11
0
        public void Check_RightToLeftDiagonal()
        {
            var field = new char[][]
            {
                new char[] { ' ', ' ', 'X' },
                new char[] { ' ', 'X', ' ' },
                new char[] { 'X', ' ', ' ' },
            };

            var expectedWinner = 0;
            var actualWinner   = WinChecker.Check(field);

            Assert.AreEqual(expectedWinner, actualWinner);
        }
예제 #12
0
        public void Check_LeftToRightDiagonal_O()
        {
            var field = new char[][]
            {
                new char[] { 'O', ' ', ' ' },
                new char[] { ' ', 'O', ' ' },
                new char[] { ' ', ' ', 'O' },
            };

            var expectedWinner = 1;
            var actualWinner   = WinChecker.Check(field);

            Assert.AreEqual(expectedWinner, actualWinner);
        }
예제 #13
0
        public void Check_EmptyField_NobodyWins()
        {
            var field = new char[][]
            {
                new char[] { ' ', ' ', ' ' },
                new char[] { ' ', ' ', ' ' },
                new char[] { ' ', ' ', ' ' },
            };

            var expectedWinner = -1;
            var actualWinner   = WinChecker.Check(field);

            Assert.AreEqual(expectedWinner, actualWinner);
        }
예제 #14
0
        public void IndenifyThisRandomWin()
        {
            var moveList   = new MoveList();
            var winChecker = new WinChecker();

            moveList.AddMove(new Move(2, 4));
            moveList.AddMove(new Move(4, 2));
            moveList.AddMove(new Move(1, 3));
            moveList.AddMove(new Move(3, 3));

            bool diagonal3InARow = winChecker.CheckForDiagonalWin(moveList.Moves);

            Assert.True(diagonal3InARow);
        }
예제 #15
0
        public void IndentifyAUserDidntWin()
        {
            var moveList   = new MoveList();
            var winChecker = new WinChecker();

            moveList.AddMove(new Move(2, 2));
            moveList.AddMove(new Move(2, 3));
            moveList.AddMove(new Move(1, 3));
            moveList.AddMove(new Move(3, 2));

            var didUserWin = winChecker.CheckForWin(moveList);

            Assert.False(didUserWin);
        }
예제 #16
0
        public void Check_SecondRow()
        {
            var field = new char[][]
            {
                new char[] { ' ', ' ', ' ' },
                new char[] { 'X', 'X', 'X' },
                new char[] { ' ', ' ', ' ' },
            };

            var expectedWinner = 0;
            var actualWinner   = WinChecker.Check(field);

            Assert.AreEqual(expectedWinner, actualWinner);
        }
예제 #17
0
        public void IndentifyAHorizontalWin()
        {
            var moveList   = new MoveList();
            var winChecker = new WinChecker();

            moveList.AddMove(new Move(2, 2));
            moveList.AddMove(new Move(2, 3));
            moveList.AddMove(new Move(1, 3));
            moveList.AddMove(new Move(3, 3));

            var didUserWin = winChecker.CheckForWin(moveList);

            Assert.True(didUserWin);
        }
예제 #18
0
        public void CheckIfListContains3StraightInARow()
        {
            var moveList   = new MoveList();
            var winChecker = new WinChecker();

            moveList.AddMove(new Move(1, 2));
            moveList.AddMove(new Move(2, 2));
            moveList.AddMove(new Move(1, 1));
            moveList.AddMove(new Move(1, 3));

            var listOfX = winChecker.AddXCoordinatesIntoSortedList(moveList.Moves);
            var result  = winChecker.ContainsStraightLine(listOfX);

            Assert.True(result);
        }
예제 #19
0
        public void PutXCoordinatesIntoASortedIntegerList()
        {
            var moveList   = new MoveList();
            var winChecker = new WinChecker();

            moveList.AddMove(new Move(1, 2));
            moveList.AddMove(new Move(2, 2));
            moveList.AddMove(new Move(1, 1));
            moveList.AddMove(new Move(1, 3));

            var result       = winChecker.AddXCoordinatesIntoSortedList(moveList.Moves);
            var expectedList = new List <int> {
                1, 1, 1, 2
            };

            Assert.Equal(expectedList, result);
        }
예제 #20
0
            private int TestForBestPosition()
            {
                int[] posis = new int[Length];
                for (int x = 0; x < Width; x++)
                {
                    if (WinChecker.DoCheck(field, WinChecker.Directories.Down, ' ', new Vector2i(x, 0)) == Width)
                    {
                        posis[x]++;
                    }
                }
                for (int y = 0; y < Height; y++)
                {
                    if (WinChecker.DoCheck(field, WinChecker.Directories.Right, ' ', new Vector2i(0, y)) == Height)
                    {
                        posis[y]++;
                    }
                }
                for (int x = 0; x < Width; x++)
                {
                    for (int y = 0; y < Height; y++)
                    {
                        if (x + (Width - 1) < Width && y + (Width - 1) < Height)
                        {
                            if (WinChecker.DoCheck(field, WinChecker.Directories.RightDown, ' ', new Vector2i(x, y)) == Width)
                            {
                                posis[(x + 1) * (y + 1) - 1]++;
                            }
                        }
                    }
                }
                for (int x = 0; x < Width; x++)
                {
                    for (int y = 0; y < Height; y++)
                    {
                        if (WinChecker.DoCheck(field, WinChecker.Directories.LeftDown, ' ', new Vector2i(x, y)) == Width)
                        {
                            posis[(x + 1) * (y + 1) - 1]++;
                        }
                    }
                }
                int ret = -1;

                ret = posis.GetHighestIndex();
                return(ret);
            }
예제 #21
0
        public void CheckIfWon_AnyWinningCombination_ReturnsFalse()
        {
            // Arrange
            var fields = new List <FieldButton>
            {
                new FieldButton(new Coordinates(1, 1), null, 'X'),
                new FieldButton(new Coordinates(2, 1), null, 'Y'),
                new FieldButton(new Coordinates(3, 1), null, 'X')
            };

            var engine = new Mock <GameEngine>();

            engine.Setup(en => en.CurrentPlayer).Returns(new Player('X', 1));
            var winChecker = new WinChecker(fields, engine.Object);

            // Act
            var result = winChecker.CheckIfWon();

            // Assert
            Assert.IsFalse(result);
        }
예제 #22
0
    public void UpdateGameState()
    {
        GameTrace  gameTrace = GetCurrentStep();
        Vector2Int boardPos  = new Vector2Int(gameTrace.x, gameTrace.y);

        switch (GameState)
        {
        case GameState.BlackPlay:
            _turn++;
            if (WinChecker.CheckWin(_blackPlayTrace, boardPos))
            {
                _gameState = GameState.BlackWin;
            }
            else
            {
                _gameState = GameState.WhitePlay;
            }
            break;

        case GameState.WhitePlay:
            _turn++;
            if (WinChecker.CheckWin(_whitePlayTrace, boardPos))
            {
                _gameState = GameState.WhiteWin;
            }
            else
            {
                _gameState = GameState.BlackPlay;
            }
            break;

        case GameState.BlackWin:
            break;

        case GameState.WhiteWin:
            break;
        }
    }
        public void TestStraightCheck(int straightSize, bool assertTrue = true)
        {
            var lowestCards = new List <Card>()
            {
                new Card(Rank.Ace, Suit.Diamonds)
            };

            for (var r = Rank.Two; r < Rank.Two + straightSize - 1; r++)
            {
                lowestCards.Add(new Card(r, Suit.Diamonds));
            }
            Assert.IsTrue(WinChecker.StraightCheck(lowestCards).straight == assertTrue);

            for (var r = Rank.Two; r <= Rank.Ace - straightSize + 1; r++)
            {
                var cards = new List <Card>();
                for (var r2 = r; r2 < r + straightSize; r2++)
                {
                    cards.Add(new Card(r2, Suit.Diamonds));
                }
                Assert.IsTrue(WinChecker.StraightCheck(cards).straight == assertTrue);
            }
        }
예제 #24
0
        public void TestFourOfAKind1()
        {
            var table = new List <Card>()
            {
                new Card(Rank.Ace, Suit.Diamonds),
                new Card(Rank.Ace, Suit.Hearts),
                new Card(Rank.Queen, Suit.Diamonds),
                new Card(Rank.Jack, Suit.Diamonds),
                new Card(Rank.Five, Suit.Diamonds),
            };

            var hands = new List <List <Card> >()
            {
                new List <Card>()
                {
                    new Card(Rank.Ace, Suit.Clubs),
                    new Card(Rank.Ace, Suit.Spades),
                }
            };

            var winner = WinChecker.WinCheck(table, hands);

            Assert.AreEqual(WinType.FourOfAKind, winner.WinType);
        }
예제 #25
0
        public void TestRoyalFlush()
        {
            var table = new List <Card>()
            {
                new Card(Rank.Ace, Suit.Diamonds),
                new Card(Rank.King, Suit.Diamonds),
                new Card(Rank.Queen, Suit.Diamonds),
                new Card(Rank.Jack, Suit.Diamonds),
                new Card(Rank.Five, Suit.Diamonds),
            };

            var hands = new List <List <Card> >()
            {
                new List <Card>()
                {
                    new Card(Rank.Four, Suit.Diamonds),
                    new Card(Rank.Ten, Suit.Diamonds),
                }
            };

            var winner = WinChecker.WinCheck(table, hands);

            Assert.AreEqual(WinType.RoyalFlush, winner.WinType);
        }
예제 #26
0
        public void TestStraight1()
        {
            var table = new List <Card>()
            {
                new Card(Rank.Ace, Suit.Hearts),
                new Card(Rank.Two, Suit.Diamonds),
                new Card(Rank.Queen, Suit.Clubs),
                new Card(Rank.Three, Suit.Hearts),
                new Card(Rank.Five, Suit.Diamonds),
            };

            var hands = new List <List <Card> >()
            {
                new List <Card>()
                {
                    new Card(Rank.Four, Suit.Spades),
                    new Card(Rank.Ten, Suit.Diamonds),
                }
            };

            var winner = WinChecker.WinCheck(table, hands);

            Assert.AreEqual(WinType.Straight, winner.WinType);
        }
예제 #27
0
        public void TestHighCard1()
        {
            var table = new List <Card>()
            {
                new Card(Rank.Ace, Suit.Diamonds),
                new Card(Rank.Six, Suit.Hearts),
                new Card(Rank.Seven, Suit.Diamonds),
                new Card(Rank.Jack, Suit.Diamonds),
                new Card(Rank.Five, Suit.Diamonds),
            };

            var hands = new List <List <Card> >()
            {
                new List <Card>()
                {
                    new Card(Rank.Three, Suit.Clubs),
                    new Card(Rank.Two, Suit.Spades),
                }
            };

            var winner = WinChecker.WinCheck(table, hands);

            Assert.AreEqual(WinType.HighCard, winner.WinType);
        }
예제 #28
0
 private void Start()
 {
     ConvertBoardToMultiArray();
     DragAndDropController.PlayerMovesAllowed = true;
     winchecker = new WinChecker(this);
 }
예제 #29
0
 public WinCheckerShould()
 {
     _winChecker = new WinChecker();
     _board      = new Board();
 }
예제 #30
0
        static void Main()
        {
            var isNewGame = true;

            while (isNewGame)
            {
                var game           = new GameSetup();
                var checker        = new WinChecker();
                var computerPlayer = new ComputerPlayer("x");
                var humanPlayer    = new HumanPlayer("o");
                var moveValidator  = new PlayerMoveValidator();
                //var solver = new Solver();
                var renderer = new Renderer();


                var board = game.NewBoard();

                while (!game.IsFinished(board))
                {
                    if (checker.CheckWinCondition(board) || game.IsFinished(board))
                    {
                        Console.WriteLine(renderer.Render(board));
                        break;
                    }

                    //var solve = solver.Solve(board);
                    var computerMove = computerPlayer.Move(board);

                    Console.WriteLine("Computer (x) moves at " + computerMove);

                    if (checker.CheckWinCondition(board) || game.IsFinished(board))
                    {
                        Console.WriteLine(renderer.Render(board));
                        break;
                    }

                    Console.WriteLine(renderer.Render(board));

                    Console.WriteLine("To make a move, please enter a number from 0-8");

                    var userInput = Console.ReadLine();

                    var validInput = game.IsValidInput(userInput);

                    ValidInputPrompt(game, ref userInput, ref validInput, board, renderer);

                    var userMove = Convert.ToInt32(userInput);

                    while (!moveValidator.IsValidMove(board, userMove))
                    {
                        Console.WriteLine("Sorry invalid move, please choose an empty space");
                        Console.WriteLine(renderer.Render(board));

                        userInput  = Console.ReadLine();
                        validInput = game.IsValidInput(userInput);
                        ValidInputPrompt(game, ref userInput, ref validInput, board, renderer);

                        userMove = Convert.ToInt32(userInput);
                    }

                    userMove = Convert.ToInt32(userInput);

                    humanPlayer.Move(board);

                    Console.WriteLine("player (o) at " + userInput);
                }

                if (game.IsFinished(board))
                {
                    Console.WriteLine("Draw!");
                }

                if (checker.CheckWinCondition(board))
                {
                    Console.WriteLine("Winner!");
                }

                Console.WriteLine("Play again? y/n");
                var gamePlayIntent = Console.ReadLine();

                isNewGame = gamePlayIntent == "y";
            }
        }