mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2026-01-08 11:24:49 -08:00
Reorganise classes
This commit is contained in:
95
71_Poker/csharp/Players/Computer.cs
Normal file
95
71_Poker/csharp/Players/Computer.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
using Poker.Cards;
|
||||
using static System.StringComparison;
|
||||
|
||||
namespace Poker.Players;
|
||||
|
||||
internal class Computer : Player
|
||||
{
|
||||
private readonly IReadWrite _io;
|
||||
private readonly IRandom _random;
|
||||
private bool _isBluffing;
|
||||
|
||||
public Computer(int bank, IReadWrite io, IRandom random)
|
||||
: base(bank)
|
||||
{
|
||||
_io = io;
|
||||
_random = random;
|
||||
}
|
||||
|
||||
public bool IsBluffing => _isBluffing;
|
||||
|
||||
public override void NewHand(Hand hand)
|
||||
{
|
||||
base.NewHand(hand);
|
||||
_isBluffing = false;
|
||||
}
|
||||
|
||||
public int? BluffIf(bool shouldBluff, int? keepMask = null)
|
||||
{
|
||||
if (!shouldBluff) { return null; }
|
||||
|
||||
_isBluffing = true;
|
||||
Hand.KeepMask = keepMask ?? Hand.KeepMask;
|
||||
return 23;
|
||||
}
|
||||
|
||||
public void DrawCards(Deck deck)
|
||||
{
|
||||
var keepMask = Hand.KeepMask;
|
||||
var count = 0;
|
||||
for (var i = 1; i <= 5; i++)
|
||||
{
|
||||
if ((keepMask & (1 << (i - 1))) == 0)
|
||||
{
|
||||
Hand = Hand.Replace(i, deck.DealCard());
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
_io.WriteLine();
|
||||
_io.Write($"I am taking {count} card");
|
||||
if (count != 1)
|
||||
{
|
||||
_io.WriteLine("s");
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryBuyWatch(Human human)
|
||||
{
|
||||
if (!human.HasWatch) { return false; }
|
||||
|
||||
var response = _io.ReadString("Would you like to sell your watch");
|
||||
if (response.StartsWith("N", InvariantCultureIgnoreCase)) { return false; }
|
||||
|
||||
var (value, message) = (_random.Next(10) < 7) switch
|
||||
{
|
||||
true => (75, "I'll give you $75 for it."),
|
||||
false => (25, "That's a pretty crummy watch - I'll give you $25.")
|
||||
};
|
||||
|
||||
_io.WriteLine(message);
|
||||
human.SellWatch(value);
|
||||
// The original code does not have the computer part with any money
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool TrySellWatch(Human human)
|
||||
{
|
||||
if (human.HasWatch) { return false; }
|
||||
|
||||
var response = _io.ReadString("Would you like to buy back your watch for $50");
|
||||
if (response.StartsWith("N", InvariantCultureIgnoreCase)) { return false; }
|
||||
|
||||
// The original code does not deduct $50 from the player
|
||||
Balance += 50;
|
||||
human.ReceiveWatch();
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void TakeWinnings()
|
||||
{
|
||||
_io.WriteLine("I win.");
|
||||
base.TakeWinnings();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user