示例#1
0
        /// <summary>
        /// Starts a game.
        /// </summary>
        public void Play()
        {
            TextReader currentInput  = crossInput;
            TextWriter currentOutput = crossOutput;
            Marker     currentMarker = Marker.Cross;

            while (game.State == GameState.InProgress)
            {
                currentOutput.WriteLine(StringRepresentations.Board(game.Board));
                string input = currentInput.ReadLine();
                (int row, int col) = GetInputPosition(input);
                game.PlaceMarker(currentMarker, row, col);

                if (currentMarker == Marker.Cross)
                {
                    currentInput  = circleInput;
                    currentOutput = circleOutput;
                    currentMarker = Marker.Circle;
                }
                else
                {
                    currentInput  = crossInput;
                    currentOutput = crossOutput;
                    currentMarker = Marker.Cross;
                }
            }

            string resultsString = GetResultsString(game.State);

            crossOutput.WriteLine("Game Over: " + resultsString);
            circleOutput.WriteLine("Game Over: " + resultsString);
        }
示例#2
0
        public static void Main(string[] args)
        {
            Dictionary <string, string> argsMap = ParseArguments(args);

            if (argsMap.ContainsKey("help"))
            {
                PrintHelp();
                return;
            }

            int boardSize = 3;

            if (argsMap.ContainsKey("size"))
            {
                boardSize = int.Parse(argsMap["size"]);
            }

            int goalLength = boardSize;

            if (argsMap.ContainsKey("goal-length"))
            {
                goalLength = int.Parse(argsMap["goal-length"]);
            }

            TextReader crossInput;
            TextWriter crossOutput;

            if (argsMap.ContainsKey("cross"))
            {
                ProcessStartInfo startInfo = new ProcessStartInfo(argsMap["cross"], String.Join(" ", boardSize, goalLength, "X"))
                {
                    RedirectStandardInput  = true,
                    RedirectStandardOutput = true,
                    CreateNoWindow         = true,
                    UseShellExecute        = false
                };
                Process process = Process.Start(startInfo);
                crossInput  = process.StandardOutput;
                crossOutput = process.StandardInput;
            }
            else
            {
                crossInput  = Console.In;
                crossOutput = Console.Out;
            }

            TextReader circleInput;
            TextWriter circleOutput;

            if (argsMap.ContainsKey("circle"))
            {
                ProcessStartInfo startInfo = new ProcessStartInfo(argsMap["circle"], String.Join(" ", boardSize, goalLength, "O"))
                {
                    RedirectStandardInput  = true,
                    RedirectStandardOutput = true,
                    CreateNoWindow         = true,
                    UseShellExecute        = false
                };
                Process process = Process.Start(startInfo);
                circleInput  = process.StandardOutput;
                circleOutput = process.StandardInput;
            }
            else
            {
                circleInput  = Console.In;
                circleOutput = Console.Out;
            }

            Player player = new Player(boardSize, goalLength, crossInput, crossOutput, circleInput, circleOutput);

            player.Play();

            Console.WriteLine(StringRepresentations.Board(player.Board));
            Console.WriteLine(player.GameState);
        }