[code]using System;using System.Collections;using System.Collections.Generic;public class BlackJackTools{/* * 游戏规则 * 五龙 > 黑杰克 > 21点>20点>...> 5点 > 4点> 爆牌* * 1、五龙:五张牌且点数之和不超过21点* * 2、黑杰克:A + 10/J/Q/K* * 3、A可当1点也可当11点,2—9点数不变,10,J,Q,K都是10点* * * * * * ***//// <summary>/// 保存用过的牌/// </summary>public static List<int> usedList = new List<int>();public static void StartGame(){usedList.Clear();}public static int GetCard(){int number = -1;do{number = new Random().Next(0, 52);}while (usedList.Contains(number));usedList.Add(number); return number;}/// <summary>/// 枚举:牌型/// </summary>public enum PokerType{WuLong = 1, //1 代表五龙BlackJack = 0, //0 代表黑杰克Boom = -1, //-1 代表爆牌None = -3 //手牌小于2张,返回无牌型,这里也可返回点数}/// <summary>/// 检测牌型/// </summary>/// <param name=\"list\"></param>/// <returns></returns>public static int CheckType(List<int> list){int sum = 0;//和int ANumber = 0;//A的个数int Count = list.Count;//手牌数量list.Sort();//排序//1、先计算A的数量foreach (var item in list){if (item > 3){ break; }ANumber++;}//2、一张手牌的时候,不可能爆牌if (list.Count <= 1) { return (int)PokerType.None; }//3、两张手牌的时候,不可能爆牌,不是黑杰克就是数字牌型if (list.Count == 2){if (ANumber == 2){return 12; //两张A直接返回12}if (ANumber == 1){if (list[1] / 4 + 1 >= 9)//第二张牌是 10、J、Q、K{return (int)PokerType.BlackJack; //黑杰克}else{return list[1] / 4 + 1 + 11; // 数字牌型,返回点数}} ////判断是不是J、Q、K、for (int i = ANumber; i < list.Count; i++){ //判断是不是J、Q、K、if (list[i] / 4 > 9){sum += 10; continue;}sum += list[i] / 4 + 1;}return sum; //不包含A,数字牌型,返回点数}//4、求和,当手牌多余2张的时候,开始计算点数,for (int i = ANumber; i < list.Count; i++){//判断是不是J、Q、K、if (list[i] / 4 > 9){sum += 10;continue;}sum += list[i] / 4 + 1;}//5、是否爆牌if (sum > 21 - ANumber) //把A当作1,都爆牌,那铁定爆牌{ return (int)PokerType.Boom; }//6、判断是不是五龙,不是爆牌,而且手牌数量大于等于5if (list.Count >= 5) { return (int)PokerType.WuLong; }//7、数字牌型计算if (ANumber > 0){//把第一个A当做11来计算,判断是否超出21点sum += 11 + ANumber - 1;if (sum > 21){//超过return sum - 10;}}return sum;}}