コード例 #1
0
ファイル: BoardTests.cs プロジェクト: vfridell/Gipf
        public void FindRunsVisitor()
        {
            Board board = Board.GetInitialBoard();
            Cell  cell  = board.Cells[NotationParser.GetHex("a1")];

            cell.Push(Position.topright, Pieces.White);
            cell.Push(Position.topright, Pieces.Black);
            cell.Push(Position.topright, Pieces.Black);
            cell.Push(Position.topright, Pieces.Black);
            cell.Push(Position.topright, Pieces.Black);

            cell = board.Cells[NotationParser.GetHex("i3")];
            cell.Push(Position.topleft, Pieces.BlackGipf);
            cell.Push(Position.topleft, Pieces.White);
            cell.Push(Position.topleft, Pieces.White);
            cell.Push(Position.topleft, Pieces.White);
            cell.Push(Position.topleft, Pieces.White);

            var analyzer = new BoardAnalyzer(board.GetLinesEnumerable());
            var visitor  = new FindRunsVisitor();

            analyzer.AddVisitor(visitor);
            analyzer.AnalyzeBoard();

            Assert.AreEqual(2, visitor.RunsOfFourOrMore.Count);
            Assert.AreEqual(PieceColor.Black, visitor.RunsOfFourOrMore[0].Color);
            Assert.AreEqual(PieceColor.White, visitor.RunsOfFourOrMore[1].Color);
            Assert.AreEqual(1, visitor.Intersections.Count);
            Assert.AreEqual(new Hex(2, -2), visitor.Intersections[0].hex);
        }
コード例 #2
0
        private static int Minimax(IReadOnlyList <Piece> inputBoard, Piece player)
        {
            var board = CloneBoard(inputBoard);

            if (CheckScore(board) != 0)
            {
                return(CheckScore(board));
            }
            if (BoardAnalyzer.CheckGameEnd(board))
            {
                return(0);
            }

            var scores = new List <int>();
            var moves  = new List <int>();

            for (var i = 0; i < 9; i++)
            {
                if (board[i] != Piece.Empty)
                {
                    continue;
                }
                scores.Add(Minimax(MakeBoardMove(board, player, i), SwitchPiece(player)));
                moves.Add(i);
            }
            if (player == Computer)
            {
                _choice = moves[scores.IndexOf(scores.Max())];
                return(scores.Max());
            }
            _choice = moves[scores.IndexOf(scores.Min())];
            return(scores.Min());
        }
コード例 #3
0
 private static int CheckScore(Piece[] board)
 {
     if (BoardAnalyzer.CheckGameWin(board, Computer))
     {
         return(10);
     }
     if (BoardAnalyzer.CheckGameWin(board, Player))
     {
         return(-10);
     }
     return(0);
 }
コード例 #4
0
ファイル: Program.cs プロジェクト: labattbatman/CamelUpData
        private static void TestBoardManager()
        {
            //string testBoard = ";y;g;r;W;o;;";
            //string testBoard = ";OBWYG;";
            string       testBoard = ";;O;B;WY;;;;G;";
            BoardManager bm        = new BoardManager(1);

            bm.CreateBoardDebug(testBoard);

            BoardAnalyzer ba = new BoardAnalyzer(testBoard, bm.GetAllBoards(), "B0O0W0Y0G0");

            GameRules.Log(ba.ToString());
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: labattbatman/CamelUpData
        static void Main(string[] args)
        {
            m_StartingTime = DateTime.Now;
            args           = GetBoardStatus();
            GameRules.Log(string.Format("Boards: {0} \nCards: {1} \n\n", args[0], args[1]));

            BoardManager bm = new BoardManager(5);

            bm.CreateBoard(args[0]);

            BoardAnalyzer ba = new BoardAnalyzer(args[0], bm.GetAllBoards(), args[1]);

            GameRules.Log(ba.ToString());

            ShowExecutionTimeLog();
            //TestLTGuesser();
            //TestLT();
            //TestBoardManager();
            //UNITY_CallCamelUpExe(";YGWBO;;","B0O0W0Y0G0");
        }