示例#1
0
        public void GetBlockingForkingMoveTestMethod()
        {
            var boards = new[] { new[] { 1, 0, 0, 0, -1, 0, 0, 0, 1 } };

            var positions = new[] { new[] { 1, 0 } };

            for (var i = 0; i < boards.Length; i++)
            {
                var board = boards[i];

                var brainResult = new BrainResult();
                var canMove = GameBrain.GetBlockForkingMove(false, brainResult, new Board(board));

                try
                {
                    Assert.AreEqual(true, canMove, "Can Move");
                    var x = brainResult.Moves[0].X;
                    Assert.AreEqual(positions[i][0], x, "X");
                    var y = brainResult.Moves[0].Y;
                    Assert.AreEqual(positions[i][1], y, "Y");
                    UnitTestHelpers.PrintBoard(board, x, y, canMove);
                }
                catch
                {
                    var x = canMove ? brainResult.Moves[0].X : -1;
                    var y = canMove ? brainResult.Moves[0].Y : -1;
                    UnitTestHelpers.PrintBoard(board, x, y, canMove);

                    throw;
                }
            }
        }
示例#2
0
        public void GetBlockingMoveTestMethod()
        {
            var boards = new[] { new[] { -1, -1, 0, 0, 1, 1, 0, 0, 0 }, //
                                 new[] { 0, 0, 1, -1, 1, 0, 0, 0, 0 } };

            var positions = new[]
                {
                    new[] { 2, 0 }, //
                    new[] { 0, 2 }, //
                };

            for (var i = 0; i < boards.Length; i++)
            {
                var board = boards[i];

                var g = new CurrentGame(new Board(board));

                var brainResult = new BrainResult();
                var canMove = g.GetNewMove(brainResult);

                try
                {
                    Assert.AreEqual(positions[i][0], brainResult.Moves[0].X);
                    Assert.AreEqual(positions[i][1], brainResult.Moves[0].Y);
                    Assert.AreEqual(true, canMove);
                }
                catch
                {
                    UnitTestHelpers.PrintBoard(board, brainResult.Moves[0].X, brainResult.Moves[0].Y, canMove);

                    throw;
                }
            }
        }
示例#3
0
        public void GetForkingMoveTestMethod()
        {
            var boards = new[] { new[] { 1, 1, 0, 0, -1, 0, 0, 0, -1 }, //
                                 new[] { 1, -1, 0, 0, 0, 1, 0, 0, -1 }, //
                                 //
                                 new[] { -1, -1, 0, 0, 1, 0, 0, 0, 1 }, //
                                 new[] { -1, 1, 0, 0, 0, -1, 0, 0, 1 }, //
                                 new[] { 1, 0, 0, 0, -1, 0, 0, 0, 1 } };

            var positions = new[] { new[] { 2, 0 }, //
                                    new[] { 1, 2 }, //
                                    //
                                    new[] { 0, 1 }, //
                                    new[] { 0, 1 }, //
                                    new[] { -1, -1 }, //
                                  };

            for (var i = 0; i < boards.Length; i++)
            {
                var board = boards[i];

                var brainResult = new BrainResult();
                var canMove = GameBrain.GetForkingMove(false, brainResult, new Board(board));

                try
                {
                    var x = canMove ? brainResult.Moves[0].X : -1;
                    var y = canMove ? brainResult.Moves[0].Y : -1;

                    var expected = positions[i][0] != -1 && positions[i][1] != -1;
                    Assert.AreEqual(expected, canMove, "Can Move");
                    Assert.AreEqual(positions[i][0], x, "X");
                    Assert.AreEqual(positions[i][1], y, "Y");

                    UnitTestHelpers.PrintBoard(board, x, y, canMove);
                }
                catch
                {
                    Console.WriteLine("Test: " + i);

                    var x = canMove ? brainResult.Moves[0].X : -1;
                    var y = canMove ? brainResult.Moves[0].Y : -1;
                    UnitTestHelpers.PrintBoard(board, x, y, canMove);

                    throw;
                }
            }
        }
