/// <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); }
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); }