德州扑克与梭哈游戏
https://baijiahao.baidu.com/s?id=1853823751271030518&wfr=spider&for=pc
德州扑克起源于19世纪初美国德克萨斯州的罗布斯敦(Robstown)由早期的一种扑克牌变体------梭哈(Stud Poker)演化而来。

梭哈
梭哈,又称沙蟹,学名Five Card Stud,五张种马,是扑克游戏的一种。以五张牌的排列、组合决定胜负。游戏开始时,每名玩家会获发一张底牌(此牌只能在最后才翻开);当派发第二张牌后,便由牌面较佳者决定下注额,其他人有权选择"跟"、"加注"、"放弃"或"清底"。当五张牌派发完毕后,各玩家翻开所有底牌来比较,梭哈在全世界纸牌游戏地位非常高,深受人们的喜爱。游戏在国内和港台地区广泛流传,其特点为:上手容易、对抗性强,既有技巧也有一定的运气成分,因此流传非常广泛,五张牌(梭哈)高手必须具备良好的记忆力、综合的判断力、冷静的分析能力再加上些许运气。该游戏紧张刺激,集益智和乐趣于一身。
牌型比较
牌型:同花顺>铁支>葫芦>同花>顺子>三条>两对>对子>散牌
牌点数:A>K>Q>J>10>9>8>7>6>5>4>3>2
花色:黑桃>红桃>梅花>方片
同花顺:连续牌点数并且同种花色。比如【黑桃9 黑桃10 黑桃J 黑桃Q 黑桃K】比较最大的牌点数,如果相同,比较花色
铁支【四条】:四张同点数及一张任意牌,如黑桃4、红桃4、梅花4、方块4和梅花7。比较四张大小一样的牌的牌点数
葫芦【满堂红】:三张同点数的牌加两张点数相同的牌任意牌,如JJJ+KK。比较三张大小一样的牌的牌点数
同花:同种花色,比如都是红心。五张花色相同的牌,如方块2、方块3、方块4、方块5、方块8。比较最大的牌点数,如果相同,比较第二大牌的牌点数,以此类推
顺子:连续的牌点数。五张点数相连的牌,如2 3 4 5 6,比较最大的牌点数,如果相同,比较最大的牌的花色
【最大的顺子:A K Q J 10】【最小的顺子:2 3 4 5 6,有时认为A 2 3 4 5为最小顺子】
三条:三张点数相同的牌加两张任意牌。如555+Q6.比较三张大小一样的牌的牌点数
两对:两张点数相同的牌外加另外两种点数相同的牌,再加另一种任意牌。如 44+55+A。比较大对子的大小,若相同,比较小对子的大小,若还相同,比较单张牌的大小,若还相同,比较最大对子中的最大花色
对子:两张点数相同的牌,其他为任意单牌。如22+46K。比较两张大小一样的牌的牌点数,如果相同,比较依次比较剩余的三张牌大小。若大小都相同,比较对子中最大的花色
散牌【高牌】:比较最大一张牌的大小,如果相同,比较第二大的牌的牌点数,如果牌点数都相同,比较最大牌的花色
各种牌型
● High Card:【高牌】杂牌(不属于下面任何一种)。根据牌从大到小的顺序依次比较。
● Pair:【对子】有一对,加3张杂牌组成。先比较对的大小,再从大到小的顺序比较杂牌。
● Two Pairs:【两对】有两对,加1帐杂牌。先从大到小比较对的大小,再比较杂牌。
● Three of a Kind:【三条】有3张值相同的牌。比较这个值即可。
● Straight:【顺子】一条龙。即5张牌连续。比较最大的一张牌即可。
● Flush:【同花】清一色。即5张牌花色相同。和杂牌一样比较。
● Full House:【葫芦、满堂红】3张值相同的牌,加上一对。比较三张相同的值即可。
● Four of a kind:【四条】有4张牌相同,即相当于一副"炸弹"。
● Straight flush:【同花顺】同花顺。即5张牌花色相同,并且连续。例如同花色的34567。
新建窗体应用程序FiveCardStud
将默认的Form1重命名为FormFiveCardStudEx
新建枚举牌型:CardCategory
CardCategory.cs源程序如下:
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
/*
* 德州扑克【梭哈】共有13牌点数×4种花色=52张牌。比较顺序:先进行牌型比较,然后进行点数比较,最后进行花色比较
* 牌型:同花顺>铁支【四条】>葫芦【满堂红】>同花>顺子>三条>两对>对子>散牌【高牌】
* 牌点数:A>K>Q>J>10>9>8>7>6>5>4>3>2
* 花色:黑桃>红桃>梅花>方片
* ● High Card:【高牌】杂牌(不属于下面任何一种)。根据牌从大到小的顺序依次比较。
● Pair:【对子】有一对,加3张杂牌组成。先比较对的大小,再从大到小的顺序比较杂牌。
● Two Pairs:【两对】有两对,加1张杂牌。先从大到小比较对的大小,再比较杂牌。
● Three of a Kind:【三条】有3张值相同的牌。比较这个值即可。
● Straingt:【顺子】一条龙。即5张牌连续。比较最大的一张牌即可。
● Flush:【同花】清一色。即5张牌花色相同。和杂牌一样比较。
● Full House:【葫芦、满堂红】3张值相同的牌,加上一对。比较三张相同的值即可。
● Four of a kind:【四条】有4张牌相同,即相当于一副"炸弹"。
● Straight flush:【同花顺】同花顺。即5张牌花色相同,并且连续。例如同花色的34567。
*/
namespace FiveCardStud
{
/// <summary>
/// 德州扑克牌类型:牌型
/// 点数等级Rank:牌点数:Ace>King>Queen>Jack>10>9>8>7>6>5>4>3>2
/// 花色Suit:黑桃(Spade)、红心(Heart)、梅花(Club)、方块(Diamond)
/// </summary>
public enum CardCategory
{
/// <summary>
/// 不足五张牌,牌型未知
/// </summary>
[Description("未知")]
Unknown = 99,
/// <summary>
/// 【同花顺】.即5张牌花色相同,并且连续。例如同花色的34567。
/// 这里规定 最小的顺子是【2-3-4-5-6】,【A-2-3-4-5不是顺子】
/// 【组合数 36=4×9】
/// </summary>
[Description("同花顺")]
StraightFlush = 1,
/// <summary>
/// 【四条】,也叫铁支,炸弹,有4张牌点数相同
/// 【组合数 624=13*48】
/// </summary>
[Description("四条")]
FourOfKind = 2,
/// <summary>
/// 【葫芦、满堂红】3张值相同的牌,加上一对。
/// 【组合数 3744=13×4×12×6】
/// </summary>
[Description("满堂红")]
FullHouse = 3,
/// <summary>
/// 【同花】清一色。即5张牌花色相同
/// 【组合数 5112=4×C(13,5)-36】
/// </summary>
[Description("同花")]
Flush = 4,
/// <summary>
/// 【顺子】一条龙。即5张牌连续。这里规定 最小的顺子是【2-3-4-5-6】,【A-2-3-4-5不是顺子】
/// 【组合数 9180=9×Power(4,5)-36】
/// </summary>
[Description("顺子")]
Straight = 5,
/// <summary>
/// 【三条】有3张值相同的牌
/// 【组合数 154912=13×4×66×4×4】
/// </summary>
[Description("三条")]
ThreeOfKind = 6,
/// <summary>
/// 【两对】有两对,加1张杂牌。
/// 【组合数 123552=78×36×11×4】
/// </summary>
[Description("两对")]
TwoPairs = 7,
/// <summary>
/// 【对子】有一对,加3张杂牌组成。
/// 【组合数 13×6×220×64=109 8240 种】
/// </summary>
[Description("一对")]
OnePair = 8,
/// <summary>
/// 【高牌】杂牌,散牌
/// 【组合数 130 2540 出现概率约为 50.12%,是所有牌型中最常见的一种】
/// </summary>
[Description("高牌")]
HighCard = 9
}
}
新建枚举花色:SuitCategory
SuitCategory源程序如下:
cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FiveCardStud
{
/// <summary>
/// 花色Suit:黑桃(Spade)、红心(Heart)、梅花(Club)、方块(Diamond)
/// HighCard【高牌】杂牌,散牌时,当点数相同时,比较花色【黑桃>红心>梅花>方块】
/// </summary>
public enum SuitCategory
{
/// <summary>
/// 空,保留
/// </summary>
None = 0,
/// <summary>
/// 黑桃(Spade)
/// </summary>
Spade = 1,
/// <summary>
/// 红心(Heart)
/// </summary>
Heart = 2,
/// <summary>
/// 梅花(Club)
/// </summary>
Club = 3,
/// <summary>
/// 方块(Diamond)
/// </summary>
Diamond = 4
}
}
新建一个扩展方法类ExtensionUtil
ExtensionUtil源程序如下:
cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace FiveCardStud
{
/// <summary>
/// 扩展方法
/// </summary>
public static class ExtensionUtil
{
/// <summary>
/// 获取枚举对应的特性描述,比如 [Description("同花顺")]
/// </summary>
/// <param name="enumValue"></param>
/// <returns></returns>
public static string GetEnumDescription(this Enum enumValue)
{
string value = enumValue.ToString();
FieldInfo field = enumValue.GetType().GetField(value);
if (field == null) return value;
object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false); //获取描述属性
if (objs == null || objs.Length == 0) //当描述属性没有时,直接返回名称
return value;
DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
return descriptionAttribute.Description;
}
}
}