示例#4
0
        public void GetHorizontalWinningMoveTestMethod()
        {
            var boards = new[] { new[] { -1, -1, 0, -1,  0, 0, 0, 0,  0, 0, 0, 0 }, // xxx_
                                 //
                                 new[] { -1, -1, 0, 0, 0, 0, 0, 0, 0 }, // xx_
                                 new[] { 0, 0, 0, -1, -1, 0, 0, 0, 0 }, // xx_
                                 new[] { 0, 0, 0, 0, 0, 0, -1, -1, 0 }, // xx_
                                 //
                                 new[] { 0, -1, -1, 0, 0, 0, 0, 0, 0 }, // _xx
                                 new[] { 0, 0, 0, 0, -1, -1, 0, 0, 0 }, // _xx
                                 new[] { 0, 0, 0, 0, 0, 0, 0, -1, -1 }, // _xx
                                 //
                                 new[] { -1, 0, -1, 0, 0, 0, 0, 0, 0 }, // x_x
                                 new[] { 0, 0, 0, -1, 0, -1, 0, 0, 0 }, // x_x
                                 new[] { 0, 0, 0, 0, 0, 0, -1, 0, -1 } // x_x
                               };

            var positions = new[]
                {
                    new[] { 2, 0 }, // xx_
                    //
                    new[] { 2, 0 }, // xx_
                    new[] { 2, 1 }, // xx_
                    new[] { 2, 2 }, // xx_
                    //
                    new[] { 0, 0 }, // _xx
                    new[] { 0, 1 }, // _xx
                    new[] { 0, 2 }, // _xx
                    //
                    new[] { 1, 0 }, // x_x
                    new[] { 1, 1 }, // x_x
                    new[] { 1, 2 }  // x_x
                };

            var sizes = new[]
                {
                    new[] { 4, 3 },
                    //
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    //
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    //
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    new[] { 3, 3 }
                };

            for (var i = 0; i < boards.Length; i++)
            {
                var board = boards[i];

                var g = new CurrentGame(new Board(board, sizes[i][0], sizes[i][1]));

                var brainResult = new BrainResult();
                var canMove = GameBrain.GetStraightWinningMove(false, false, 1, brainResult, g.Board);

                try
                {
                    Assert.AreEqual(positions[i][0], brainResult.Moves[0].X);
                    Assert.AreEqual(positions[i][1], brainResult.Moves[0].Y);
                    Assert.AreEqual(true, canMove);
                }
                catch
                {
                    UnitTestHelpers.PrintBoard(board, brainResult.Moves[0].X, brainResult.Moves[0].Y, canMove, sizes[i][0]);

                    throw;
                }
            }
        }
