Added .GetName extension method which will show human readable hand values in text. Also completely moved .betdraw the the new deck implementation. A renamed to Ace

This commit is contained in:
Kwoth
2022-07-23 04:52:40 +02:00
parent c20b851dc7
commit ccf92ca702
7 changed files with 50 additions and 23 deletions

View File

@@ -39,8 +39,16 @@ public abstract class NewDeck<TCard, TSuit, TValue>
return null; return null;
} }
public virtual TCard? Peek() public virtual TCard? Peek(int x = 0)
=> _cards.First?.Value; {
var card = _cards.First;
for (var i = 0; i < x; i++)
{
card = card?.Next;
}
return card?.Value;
}
public virtual void Shuffle() public virtual void Shuffle()
{ {

View File

@@ -14,4 +14,7 @@ public sealed class RegularCard : NewCard<RegularSuit, RegularValue>
public override int GetHashCode() public override int GetHashCode()
=> Suit.GetHashCode() * 17 + Value.GetHashCode(); => Suit.GetHashCode() * 17 + Value.GetHashCode();
public override string ToString()
=> $"{Value.ToString()}-{Suit.ToString()}";
} }

View File

@@ -1,6 +1,6 @@
namespace Nadeko.Econ; namespace Nadeko.Econ;
public static class DeckExtensions public static class RegularDeckExtensions
{ {
public static string GetEmoji(this RegularSuit suit) public static string GetEmoji(this RegularSuit suit)
=> suit switch => suit switch
@@ -14,7 +14,7 @@ public static class DeckExtensions
public static string GetEmoji(this RegularValue value) public static string GetEmoji(this RegularValue value)
=> value switch => value switch
{ {
RegularValue.A => "🇦", RegularValue.Ace => "🇦",
RegularValue.Two => "2⃣", RegularValue.Two => "2⃣",
RegularValue.Three => "3⃣", RegularValue.Three => "3⃣",
RegularValue.Four => "4⃣", RegularValue.Four => "4⃣",
@@ -31,6 +31,15 @@ public static class DeckExtensions
public static string GetEmoji(this RegularCard card) public static string GetEmoji(this RegularCard card)
=> $"{card.Value.GetEmoji()} {card.Suit.GetEmoji()}"; => $"{card.Value.GetEmoji()} {card.Suit.GetEmoji()}";
public static string GetName(this RegularValue value)
=> value.ToString();
public static string GetName(this RegularSuit suit)
=> suit.ToString();
public static string GetName(this RegularCard card)
=> $"{card.Value.ToString()} of {card.Suit.GetName()}";
} }

View File

@@ -2,7 +2,7 @@
public enum RegularValue public enum RegularValue
{ {
A = 1, Ace = 1,
Two = 2, Two = 2,
Three = 3, Three = 3,
Four = 4, Four = 4,

View File

@@ -20,8 +20,7 @@ public sealed class BetdrawGame
if (val is null && col is null) if (val is null && col is null)
throw new ArgumentNullException(nameof(val)); throw new ArgumentNullException(nameof(val));
_deck.Shuffle(); var card = _deck.Peek(_rng.Next(0, 52))!;
var card = _deck.Peek()!;
var realVal = (int)card.Value < 7 var realVal = (int)card.Value < 7
? BetdrawValueGuess.Low ? BetdrawValueGuess.Low

View File

@@ -27,7 +27,7 @@ public class NewDeckTests
Assert.IsNotNull(card); Assert.IsNotNull(card);
Assert.AreEqual(card.Suit, RegularSuit.Hearts); Assert.AreEqual(card.Suit, RegularSuit.Hearts);
Assert.AreEqual(card.Value, RegularValue.A); Assert.AreEqual(card.Value, RegularValue.Ace);
Assert.AreEqual(_deck.CurrentCount, _deck.TotalCount - 1); Assert.AreEqual(_deck.CurrentCount, _deck.TotalCount - 1);
} }
@@ -48,4 +48,24 @@ public class NewDeckTests
Assert.IsNull(noCard); Assert.IsNull(noCard);
} }
[Test]
public void TestCardGetName()
{
var ace = _deck.Draw()!;
var two = _deck.Draw()!;
Assert.AreEqual("Ace of Hearts", ace.GetName());
Assert.AreEqual("Two of Hearts", two.GetName());
}
[Test]
public void TestPeek()
{
var ace = _deck.Peek()!;
var tenOfSpades = _deck.Peek(48);
Assert.AreEqual(ace, new RegularCard(RegularSuit.Hearts, RegularValue.Ace));
Assert.AreEqual(tenOfSpades, new RegularCard(RegularSuit.Spades, RegularValue.Ten));
}
} }

View File

@@ -79,21 +79,9 @@ public partial class Gambling
private async Task<Image<Rgba32>> GetCardImageAsync(RegularCard currentCard) private async Task<Image<Rgba32>> GetCardImageAsync(RegularCard currentCard)
{ {
var oldCard = new Deck.Card((currentCard.Suit switch var cardName = currentCard.GetName().ToLowerInvariant().Replace(' ', '_');
{ var cardBytes = await File.ReadAllBytesAsync($"data/images/cards/{cardName}.jpg");
RegularSuit.Clubs => Deck.CardSuit.Clubs, return Image.Load<Rgba32>(cardBytes);
RegularSuit.Diamonds => Deck.CardSuit.Diamonds,
RegularSuit.Hearts => Deck.CardSuit.Hearts,
_ => Deck.CardSuit.Spades
}),
(int)currentCard.Value >= 11
? (int)currentCard.Value - 1
: (int)currentCard.Value);
return await GetCardImageAsync(oldCard);
// var cardName = currentCard.ToString().ToLowerInvariant().Replace(' ', '_');
// var cardBytes = await File.ReadAllBytesAsync($"data/images/cards/{cardName}.jpg");
// return Image.Load<Rgba32>(cardBytes);
} }
private async Task<Image<Rgba32>> GetCardImageAsync(Deck.Card currentCard) private async Task<Image<Rgba32>> GetCardImageAsync(Deck.Card currentCard)