diff --git a/26_Chomp/csharp/Cookie.cs b/26_Chomp/csharp/Cookie.cs index 3a32c8c3..725eadfe 100644 --- a/26_Chomp/csharp/Cookie.cs +++ b/26_Chomp/csharp/Cookie.cs @@ -23,13 +23,16 @@ internal class Cookie _bits[0][0] = 'P'; } - public bool TryChomp(int row, int column) + public bool TryChomp(int row, int column, out char chomped) { if (row < 1 || row > _rowCount || column < 1 || column > _columnCount || _bits[row - 1][column - 1] == ' ') { + chomped = default; return false; } + chomped = _bits[row - 1][column - 1]; + for (int r = row; r <= _rowCount; r++) { for (int c = column; c <= _columnCount; c++) diff --git a/26_Chomp/csharp/Game.cs b/26_Chomp/csharp/Game.cs index a9219823..77a8ccd1 100644 --- a/26_Chomp/csharp/Game.cs +++ b/26_Chomp/csharp/Game.cs @@ -23,15 +23,42 @@ internal class Game var (playerCount, rowCount, columnCount) = _io.ReadParameters(); - var cookie = new Cookie(rowCount, columnCount); - var player = new PlayerNumber(playerCount); + var loser = Play(new Cookie(rowCount, columnCount), new PlayerNumber(playerCount)); - _io.WriteLine(cookie); - - _io.WriteLine(string.Format(Resource.Formats.Player, player)); - var (row, column) = _io.Read2Numbers(Resource.Prompts.Coordinates); + _io.WriteLine(string.Format(Resource.Formats.YouLose, loser)); if (_io.ReadNumber("Again (1=Yes, 0=No!)") != 1) { break; } } } + + private PlayerNumber Play(Cookie cookie, PlayerNumber player) + { + while (true) + { + _io.WriteLine(cookie); + + var poisoned = Chomp(cookie, player); + + if (poisoned) { return player; } + + player++; + } + } + + private bool Chomp(Cookie cookie, PlayerNumber player) + { + while (true) + { + _io.WriteLine(string.Format(Resource.Formats.Player, player)); + + var (row, column) = _io.Read2Numbers(Resource.Prompts.Coordinates); + + if (cookie.TryChomp((int)row, (int)column, out char chomped)) + { + return chomped == 'P'; + } + + _io.Write(Resource.Streams.NoFair); + } + } } diff --git a/26_Chomp/csharp/Resources/YouLose.txt b/26_Chomp/csharp/Resources/YouLose.txt index 126d8f1e..1015e271 100644 --- a/26_Chomp/csharp/Resources/YouLose.txt +++ b/26_Chomp/csharp/Resources/YouLose.txt @@ -1 +1 @@ -You lose, player{0} \ No newline at end of file +You lose, player{0}