public Task RunAsync(out FakeInputOutput inputOutput) { var localInputOutput = new FakeInputOutput(_token); var testGrid = new TestGrid(_gridWidth, _gridHeight, _gridInput, localInputOutput); foreach (var pac in _pacs) { testGrid.AddPac(pac); } localInputOutput.AddInput($"{_gridWidth} {_gridHeight}"); testGrid.WriteGrid(); testGrid.WriteScores(); testGrid.WritePacs(); testGrid.WritePellets(); var game = new Player(localInputOutput, _actionStrategy); var task = Task.Run(() => { game.Run(_token); localInputOutput.CompleteOutput(); }, _token); inputOutput = localInputOutput; return(task); }
public TestGrid(int width, int height, string mapString, FakeInputOutput inputOutput) { _inputOutput = inputOutput; _lines = new string[height]; var lines = mapString.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries).Select(l => l.ToCharArray()).ToArray(); for (short line = 0; line < height; line++) { char[] finalLine = new char[width]; for (short c = 0; c < width; c++) { Location location = new Location(c, line); switch (lines[line][c]) { case '.': Pellets.Add(new Pellet(location, 1)); finalLine[c] = ' '; break; case 'X': Pellets.Add(new Pellet(location, 10)); finalLine[c] = ' '; break; case '#': finalLine[c] = '#'; break; default: finalLine[c] = ' '; break; } } _lines[line] = new string(finalLine); } }