From ccf92ca7028dc3af057b4c54366074fb6512a5e8 Mon Sep 17 00:00:00 2001 From: Kwoth Date: Sat, 23 Jul 2022 04:52:40 +0200 Subject: [PATCH] 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 --- src/Nadeko.Econ/Deck/NewDeck.cs | 12 ++++++++-- src/Nadeko.Econ/Deck/Regular/RegularCard.cs | 3 +++ .../RegularDeckExtensions.cs} | 13 +++++++++-- src/Nadeko.Econ/Deck/Regular/RegularValue.cs | 2 +- .../Gambling/Betdraw/BetdrawGame.cs | 3 +-- src/NadekoBot.Tests/NewDeckTests.cs | 22 ++++++++++++++++++- .../Modules/Gambling/Draw/DrawCommands.cs | 18 +++------------ 7 files changed, 50 insertions(+), 23 deletions(-) rename src/Nadeko.Econ/Deck/{DeckExtensions.cs => Regular/RegularDeckExtensions.cs} (73%) diff --git a/src/Nadeko.Econ/Deck/NewDeck.cs b/src/Nadeko.Econ/Deck/NewDeck.cs index c62e6137c..b22debfa8 100644 --- a/src/Nadeko.Econ/Deck/NewDeck.cs +++ b/src/Nadeko.Econ/Deck/NewDeck.cs @@ -39,8 +39,16 @@ public abstract class NewDeck return null; } - public virtual TCard? Peek() - => _cards.First?.Value; + public virtual TCard? Peek(int x = 0) + { + var card = _cards.First; + for (var i = 0; i < x; i++) + { + card = card?.Next; + } + + return card?.Value; + } public virtual void Shuffle() { diff --git a/src/Nadeko.Econ/Deck/Regular/RegularCard.cs b/src/Nadeko.Econ/Deck/Regular/RegularCard.cs index 467cc4e66..80c242c29 100644 --- a/src/Nadeko.Econ/Deck/Regular/RegularCard.cs +++ b/src/Nadeko.Econ/Deck/Regular/RegularCard.cs @@ -14,4 +14,7 @@ public sealed class RegularCard : NewCard public override int GetHashCode() => Suit.GetHashCode() * 17 + Value.GetHashCode(); + + public override string ToString() + => $"{Value.ToString()}-{Suit.ToString()}"; } \ No newline at end of file diff --git a/src/Nadeko.Econ/Deck/DeckExtensions.cs b/src/Nadeko.Econ/Deck/Regular/RegularDeckExtensions.cs similarity index 73% rename from src/Nadeko.Econ/Deck/DeckExtensions.cs rename to src/Nadeko.Econ/Deck/Regular/RegularDeckExtensions.cs index 99d9ce160..cf1302bf1 100644 --- a/src/Nadeko.Econ/Deck/DeckExtensions.cs +++ b/src/Nadeko.Econ/Deck/Regular/RegularDeckExtensions.cs @@ -1,6 +1,6 @@ namespace Nadeko.Econ; -public static class DeckExtensions +public static class RegularDeckExtensions { public static string GetEmoji(this RegularSuit suit) => suit switch @@ -14,7 +14,7 @@ public static class DeckExtensions public static string GetEmoji(this RegularValue value) => value switch { - RegularValue.A => "🇦", + RegularValue.Ace => "🇦", RegularValue.Two => "2️⃣", RegularValue.Three => "3️⃣", RegularValue.Four => "4️⃣", @@ -31,6 +31,15 @@ public static class DeckExtensions public static string GetEmoji(this RegularCard card) => $"{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()}"; } diff --git a/src/Nadeko.Econ/Deck/Regular/RegularValue.cs b/src/Nadeko.Econ/Deck/Regular/RegularValue.cs index 12c766890..35b4942ff 100644 --- a/src/Nadeko.Econ/Deck/Regular/RegularValue.cs +++ b/src/Nadeko.Econ/Deck/Regular/RegularValue.cs @@ -2,7 +2,7 @@ public enum RegularValue { - A = 1, + Ace = 1, Two = 2, Three = 3, Four = 4, diff --git a/src/Nadeko.Econ/Gambling/Betdraw/BetdrawGame.cs b/src/Nadeko.Econ/Gambling/Betdraw/BetdrawGame.cs index 57c90f9aa..e0716a575 100644 --- a/src/Nadeko.Econ/Gambling/Betdraw/BetdrawGame.cs +++ b/src/Nadeko.Econ/Gambling/Betdraw/BetdrawGame.cs @@ -20,8 +20,7 @@ public sealed class BetdrawGame if (val is null && col is null) throw new ArgumentNullException(nameof(val)); - _deck.Shuffle(); - var card = _deck.Peek()!; + var card = _deck.Peek(_rng.Next(0, 52))!; var realVal = (int)card.Value < 7 ? BetdrawValueGuess.Low diff --git a/src/NadekoBot.Tests/NewDeckTests.cs b/src/NadekoBot.Tests/NewDeckTests.cs index a6b927f0d..31e8d869b 100644 --- a/src/NadekoBot.Tests/NewDeckTests.cs +++ b/src/NadekoBot.Tests/NewDeckTests.cs @@ -27,7 +27,7 @@ public class NewDeckTests Assert.IsNotNull(card); 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); } @@ -48,4 +48,24 @@ public class NewDeckTests 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)); + } } \ No newline at end of file diff --git a/src/NadekoBot/Modules/Gambling/Draw/DrawCommands.cs b/src/NadekoBot/Modules/Gambling/Draw/DrawCommands.cs index e813a5a25..23f6576ec 100644 --- a/src/NadekoBot/Modules/Gambling/Draw/DrawCommands.cs +++ b/src/NadekoBot/Modules/Gambling/Draw/DrawCommands.cs @@ -79,21 +79,9 @@ public partial class Gambling private async Task> GetCardImageAsync(RegularCard currentCard) { - var oldCard = new Deck.Card((currentCard.Suit switch - { - RegularSuit.Clubs => Deck.CardSuit.Clubs, - 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(cardBytes); + var cardName = currentCard.GetName().ToLowerInvariant().Replace(' ', '_'); + var cardBytes = await File.ReadAllBytesAsync($"data/images/cards/{cardName}.jpg"); + return Image.Load(cardBytes); } private async Task> GetCardImageAsync(Deck.Card currentCard)