示例#5
0
        public void GetVerticalWinningMoveTestMethod()
        {
            var boards = new[]
                {
                    // 4x4
                    new[] { 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
                    new[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
                    new[] { 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0 },
                    //
                    // 3x3
                    new[] { 1, 0, 0, 1, 0, 0, 0, 0, 0 },
                    new[] { 0, 1, 0, 0, 1, 0, 0, 0, 0 },
                    new[] { 0, 0, 1, 0, 0, 1, 0, 0, 0 },
                    //
                    new[] { 1, 0, 0, 0, 0, 0, 1, 0, 0 },
                    new[] { 0, 1, 0, 0, 0, 0, 0, 1, 0 },
                    new[] { 0, 0, 1, 0, 0, 0, 0, 0, 1 },
                    //
                    new[] { 0, 0, 0, 1, 0, 0, 1, 0, 0 },
                    new[] { 0, 0, 0, 0, 1, 0, 0, 1, 0 },
                    new[] { 0, 0, 0, 0, 0, 1, 0, 0, 1 }
                };

            var positions = new[]
                {
                    new[] { 0, 3 },
                    new[] { 1, 2 },
                    new[] { 0, 2 },
                    //
                    new[] { 0, 2 },
                    new[] { 1, 2 },
                    new[] { 2, 2 },
                    //
                    new[] { 0, 1 },
                    new[] { 1, 1 },
                    new[] { 2, 1 },
                    //
                    new[] { 0, 0 },
                    new[] { 1, 0 },
                    new[] { 2, 0 }
                };

            var sizes = new[]
                {
                    new[] { 4, 4 },
                    new[] { 4, 3 },
                    new[] { 3, 4 },
                    //
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    //
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    //
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    new[] { 3, 3 }
                };

            for (var i = 0; i < boards.Length; i++)
            {
                var g = new CurrentGame(new Board(boards[i], sizes[i][0], sizes[i][1]));

                var brainResult = new BrainResult();
                var canMove = GameBrain.GetStraightWinningMove(true, true, 1, brainResult, g.Board);

                try
                {
                    Assert.AreEqual(true, canMove);
                    Assert.AreEqual(positions[i][0], brainResult.Moves[0].X);
                    Assert.AreEqual(positions[i][1], brainResult.Moves[0].Y);
                }
                catch
                {
                    Console.WriteLine("Test: " + i);
                    var x = canMove ? brainResult.Moves[0].X : -1;
                    var y = canMove ? brainResult.Moves[0].Y : -1;
                    UnitTestHelpers.PrintBoard(boards[i], x, y, canMove, sizes[i][0]);

                    throw;
                }
            }
        }
示例#6
0
        public void GetDiagonalWinningMoveTestMethod()
        {
            var boards = new[]
                {
                    new[] { 1, 0, 0, 0,  0, 1, 0, 0,  0, 0, 1, 0,  0, 0, 0, 0 },
                    //
                    new[] { 1, 0, 0, 0, 1, 0, 0, 0, 0 },
                    new[] { 1, 0, 0, 0, 0, 0, 0, 0, 1 },
                    new[] { 0, 0, 0, 0, 1, 0, 0, 0, 1 },
                    //
                    new[] { 0, 0, 1, 0, 1, 0, 0, 0, 0 },
                    new[] { 0, 0, 1, 0, 0, 0, 1, 0, 0 },
                    new[] { 0, 0, 0, 0, 1, 0, 1, 0, 0 }
                };

            var positions = new[]
                {
                    new[] { 3, 3 },
                    //
                    new[] { 2, 2 },
                    new[] { 1, 1 },
                    new[] { 0, 0 },
                    //
                    new[] { 0, 2 },
                    new[] { 1, 1 },
                    new[] { 2, 0 },
                };

            var sizes = new[]
                {
                    new[] { 4, 4 },
                    //
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    //
                    new[] { 3, 3 },
                    new[] { 3, 3 },
                    new[] { 3, 3 }
                };

            for (var i = 0; i < boards.Length; i++)
            {
                var g = new CurrentGame(new Board(boards[i], sizes[i][0], sizes[i][1]));
                var brainResult = new BrainResult();
                var canMove = GameBrain.GetDiagonalWinningMove(true, brainResult, g.Board);

                try
                {
                    Assert.AreEqual(positions[i][0], brainResult.Moves[0].X);
                    Assert.AreEqual(positions[i][1], brainResult.Moves[0].Y);
                    Assert.AreEqual(true, canMove);

                    UnitTestHelpers.PrintBoard(boards[i], brainResult.Moves[0].X, brainResult.Moves[0].Y, canMove, sizes[i][0]);
                }
                catch
                {
                    UnitTestHelpers.PrintBoard(boards[i], brainResult.Moves[0].X, brainResult.Moves[0].Y, canMove, sizes[i][0]);

                    throw;
                }
            }
        }
示例#7
0
        private static void Check(int[][] boards, int[][] sizes, Move[][] positions, bool vertical)
        {
            for (var i = 0; i < boards.Length; i++)
            {
                var board = boards[i];

                var g = new CurrentGame(new Board(board, sizes[i][0], sizes[i][1]));

                var brainResult = new BrainResult();
                var canMove = GameBrain.CheckForWin(vertical, false, brainResult, g.Board);

                try
                {
                    Assert.AreEqual(true, canMove);

                    for (int x = 0; x < positions[i].Length; x++)
                    {
                        Assert.AreEqual(positions[i][x].X, brainResult.Moves[x].X);
                        Assert.AreEqual(positions[i][x].Y, brainResult.Moves[x].Y);
                    }
                }
                catch
                {
                    UnitTestHelpers.PrintBoard(board, brainResult.Moves[0].X, brainResult.Moves[0].Y, canMove, sizes[i][0]);

                    throw;
                }
            }
        }