mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-25 12:25:10 -08:00
91 lines
2.2 KiB
C#
91 lines
2.2 KiB
C#
using Poker.Cards;
|
|
using Poker.Strategies;
|
|
|
|
namespace Poker.Players;
|
|
|
|
internal class Human : Player
|
|
{
|
|
private readonly IReadWrite _io;
|
|
|
|
public Human(int bank, IReadWrite io)
|
|
: base(bank)
|
|
{
|
|
HasWatch = true;
|
|
_io = io;
|
|
}
|
|
|
|
public bool HasWatch { get; set; }
|
|
|
|
protected override void DrawCards(Deck deck)
|
|
{
|
|
var count = _io.ReadNumber("How many cards do you want", 3, "You can't draw more than three cards.");
|
|
if (count == 0) { return; }
|
|
|
|
_io.WriteLine("What are their numbers:");
|
|
for (var i = 1; i <= count; i++)
|
|
{
|
|
Hand = Hand.Replace((int)_io.ReadNumber(), deck.DealCard());
|
|
}
|
|
|
|
_io.WriteLine("Your new hand:");
|
|
_io.Write(Hand);
|
|
}
|
|
|
|
internal bool SetWager()
|
|
{
|
|
var strategy = _io.ReadHumanStrategy(Table.Computer.Bet == 0 && Bet == 0);
|
|
if (strategy is Strategies.Bet or Check)
|
|
{
|
|
if (Bet + strategy.Value < Table.Computer.Bet)
|
|
{
|
|
_io.WriteLine("If you can't see my bet, then fold.");
|
|
return false;
|
|
}
|
|
if (Balance - Bet - strategy.Value >= 0)
|
|
{
|
|
HasBet = true;
|
|
Bet += strategy.Value;
|
|
return true;
|
|
}
|
|
RaiseFunds();
|
|
}
|
|
else
|
|
{
|
|
Fold();
|
|
Table.CollectBets();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void RaiseFunds()
|
|
{
|
|
_io.WriteLine();
|
|
_io.WriteLine("You can't bet with what you haven't got.");
|
|
|
|
if (Table.Computer.TryBuyWatch()) { return; }
|
|
|
|
// The original program had some code about selling a tie tack, but due to a fault
|
|
// in the logic the code was unreachable. I've omitted it in this port.
|
|
|
|
IsBroke = true;
|
|
}
|
|
|
|
public void ReceiveWatch()
|
|
{
|
|
// In the original code the player does not pay any money to receive the watch back.
|
|
HasWatch = true;
|
|
}
|
|
|
|
public void SellWatch(int amount)
|
|
{
|
|
HasWatch = false;
|
|
Balance += amount;
|
|
}
|
|
|
|
public override void TakeWinnings()
|
|
{
|
|
_io.WriteLine("You win.");
|
|
base.TakeWinnings();
|
|
}
|
|
}
|