コード例 #1
0
        /// <summary>
        /// Initialize a new game session with the given startup arguments.
        /// </summary>
        /// <param name="args">The startup arguments.</param>
        /// <returns>a new game session</returns>
        private static ChessGameSession initChessGame(StartupArgs args)
        {
            IChessPlayer whitePlayer;
            IChessPlayer blackPlayer;

            // init players
            if (args.GameMode == ChessGameMode.PvC)
            {
                var humanPlayerSide = new Random().Next(0, 2) == 0 ? ChessColor.White : ChessColor.Black;

                whitePlayer = humanPlayerSide == ChessColor.White
                    ? (IChessPlayer) new HumanChessPlayer(ChessColor.White)
                    : new ArtificialChessPlayer(ChessColor.White, (ChessDifficultyLevel)args.ComputerLevel);

                blackPlayer = humanPlayerSide != ChessColor.White
                    ? (IChessPlayer) new HumanChessPlayer(ChessColor.Black)
                    : new ArtificialChessPlayer(ChessColor.Black, (ChessDifficultyLevel)args.ComputerLevel);
            }
            else if (args.GameMode == ChessGameMode.CvC)
            {
                whitePlayer = new ArtificialChessPlayer(ChessColor.White, (ChessDifficultyLevel)args.ComputerLevel);
                blackPlayer = new ArtificialChessPlayer(ChessColor.Black, (ChessDifficultyLevel)args.ComputerLevel);
            }
            else
            {
                whitePlayer = new HumanChessPlayer(ChessColor.White);
                blackPlayer = new HumanChessPlayer(ChessColor.Black);
            }

            return(new ChessGameSession(whitePlayer, blackPlayer));
        }
コード例 #2
0
        /// <summary>
        /// Main routine that executes a chess game.
        /// </summary>
        /// <param name="args">The CLI arguments passed by the user.</param>
        public static void Main(string[] args)
        {
            // parse args
            var startupArgs = new StartupArgs().Init(args);

            // make sure the program is not running in help mode
            if (!startupArgs.IsHelp)
            {
                // init game session
                var session = initChessGame(startupArgs);

                // bind to BoardChanged event to print the draws that the players made
                var drawWatch = new Stopwatch();
                drawWatch.Start();
                session.BoardChanged += (IChessBoard newBoard) => {
                    // print new chess board
                    var timespan = new TimeSpan(drawWatch.ElapsedTicks);
                    Console.WriteLine($"{ session.Game.SideToDraw.Opponent() } player drew { session.Game.LastDraw }, took { timespan.Minutes }m { timespan.Seconds }s");
                    Console.WriteLine();
                    Console.WriteLine(session.Game.Board.ToString());
                    Console.WriteLine();
                    drawWatch.Restart();
                };

                // execute game
                var watch = new Stopwatch();
                watch.Start();
                var game = session.ExecuteGame();
                watch.Stop();
                var timespan = new TimeSpan(watch.ElapsedTicks);

                // write game result
                Console.WriteLine($"Game is over, took { timespan.Minutes }m { timespan.Seconds }s, { game.LastDraw.DrawingSide } player wins!");

                // write gamelog
                using (var logfile = new StreamWriter("gamelog.txt"))
                {
                    logfile.WriteLine("Chess Game Log");
                    logfile.WriteLine("=================");
                    game.AllDraws.ForEach(x => logfile.WriteLine(x.ToString()));
                    logfile.WriteLine($"final game status: { game.GameStatus.ToString() }!");
                }
            }
        }