Files
basic-computer-games/71_Poker/csharp/Players/Human.cs
2022-07-01 17:20:13 +10:00

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