Using the newest discord.net , fixes, improvements
If you draw 5 cards now, you get a hand value.
This commit is contained in:
		| @@ -20,6 +20,9 @@ public class Cards | ||||
|         { 13, "King" }, | ||||
|     }; | ||||
|  | ||||
|     private static Dictionary<string, Func<List<Card>, bool>> handValues; | ||||
|  | ||||
|  | ||||
|     public enum CARD_SUIT | ||||
|     { | ||||
|         Spades = 1, | ||||
| @@ -28,7 +31,7 @@ public class Cards | ||||
|         Clubs = 4 | ||||
|     } | ||||
|  | ||||
|     public class Card | ||||
|     public class Card : IComparable | ||||
|     { | ||||
|         public CARD_SUIT suit; | ||||
| 		public int number; | ||||
| @@ -63,6 +66,13 @@ public class Cards | ||||
|         { | ||||
|             return cardNames[number] + " Of " + suit; | ||||
|         } | ||||
|  | ||||
|         public int CompareTo(object obj) | ||||
|         { | ||||
|             if (!(obj is Card)) return 0; | ||||
|             var c = (Card)obj; | ||||
|             return this.number - c.number; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private List<Card> cardPool; | ||||
| @@ -79,6 +89,7 @@ public class Cards | ||||
|     { | ||||
|         cardPool = new List<Card>(52); | ||||
|         RefillPool(); | ||||
|         InitHandValues(); | ||||
|     } | ||||
|     /// <summary> | ||||
|     /// Restart the game of blackjack. It will only refill the pool for now. Probably wont be used, unless you want to have only 1 bjg running at one time, | ||||
| @@ -116,28 +127,21 @@ public class Cards | ||||
|     /// <returns>A card from the pool</returns> | ||||
|     public Card DrawACard() | ||||
|     { | ||||
|         if (CardPool.Count > 0) | ||||
|         { | ||||
|             //you can either do this if your deck is not shuffled | ||||
|             Random r = new Random((int)DateTime.Now.Ticks); | ||||
|             int num = r.Next(0, cardPool.Count); | ||||
|             Card c = cardPool[num]; | ||||
|             cardPool.RemoveAt(num); | ||||
|             return c; | ||||
|  | ||||
|             // if you want to shuffle when you fill, then take the first one | ||||
|             /* | ||||
|             Card c = cardPool[0]; | ||||
|             cardPool.RemoveAt(0); | ||||
|             return c; | ||||
|             */ | ||||
|         } | ||||
|         else { | ||||
|  | ||||
|             //for now return null | ||||
|         if (CardPool.Count == 0) | ||||
|             Restart(); | ||||
|             return null; | ||||
|         } | ||||
|         //you can either do this if your deck is not shuffled | ||||
|         Random r = new Random((int)DateTime.Now.Ticks); | ||||
|         int num = r.Next(0, cardPool.Count); | ||||
|         Card c = cardPool[num]; | ||||
|         cardPool.RemoveAt(num); | ||||
|         return c; | ||||
|  | ||||
|         // if you want to shuffle when you fill, then take the first one | ||||
|         /* | ||||
|         Card c = cardPool[0]; | ||||
|         cardPool.RemoveAt(0); | ||||
|         return c; | ||||
|         */ | ||||
|     } | ||||
|     /// <summary> | ||||
|     /// Shuffles the deck. Use this if you want to take cards from the top of the deck, instead of randomly. See DrawACard method. | ||||
| @@ -149,7 +153,77 @@ public class Cards | ||||
|             cardPool.OrderBy(x => r.Next()); | ||||
|         } | ||||
|     } | ||||
|     //public override string ToString() => string.Join("", cardPool.Select(c => c.ToString())) + Environment.NewLine; | ||||
|     public override string ToString() => string.Join("", cardPool.Select(c => c.ToString())) + Environment.NewLine; | ||||
|  | ||||
|     public void InitHandValues() { | ||||
|         Func<List<Card>, bool> hasPair = | ||||
|                               cards => cards.GroupBy(card => card.number) | ||||
|                                             .Count(group => group.Count() == 2) == 1; | ||||
|         Func<List<Card>, bool> isPair = | ||||
|                               cards => cards.GroupBy(card => card.number) | ||||
|                                             .Count(group => group.Count() == 3) == 0 | ||||
|                                        && hasPair(cards); | ||||
|  | ||||
|         Func<List<Card>, bool> isTwoPair = | ||||
|                               cards => cards.GroupBy(card => card.number) | ||||
|                                             .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; | ||||
|  | ||||
|         Func<List<Card>, bool> hasThreeOfKind = | ||||
|                               cards => cards.GroupBy(card => card.number) | ||||
|                                             .Any(group => group.Count() == 3); | ||||
|  | ||||
|         Func<List<Card>, bool> isThreeOfKind = | ||||
|                               cards => hasThreeOfKind(cards) && !hasPair(cards); | ||||
|  | ||||
|         Func<List<Card>, bool> isFlush = | ||||
|                               cards => cards.GroupBy(card => card.suit).Count() == 1; | ||||
|  | ||||
|         Func<List<Card>, bool> isFourOfKind = | ||||
|                               cards => cards.GroupBy(card => card.number) | ||||
|                                             .Any(group => group.Count() == 4); | ||||
|  | ||||
|         Func<List<Card>, bool> isFullHouse = | ||||
|                               cards => hasPair(cards) && hasThreeOfKind(cards); | ||||
|  | ||||
|         Func<List<Card>, bool> hasStraightFlush = | ||||
|                               cards => isFlush(cards) && isStraight(cards); | ||||
|  | ||||
|         Func<List<Card>, bool> isRoyalFlush = | ||||
|                               cards => cards.Min(card => (int)card.number) == 10 | ||||
|                                        && hasStraightFlush(cards); | ||||
|  | ||||
|         Func<List<Card>, bool> isStraightFlush = | ||||
|                               cards => hasStraightFlush(cards) && !isRoyalFlush(cards); | ||||
|  | ||||
|         handValues = new Dictionary<string, Func<List<Card>, bool>> | ||||
|                      { | ||||
|                          { "A Pair", isPair }, | ||||
|                          { "Two Pairs", isTwoPair }, | ||||
|                          { "Three Of A Kind", isThreeOfKind }, | ||||
|                          { "Straight", isStraight }, | ||||
|                          { "Flush", isFlush }, | ||||
|                          { "Full House", isFullHouse }, | ||||
|                          { "Four Of A Kind", isFourOfKind }, | ||||
|                          { "Straight Flush", isStraightFlush }, | ||||
|                          { "Royal Flush", isRoyalFlush } | ||||
|                      }; | ||||
|     } | ||||
|  | ||||
|     public static string GetHandValue(List<Card> cards) | ||||
|     { | ||||
|         foreach (var KVP in handValues) | ||||
|         { | ||||
|             if (KVP.Value(cards)) { | ||||
|                 return KVP.Key; | ||||
|             } | ||||
|         } | ||||
|         return "High card "+cards.Max().GetName(); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Drawing; | ||||
| using System.Drawing.Imaging; | ||||
| using System.IO; | ||||
| @@ -13,10 +14,11 @@ namespace NadekoBot | ||||
|         /// </summary> | ||||
|         /// <param name="images">The Images you want to merge.</param> | ||||
|         /// <returns>Merged bitmap</returns> | ||||
|         public static Bitmap MergeImages(Image[] images) | ||||
|         public static Bitmap MergeImages(IEnumerable<Image> images) | ||||
|         { | ||||
|             if (images.Count() == 0) return null; | ||||
|             int width = images.Sum(i => i.Width); | ||||
|             int height = images[0].Height; | ||||
|             int height = images.First().Height; | ||||
|             Bitmap bitmap = new Bitmap(width, height); | ||||
|             var r = new Random(); | ||||
|             int offsetx = 0; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user