21点为什么一个人玩的游戏可以多手牌进行游戏?

这篇博客针对那些以c++语言为基础、刚刚学完面向对象的程序设计的同学们。这篇博客内容作为课程设计很合适。
大牛们可以直接跳过去不看。但是本人也欢迎大牛们提出宝贵意见。
21点游戏是一个牌类游戏。
该游戏由1-7名玩家对战电脑玩家(称为House)。游戏开始时系统将为所有玩家(包括电脑玩家)发2张牌,随后每个玩家(包括电脑玩家)可以按照一定的规则进行加牌。最终,手中牌的点数不超过21点的玩家中,超过电脑玩家点数的玩家获胜。发牌过程中任何超过21点的玩家(包括电脑玩家)将认定为bust(该情况下输得最惨)。
牌面的值:对于数字牌而言,其牌面值为对应数字的值。对于Jack、Queen、King牌而言,其值设定为10。对于Ace牌而言,其值可以判定为1或者11,计算总值时,Ace按照最利于玩家的情况进行取值。
发牌:游戏开始时,系统自动为每个玩家发两张牌。House跟其他玩家不同之处在于:House初始时第一张牌是面朝下的,其他玩家无法知道其值。
要牌:发牌结束后,每位非电脑玩家可以选择是否要牌,如果选择要牌,那么系统将自动发给玩家一张牌。如果添加一张牌之后,所有牌面的总计值超过了21点,则判定为bust。当所有玩家要牌结束之后,进入house要牌阶段。
house要牌:首先house将第一张牌亮出,之后house将自动要牌。如果house的牌面的总计值不超过16点,那么house将继续要牌,直到超过16点。
判断输赢:house要牌结束之后,如果house点数超过了21点,那么判断house为bust,此时所有未bust的玩家判定为获胜。如果house没有bust,那么比house点数少的玩家则判定为lose,跟house点数相等的玩家判定为push(平手),比house点数多并且未bust的玩家则判定为win。
游戏展示:
在控制台类型的project中,展示21点游戏如下图:
上图展示了一个两人游戏,其中一个玩家获胜。另外一个玩家bust。
面向对象的分析
首先我们要对问题中的实体进行抽象和归类。从简介和规则两个模块中,我们可以提出一些实体,并将其抽象为类。
大部分同学可以想到如下的类:
牌(Card)
电脑玩家(House)
人类玩家(Player)
这些类的确比较基础,而且由于题目中的明显暗示,设计出这些类是不难的。
继续想下去,对于每一张牌而言,都有点数和花色之分,并且我们可以想到,由于电脑玩家和人类玩家具有共性和特性,所以可以使用一个基类对两种玩家进行再抽象。
两类玩家的父类GenericPlayer(GenericPlayer)
牌的花色(Suit)
牌的牌值Rank(Rank)
(上面两个高大上的英文名是国际通用的)
大部分同学可以想到,Suit和Rank只是对花色和值的列举,大可不必作为类出现。因此将其处理为全局数组,更好一些的做法是将其作为枚举值放入枚举类型里面。
这时候心急的同学们应该开始在想如何编码了!主函数应该是控制如何洗牌、发牌、判断输赢神马的功能,这些功能都可以写成一个函数。如此这般、三下五除二,编码,搞定了!
但是这样绝对不perfect!
还是看我下面怎么分析吧骚年。
我们抛除上面的分析,先来谈一下牌类游戏。对于牌类游戏来讲,我们是将一副牌分成了不同的部分。分到不同部分的牌,都有一定的排列组合。我们把这个部分的牌称作“手牌(Hand)”。这个“手牌”的概念在牌类游戏的设计中极其重要。因为玩家进行牌类游戏时,判断如何对牌进行操作,其实就是在看自己的手牌情况。手牌中的牌随时可能变化,但是我们还是可以基于手牌的实时变化情况进行判断。
我们可以先这么认为:
手牌(hand)是牌的一种集合(collection)形式
那么手牌有哪些重要作用呢?
知道牌的实时组合以及相应的规则。包括还剩多少张牌,牌的组合形成的达到某种规则的属性(比如在21点游戏中,我们关心的是牌的牌面值总和,又比如斗地主游戏中是否有顺子、飞机、炸弹等等)。
控制牌的“分牌”、“出牌”或者“要牌”等实时变化的情况。
根据牌的组合情况和规则判断游戏胜负。
以上这三个作用奠定了一个牌类游戏的设计基础。但是由于不同的游戏规则,手牌的具体设计是不同的。根据规则制定的角色(role)(比如21点游戏里面的house和player)情况,我们往往要对手牌抽象出的类进行封装继承等面向对象特性的操作,因为不同角色有不同的规则(比如21点游戏里面,house和普通玩家player的要牌规则是不同的,又比如21点游戏里面,house没有胜负之分,只有player有)。
但是基于上面的描述,我们至少可以认为:
将所有角色中手牌的共同特性抽象为手牌类是非常合理的。
但是手牌中的其他特性如何处理,到底不同的角色是继承自手牌类还是将手牌类作为角色的一部分,就要看具体的设计是怎样的了。
总结一下,现在我们有了Card类、Hand类、Player类、House类、GenericPlayer类这几个类,并且定义了Suit和Rank这两个和Card类相关的枚举类型。但是我们的分析还远远没有结束。且看我下回分解。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:568次
排名:千里之外Posted by iPhoneer
  21点游戏黑杰克(Blackjack)为一款极具趣味性的牌类游戏,它现在登陆iPhone了!  21点游戏为一款极具趣味性的牌类游戏,最早出现在十六世纪,起源于法国,法语称:vingt-et-un (20 和 1), 因此在广为流行后该游戏就叫&21&。后传入英国并广泛流传, 如果玩家拿到 黑心&A&和 黑心&J&, 就会给与额外的奖励,英文的名字叫黑杰克(Blackjack)。&  在游戏中,每个玩家都争取拿到最接近21点的牌,但是不能超过21点,超过为&爆牌&即失败,只有最接近21点的人才有可能得到胜利。&疯狂21点游戏规则游戏目标疯狂21点与传统的21点玩法相似,玩家想要赢得牌局,手上的牌点数必须比庄家的牌点数大,尽量接近21点但不可超过21点。游戏不需理会其他玩家的牌点数,玩家只与庄家的牌点数作对抗,所有玩家的牌均是牌面向上的。本游戏一靴牌共有8副牌合共416张牌,疯狂21点玩法简单,只需按上述的游戏目标,跟据游戏指示玩家作出决定便成了。词汇解释
