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); }
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()); }
private static int CheckScore(Piece[] board) { if (BoardAnalyzer.CheckGameWin(board, Computer)) { return(10); } if (BoardAnalyzer.CheckGameWin(board, Player)) { return(-10); } return(0); }
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()); }
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"); }