コード例 #1
0
        public static Tuple <Color, int, long, long> Game(Board board, PlayerAbstract white, PlayerAbstract black,
                                                          ChessListener listener)
        {
            var i = 0;

            while (true)
            {
                board.Move(white.GetMove());
                listener.MoveEvent(board.Clone());
                if (board.AllPieces1.FindAll(p => p is King && p.InPlay).Count != 2)
                {
                    break;                                                                  //if checkmate
                }
                i++;

                //Check for draw
                if (Rules.CheckDraw(board))
                {
                    return(new Tuple <Color, int, long, long>(Color.NoColor, i, white.Stopwatch.ElapsedMilliseconds,
                                                              black.Stopwatch.ElapsedMilliseconds));
                }

                board.Move(black.GetMove());
                listener.MoveEvent(board.Clone());
                if (board.AllPieces1.FindAll(p => p is King && p.InPlay).Count != 2)
                {
                    break;                                                                  //if checkmate
                }
                if (Rules.CheckDraw(board))
                {
                    return(new Tuple <Color, int, long, long>(Color.NoColor, i, white.Stopwatch.ElapsedMilliseconds,
                                                              black.Stopwatch.ElapsedMilliseconds));
                }
                i++;
            }


            var winner = board.AllPieces1.Find(king => king is King && king.InPlay).Color;

            return(new Tuple <Color, int, long, long>(winner, i, white.Stopwatch.ElapsedMilliseconds,
                                                      black.Stopwatch.ElapsedMilliseconds));
        }
コード例 #2
0
        public static Tuple <Color, int, long, long> Game(Board board, PlayerAbstract white, PlayerAbstract black,
                                                          bool printBoard = false, bool printDebug = false, bool printGameBNumber = false, int gameNumber = 0)
        {
            var i = 0;

            while (true)
            {
                if (printDebug)
                {
                    Console.WriteLine("Making move " + i);
                }
                board.Move(white.GetMove());
                i++;
                if (printBoard)
                {
                    board.PrintBoardToPrinter();
                }
                if (printGameBNumber)
                {
                    Printer.AddToPrinter(gameNumber + "");
                }
                if (board.AllPieces1.FindAll(p => p is King && p.InPlay).Count != 2)
                {
                    break;                                                                  //if checkmate
                }
                if (printDebug)
                {
                    Console.WriteLine("Making move " + i);
                }
                //Check for draw
                if (Rules.CheckDraw(board))
                {
                    if (printDebug)
                    {
                        Console.WriteLine("White has taken {0} ms and black has taken {1} ms",
                                          white.Stopwatch.ElapsedMilliseconds,
                                          black.Stopwatch.ElapsedMilliseconds);
                    }
                    return(new Tuple <Color, int, long, long>(Color.NoColor, i, white.Stopwatch.ElapsedMilliseconds,
                                                              black.Stopwatch.ElapsedMilliseconds));
                }

                board.Move(black.GetMove());
                if (printBoard)
                {
                    board.PrintBoardToPrinter();
                }
                if (printGameBNumber)
                {
                    Printer.AddToPrinter(gameNumber + "");
                }
                if (board.AllPieces1.FindAll(p => p is King && p.InPlay).Count != 2)
                {
                    break;                                                                  //if checkmate
                }
                i++;
                if (Rules.CheckDraw(board))
                {
                    if (printDebug)
                    {
                        Console.WriteLine("White has taken {0} ms and black has taken {1} ms",
                                          white.Stopwatch.ElapsedMilliseconds,
                                          black.Stopwatch.ElapsedMilliseconds);
                    }
                    return(new Tuple <Color, int, long, long>(Color.NoColor, i, white.Stopwatch.ElapsedMilliseconds,
                                                              black.Stopwatch.ElapsedMilliseconds));
                }
            }

            if (printDebug)
            {
                Console.WriteLine("White has taken {0} ms and black has taken {1} ms",
                                  white.Stopwatch.ElapsedMilliseconds,
                                  black.Stopwatch.ElapsedMilliseconds);
            }
            var winner = board.AllPieces1.Find(king => king is King && king.InPlay).Color;

            return(new Tuple <Color, int, long, long>(winner, i, white.Stopwatch.ElapsedMilliseconds,
                                                      black.Stopwatch.ElapsedMilliseconds));
        }