wrote a test, fixed royalflush/streight closes #79
This commit is contained in:
		@@ -13,6 +13,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Modules", "disc
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord.Net.Commands", "discord.net\src\Discord.Net.Commands.Net45\Discord.Net.Commands.csproj", "{1B5603B4-6F8F-4289-B945-7BAAE523D740}"
 | 
			
		||||
EndProject
 | 
			
		||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests", "Tests\Tests.csproj", "{45B2545D-C612-4919-B34C-D65EA1371C51}"
 | 
			
		||||
EndProject
 | 
			
		||||
Global
 | 
			
		||||
	GlobalSection(SharedMSBuildProjectFiles) = preSolution
 | 
			
		||||
		discord.net\src\Discord.Net.Shared\Discord.Net.Shared.projitems*{7bfef748-b934-4621-9b11-6302e3a9f6b3}*SharedItemsImports = 4
 | 
			
		||||
@@ -67,6 +69,14 @@ Global
 | 
			
		||||
		{1B5603B4-6F8F-4289-B945-7BAAE523D740}.Release|Any CPU.Build.0 = Release|Any CPU
 | 
			
		||||
		{1B5603B4-6F8F-4289-B945-7BAAE523D740}.TestResponses|Any CPU.ActiveCfg = Release|Any CPU
 | 
			
		||||
		{1B5603B4-6F8F-4289-B945-7BAAE523D740}.TestResponses|Any CPU.Build.0 = Release|Any CPU
 | 
			
		||||
		{45B2545D-C612-4919-B34C-D65EA1371C51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 | 
			
		||||
		{45B2545D-C612-4919-B34C-D65EA1371C51}.Debug|Any CPU.Build.0 = Debug|Any CPU
 | 
			
		||||
		{45B2545D-C612-4919-B34C-D65EA1371C51}.FullDebug|Any CPU.ActiveCfg = Debug|Any CPU
 | 
			
		||||
		{45B2545D-C612-4919-B34C-D65EA1371C51}.FullDebug|Any CPU.Build.0 = Debug|Any CPU
 | 
			
		||||
		{45B2545D-C612-4919-B34C-D65EA1371C51}.Release|Any CPU.ActiveCfg = Release|Any CPU
 | 
			
		||||
		{45B2545D-C612-4919-B34C-D65EA1371C51}.Release|Any CPU.Build.0 = Release|Any CPU
 | 
			
		||||
		{45B2545D-C612-4919-B34C-D65EA1371C51}.TestResponses|Any CPU.ActiveCfg = Release|Any CPU
 | 
			
		||||
		{45B2545D-C612-4919-B34C-D65EA1371C51}.TestResponses|Any CPU.Build.0 = Release|Any CPU
 | 
			
		||||
	EndGlobalSection
 | 
			
		||||
	GlobalSection(SolutionProperties) = preSolution
 | 
			
		||||
		HideSolutionNode = FALSE
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,8 @@
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
public class Cards
 | 
			
		||||
{
 | 
			
		||||
namespace NadekoBot.Classes {
 | 
			
		||||
    public class Cards {
 | 
			
		||||
        private static readonly Dictionary<int, string> cardNames = new Dictionary<int, string>() {
 | 
			
		||||
        { 1, "Ace" },
 | 
			
		||||
        { 2, "Two" },
 | 
			
		||||
@@ -19,35 +19,27 @@ public class Cards
 | 
			
		||||
        { 12, "Queen" },
 | 
			
		||||
        { 13, "King" }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
        private static Dictionary<string, Func<List<Card>, bool>> handValues;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public enum CardSuit
 | 
			
		||||
    {
 | 
			
		||||
        public enum CardSuit {
 | 
			
		||||
            Spades = 1,
 | 
			
		||||
            Hearts = 2,
 | 
			
		||||
            Diamonds = 3,
 | 
			
		||||
            Clubs = 4
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    public class Card : IComparable
 | 
			
		||||
    {
 | 
			
		||||
        public class Card : IComparable {
 | 
			
		||||
            public CardSuit Suit { get; }
 | 
			
		||||
            public int Number { get; }
 | 
			
		||||
 | 
			
		||||
        public string Name
 | 
			
		||||
        {
 | 
			
		||||
            get
 | 
			
		||||
            {
 | 
			
		||||
            public string Name {
 | 
			
		||||
                get {
 | 
			
		||||
                    var str = "";
 | 
			
		||||
 | 
			
		||||
                if (Number <= 10 && Number > 1)
 | 
			
		||||
                {
 | 
			
		||||
                    if (Number <= 10 && Number > 1) {
 | 
			
		||||
                        str += "_" + Number;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    } else {
 | 
			
		||||
                        str += GetName().ToLower();
 | 
			
		||||
                    }
 | 
			
		||||
                    return str + "_of_" + Suit.ToString().ToLower();
 | 
			
		||||
@@ -63,8 +55,7 @@ public class Cards
 | 
			
		||||
 | 
			
		||||
            public override string ToString() => cardNames[Number] + " Of " + Suit;
 | 
			
		||||
 | 
			
		||||
        public int CompareTo(object obj)
 | 
			
		||||
        {
 | 
			
		||||
            public int CompareTo(object obj) {
 | 
			
		||||
                if (!(obj is Card)) return 0;
 | 
			
		||||
                var c = (Card)obj;
 | 
			
		||||
                return this.Number - c.Number;
 | 
			
		||||
@@ -72,8 +63,7 @@ public class Cards
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private List<Card> cardPool;
 | 
			
		||||
    public List<Card> CardPool
 | 
			
		||||
    {
 | 
			
		||||
        public List<Card> CardPool {
 | 
			
		||||
            get { return cardPool; }
 | 
			
		||||
            set { cardPool = value; }
 | 
			
		||||
        }
 | 
			
		||||
@@ -81,8 +71,7 @@ public class Cards
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates a new instance of the BlackJackGame, this allows you to create multiple games running at one time.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
    public Cards()
 | 
			
		||||
    {
 | 
			
		||||
        public Cards() {
 | 
			
		||||
            cardPool = new List<Card>(52);
 | 
			
		||||
            RefillPool();
 | 
			
		||||
            InitHandValues();
 | 
			
		||||
@@ -97,15 +86,12 @@ public class Cards
 | 
			
		||||
        /// Removes all cards from the pool and refills the pool with all of the possible cards. NOTE: I think this is too expensive.
 | 
			
		||||
        /// We should probably make it so it copies another premade list with all the cards, or something.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
    private void RefillPool()
 | 
			
		||||
    {
 | 
			
		||||
        private void RefillPool() {
 | 
			
		||||
            cardPool.Clear();
 | 
			
		||||
            //foreach suit
 | 
			
		||||
        for (var j = 1; j < 14; j++)
 | 
			
		||||
        {
 | 
			
		||||
            for (var j = 1; j < 14; j++) {
 | 
			
		||||
                // and number
 | 
			
		||||
            for (var i = 1; i < 5; i++)
 | 
			
		||||
            {
 | 
			
		||||
                for (var i = 1; i < 5; i++) {
 | 
			
		||||
                    //generate a card of that suit and number and add it to the pool
 | 
			
		||||
 | 
			
		||||
                    // the pool will go from ace of spades,hears,diamonds,clubs all the way to the king of spades. hearts, ...
 | 
			
		||||
@@ -118,8 +104,7 @@ public class Cards
 | 
			
		||||
        /// Take a card from the pool, you either take it from the top if the deck is shuffled, or from a random place if the deck is in the default order.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <returns>A card from the pool</returns>
 | 
			
		||||
    public Card DrawACard()
 | 
			
		||||
    {
 | 
			
		||||
        public Card DrawACard() {
 | 
			
		||||
            if (CardPool.Count == 0)
 | 
			
		||||
                Restart();
 | 
			
		||||
            //you can either do this if your deck is not shuffled
 | 
			
		||||
@@ -146,7 +131,7 @@ public class Cards
 | 
			
		||||
        }
 | 
			
		||||
        public override string ToString() => string.Join("", cardPool.Select(c => c.ToString())) + Environment.NewLine;
 | 
			
		||||
 | 
			
		||||
    private void InitHandValues() {
 | 
			
		||||
        private static void InitHandValues() {
 | 
			
		||||
            Func<List<Card>, bool> hasPair =
 | 
			
		||||
                                  cards => cards.GroupBy(card => card.Number)
 | 
			
		||||
                                                .Count(group => group.Count() == 2) == 1;
 | 
			
		||||
@@ -160,10 +145,17 @@ public class Cards
 | 
			
		||||
                                                .Count(group => group.Count() == 2) == 2;
 | 
			
		||||
 | 
			
		||||
            Func<List<Card>, bool> isStraight =
 | 
			
		||||
                              cards => cards.GroupBy(card => card.Number)
 | 
			
		||||
                                            .Count() == cards.Count()
 | 
			
		||||
                                       && cards.Max(card => (int)card.Number)
 | 
			
		||||
                                        - cards.Min(card => (int)card.Number) == 4;
 | 
			
		||||
                cards => {
 | 
			
		||||
                    if (cards.GroupBy(card => card.Number).Count() != cards.Count())
 | 
			
		||||
                        return false;
 | 
			
		||||
                    var toReturn = (cards.Max(card => (int)card.Number)
 | 
			
		||||
                                        - cards.Min(card => (int)card.Number) == 4);
 | 
			
		||||
                    if (toReturn || cards.All(c => c.Number != 1)) return toReturn;
 | 
			
		||||
 | 
			
		||||
                    var newCards = cards.Select(c => c.Number == 1 ? new Card(c.Suit, 14) : c);
 | 
			
		||||
                    return (newCards.Max(card => (int)card.Number)
 | 
			
		||||
                            - newCards.Min(card => (int)card.Number) == 4);
 | 
			
		||||
                };
 | 
			
		||||
 | 
			
		||||
            Func<List<Card>, bool> hasThreeOfKind =
 | 
			
		||||
                                  cards => cards.GroupBy(card => card.Number)
 | 
			
		||||
@@ -186,7 +178,8 @@ public class Cards
 | 
			
		||||
                                  cards => isFlush(cards) && isStraight(cards);
 | 
			
		||||
 | 
			
		||||
            Func<List<Card>, bool> isRoyalFlush =
 | 
			
		||||
                              cards => cards.Min(card => card.Number) == 10
 | 
			
		||||
                                  cards => cards.Min(card => card.Number) == 1 &&
 | 
			
		||||
                                           cards.Max(card => card.Number) == 13
 | 
			
		||||
                                           && hasStraightFlush(cards);
 | 
			
		||||
 | 
			
		||||
            Func<List<Card>, bool> isStraightFlush =
 | 
			
		||||
@@ -207,10 +200,12 @@ public class Cards
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public static string GetHandValue(List<Card> cards) {
 | 
			
		||||
            if (handValues == null)
 | 
			
		||||
                InitHandValues();
 | 
			
		||||
            foreach (var kvp in handValues.Where(x => x.Value(cards))) {
 | 
			
		||||
                return kvp.Key;
 | 
			
		||||
            }
 | 
			
		||||
            return "High card " + cards.Max().GetName();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
using System.IO;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Classes.JSONModels {
 | 
			
		||||
    internal class LocalizedStrings {
 | 
			
		||||
    public class LocalizedStrings {
 | 
			
		||||
        public string[] Insults { get; set; } = {
 | 
			
		||||
            " You are a poop.", " You're a jerk.",
 | 
			
		||||
            " I will eat you when I get my powers back."
 | 
			
		||||
 
 | 
			
		||||
@@ -4,6 +4,7 @@ using System.Collections.Generic;
 | 
			
		||||
using System.Drawing;
 | 
			
		||||
using System.Threading.Tasks;
 | 
			
		||||
using Discord.Commands;
 | 
			
		||||
using NadekoBot.Classes;
 | 
			
		||||
using NadekoBot.Extensions;
 | 
			
		||||
using NadekoBot.Modules;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -52,7 +52,7 @@ namespace NadekoBot.Commands {
 | 
			
		||||
        public static string HelpString => $"You can use `{NadekoBot.Config.CommandPrefixes.Help}modules` command to see a list of all modules.\n" +
 | 
			
		||||
                                           $"You can use `{NadekoBot.Config.CommandPrefixes.Help}commands ModuleName`" +
 | 
			
		||||
                                           $" (for example `{NadekoBot.Config.CommandPrefixes.Help}commands Administration`) to see a list of all of the commands in that module.\n" +
 | 
			
		||||
                                           $"For a specific command help, use `{NadekoBot.Config.CommandPrefixes.Help}h \"Command name\"` (for example `-h \"!m q\"`)" +
 | 
			
		||||
                                           $"For a specific command help, use `{NadekoBot.Config.CommandPrefixes.Help}h \"Command name\"` (for example `-h \"!m q\"`)\n" +
 | 
			
		||||
                                           "**LIST OF COMMANDS CAN BE FOUND ON THIS LINK**\n\n <https://github.com/Kwoth/NadekoBot/blob/master/commandlist.md>";
 | 
			
		||||
 | 
			
		||||
        public Action<CommandEventArgs> DoGitFunc() => e => {
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ using NadekoBot.Classes.JSONModels;
 | 
			
		||||
using NadekoBot.Commands;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot {
 | 
			
		||||
    internal class NadekoBot {
 | 
			
		||||
    public class NadekoBot {
 | 
			
		||||
        public static DiscordClient Client;
 | 
			
		||||
        public static Credentials Creds { get; set; }
 | 
			
		||||
        public static Configuration Config { get; set; }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user