mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 15:16:33 -08:00
65 lines
1.5 KiB
C#
65 lines
1.5 KiB
C#
namespace Chomp;
|
|
|
|
internal class Game
|
|
{
|
|
private readonly IReadWrite _io;
|
|
|
|
public Game(IReadWrite io)
|
|
{
|
|
_io = io;
|
|
}
|
|
|
|
internal void Play()
|
|
{
|
|
_io.Write(Resource.Streams.Introduction);
|
|
if (_io.ReadNumber("Do you want the rules (1=Yes, 0=No!)") != 0)
|
|
{
|
|
_io.Write(Resource.Streams.Rules);
|
|
}
|
|
|
|
while (true)
|
|
{
|
|
_io.Write(Resource.Streams.HereWeGo);
|
|
|
|
var (playerCount, rowCount, columnCount) = _io.ReadParameters();
|
|
|
|
var loser = Play(new Cookie(rowCount, columnCount), new PlayerNumber(playerCount));
|
|
|
|
_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);
|
|
}
|
|
}
|
|
}
|