Add inner game loop

This commit is contained in:
Andrew Cooper
2022-07-17 18:46:46 +10:00
parent fae67d6a2a
commit 2122de9729
3 changed files with 38 additions and 8 deletions

View File

@@ -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++)

View File

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

View File

@@ -1 +1 @@
You lose, player{0}
You lose, player{0}