Blackjack:简称BJ,一张A牌及一张10点的牌所组成的21点,初始注金按1赔1.5派彩。
21点:多于两张牌所组成的21点。
爆牌:手上所有牌点数加起来超过21点称为爆牌。玩家会即时输掉所有初始及加注的金额。
7龙:玩家一局手上有7张但非爆牌的牌局,如庄家非BJ不论玩家手上的牌点数是否大于庄家,初始注金按1赔1派彩。
和局:玩家与庄家同时获得BJ或玩家与庄家同时非BJ但点数相同时,该局视为和局,初始注金及加注金退回。
硬牌:该手牌没有A牌, 或A牌只能按1点计算。
软牌:该手牌A牌可按1点或11点计算。纸牌点数
2至10点按牌面值计算。
J, Q, K按10点计算。
A作1或11点计算,若加上11点后成为爆牌,则按1点计算。玩家选择项目
初始下注:每局发牌前的投注项目,玩家必须对该牌局,根据玩家的喜好及赌桌可接受的投注上下限内,作出相应的投注金额。
对子:每局发牌前的投注项目,玩家首两张牌是对子可按1赔11派彩,10, J, Q及K视为不同牌。
要牌:玩家选择要下一张牌。
不要牌:玩家选择不再要牌,以当时的手牌点数与庄家对抗。
保险:庄家首张牌面是A时,用初始注金的一半投注保险,庄家是BJ时,保险注金一赔二。
投降:投降该手牌输一半初始注金,另一半退回玩家。
加注:发了首两张牌后可以把初始注金增加一倍作投注,但只能要一张牌,所有注金一赔一。
1赔1:如玩家该局牌是BJ而庄家的牌面是A的话,可以选择注金即时以1倍派彩,即放弃手牌BJ获得1.5倍派彩的权利。庄家要牌规则任何情况下庄家不可自行选择是否要牌,只能根据21点牌例而强制性是否要牌,疯狂21点采用庄家牌点数等于或小于16点必须要牌,牌点数等于或大于17点(包括软17点或硬17点)均不得博牌。游戏规则简介玩家除了对一般的牌局下注之外,还可以投注【对子】。玩家会派发两张牌面向上的牌,庄家会派发一张牌面向上的牌。玩家在获得初始牌之后,可以通过要牌选择决定自己牌局,此时发出的所有牌会放在真实赌桌的公牌区内。所有要牌的玩家将共享同一张公共牌,组成自己的一手牌与庄家对抗。不用等待其他玩家的选择。直接选择是否要下一张牌。选择停牌后的下一张牌会发给庄家,庄家必须按牌例是否继续博牌直至牌局完结。该牌局完结,保险及对子投注结算及派彩。公牌使用玩家是独立与庄家的手牌对抗,当荷官派了第一轮牌后,即庄家一张牌,五位玩家各两张牌后,之后所派的全是公牌,公牌的使用规则是当玩家选择不要牌后,公牌会按序派给庄家,庄家按牌例要牌或不要牌直至每位玩家最后分出该局结果为止。
输入您的搜索字词
提交搜索表单
&&( 1:1:48)&&( 13:5:28)&&( 12:20:33)&&( 10:0:0)&&( 0:0:0)&&( 0:0:0)&&( 0:0:0)&&( 8:49:40)&&( 0:0:0)&&( 10:14:38)
(1) (1) (1) (5) (3) (10) (8) (2) (7) (41) (5) (17) (40) (46) (12) (24) (20) (9) (2) (1) (2) (13) (24) (28) (23) (23) (1) (1) (2) (1) (1) (3) (2) (1) (1)21点为什么一个人可以多手牌进行游戏?-夕阳问答网 & 21点为什么一个人可以多手牌进行游戏?信息问题21点为什么一个人可以多手牌进行游戏?-夕阳问答网发起者:不见山巅树,摧杌下为薪。问题补充:
Copyright & 2017qi牌游戏之学习如何形成自己的完美21点策略&&
&&& 在紫金阁中二十一点其实是非常有技巧的一款紫金阁,我们看一下一些有趣的21点方案,以便了解如何最好地适用于最优策略。
&&& 在21点中很多玩家发现17是一个很难的点数。保持硬牌17是很明智的,但是这里我们展示的同样不是软17(一个A和一个6)的情况。然而17仍然是好牌,您将有机会不用担心爆牌来提高您的手牌。
&&& 抽到任何牌面为10的牌意味着您仍然拥有17点,一张A,2,3或者4将会改善您的牌。只有5,6,7,8或者9才能削弱您的手牌。正如你所看到的,8张牌能够提高或者保持您手牌的强度,只有5张牌会削弱您的牌。这就意味着软17有时候是双倍赌注的好机会。
玩您的手牌,不是您的赌注
&&& 无论您是以下 最佳策略还是您自己的系统,大多数玩家都同意重要的是根据您的牌作出决定,而不是您的◇◇价值。例如,如果您已经拿到14点,而庄家是10点,那么最佳策略是要牌拿到另一张牌。
&&& 但是,如果玩家的◇◇金相对于他们的资金来说太高,他们往往会停牌,因为他们不想冒险爆牌。如果您发觉自己是这种情况,减少您的◇◇金应该是一个好主意。
&&& 赌注已经超出舒适区也可能导致玩家不能够充分选择双倍赌注。玩家处于良好情况下,双倍赌注能够使他们获得充分的价值。如果玩家原始◇◇太大,他们往往会没有勇气选择双倍赌注而不能获得价值。
&&& 对比于玩家不情愿进行双倍赌注,他们更愿意分裂10号价值的对牌。如果庄家显示一个5或者一个6,玩家往往会认为很容易赢得两手牌。
&&& 但是,为什么您想要打破您拿到的最好的21点手牌之一,而承担两手更糟牌的风险?很多时候您应该分裂您配对的牌,但是当您拿到20点的时候,保留牌面就是最好的主意。
最后的思考
&&& 正如我们看到的,玩家经常基于超出牌面的因素改变他们的游戏,这样很少能够改善他们的结果。这种情况的另外一个例子就是,当玩家拿到低手牌,就希望庄家爆牌。这种过渡谨慎经常会表明玩家关注于他们的筹码更多过关注他们的牌面。
&&& 无论您使用的何种策略,至关重要的是关注您自己的游戏,而不要让自己分心。成功的21点玩家总是明白这篇文章所讨论的问题所在,并将这些结合到他们的知识最佳策略.
[已过滤文章中的超链接]
被转藏 : 0次
被转藏 : 0次

我要回帖

更多关于 一个人玩纸牌的游戏 的文章

 

随机推荐