21点游戏
- 格式:doc
- 大小:76.00 KB
- 文档页数:11
casino21点基本策略表(实用版)目录1.21 点游戏简介2.21 点基本策略表的构成3.如何运用基本策略表4.策略表的优点与局限性正文一、21 点游戏简介21 点,又称为“黑杰克”,是一种在赌场中非常受欢迎的扑克游戏。
游戏的目标是让玩家的牌面点数尽量接近 21 点,但不能超过 21 点。
在游戏中,玩家与庄家各自发两张牌,然后根据牌面点数计算输赢。
玩家可以通过要牌、停牌等方式调整自己的牌面点数,从而争取胜利。
二、21 点基本策略表的构成21 点基本策略表是根据大量的模拟游戏数据和数学计算得出的一种策略指导。
它通常分为以下几个部分:1.庄家牌面点数与玩家行动建议:根据庄家的牌面点数,为玩家提供相应的要牌、停牌建议。
2.玩家牌面点数与行动建议:根据玩家自己的牌面点数,为玩家提供相应的要牌、停牌建议。
3.特殊规则:对于游戏中的特殊规则,如“双倍下注”、“保险”等,提供相应的策略建议。
三、如何运用基本策略表在游戏过程中,玩家可以根据基本策略表的建议来调整自己的牌面点数,从而争取胜利。
需要注意的是,策略表只是一种参考,不能保证绝对胜利。
玩家应结合实际情况,灵活运用策略表。
四、策略表的优点与局限性1.优点:基本策略表为玩家提供了一个参考,有助于提高胜率。
通过对大量数据的分析,策略表可以降低玩家在游戏中的盲目性,提高决策的准确性。
2.局限性:策略表只是一种参考,不能保证绝对胜利。
在实际游戏过程中,玩家的决策仍然受到心理、情绪等因素的影响。
此外,策略表对于某些特殊情况可能无法提供准确建议。
总之,21 点基本策略表为玩家提供了一种参考,有助于提高胜率。
黑杰克●游戏简介黑杰克又名21 点,BlackJack ,源自于法国,是所有娱乐场中最常见的游戏之一。
这个游戏主要的目的,就是使您手中所有的牌点数之和不超过21 点,但又比庄家手中的牌更接近21 点,从而来赢得游戏。
参加人数:3 人,一人为庄家,其它为闲家。
游戏用牌:一副牌,不要大小王,共52 张。
●游戏规则1 、游戏术语1、牌点:2 —9 的牌点分别对应于其牌面值,10 、J 、Q 、K 为10 点。
A 可以代表1 或者11 ,如果A 算为11 时牌点总和大于21 ,则按A = 1 计算。
2、BLACKJACK 牌型: 牌点总和为21 点的牌型。
3、爆牌:牌点总和超过21 点时,称为爆牌。
4、要牌:玩家的点数未超过21 点时,就可以一直要牌,直到玩家停牌或者爆牌了为止。
5、停牌:玩家停止要牌。
2 、游戏规则a) 游戏开始后,随机选定一个玩家为庄家,其它玩家为闲家。
b) 全部闲家必须先下注( 庄家不用下注) 此时庄家会看到“等待闲家下注”的提示。
c) 下注完毕,系统给每位玩家发2 张牌,一张底牌和一张明牌。
接着由闲家轮流要牌;全部闲家都停牌后,再由庄家要牌;庄家停牌后,统一开牌。
最后根据牌面的大小来计算派彩。
3 、派彩计算·闲家胜利(1)21 点> 闲家点数>庄家点数·庄家胜利(1)21点>= 庄家点数>=闲家点数(2)闲家爆牌,直接判庄家胜利4 、玩家断线逃跑处理·闲家逃跑(1)如果已经下注完毕,直接扣除逃跑的闲家下注的额度(1)如果未下注完毕,直接扣除逃跑的闲家游戏最低限注·庄家逃跑(1)如果已经下注完毕,直接扣除逃跑的庄家额度,额度为所有闲家下注的总额(1)如果未下注完毕,直接扣除逃跑的庄家游戏最高限注4 、注意事项与声明(1)所有赢家的派彩系统自动扣除部分系统维护费(赢家最终派彩=游戏所得派彩X (100%- 系统维护费比例))炸金花●游戏简介游戏参与人数6 人,使用一副扑克牌,去掉大小王,共52 张牌。
21点计数算法21点计数算法是一种用于计算扑克牌点数的方法。
在21点游戏中,玩家需要根据手中的牌的点数来决定是否继续要牌,以使自己的点数尽量接近21点而不超过。
这个算法可以帮助玩家更好地掌握游戏进程,提高胜率。
我们需要理解扑克牌的点数计算规则。
在21点游戏中,A牌可以表示1点或者11点,K、Q、J牌都表示10点,而其他牌的点数与牌面上的数字相同。
根据这些规则,我们可以设计一个简单的计数算法。
我们定义一个变量count,用于记录已经发出的牌的点数之和。
初始时,count为0。
然后,每次发出一张牌时,我们根据牌的点数来更新count的值。
如果发出的牌是2、3、4、5、6这些小牌,我们将count加上牌的点数。
这是因为这些小牌出现的概率较高,所以将count增加可以更好地反映出剩下的牌中小牌的比例。
如果发出的牌是10、J、Q、K这些大牌,我们将count减去牌的点数。
这是因为这些大牌出现的概率较小,所以将count减少可以更好地反映出剩下的牌中大牌的比例。
如果发出的牌是A,我们需要根据当前的count来决定是将A当作1点还是11点。
一般来说,当count较小时,我们将A当作11点,以增加点数;当count较大时,我们将A当作1点,避免爆牌。
通过不断地根据发出的牌来更新count的值,我们可以得到一个较为准确的表示剩下的牌中大牌和小牌比例的数值。
根据这个数值,玩家可以做出更明智的决策,从而提高胜率。
当然,21点计数算法并非绝对准确,只是一种辅助工具。
在实际游戏中,还需要结合其他因素,如庄家的牌和玩家的手感等,来做出最佳决策。
此外,使用计数算法也需要一定的经验和技巧,需要玩家不断的实践和磨练。
21点计数算法是一种帮助玩家更好地掌握游戏进程的方法。
通过根据发出的牌来更新count的值,玩家可以得到一个较为准确的大牌和小牌比例,从而做出更明智的决策。
然而,使用计数算法并不能保证100%的胜率,还需要结合其他因素来做出最佳决策。
21点游戏策划书3篇篇一《21 点游戏策划书》一、游戏概述1. 游戏名称:21 点2. 游戏类型:桌面纸牌游戏3. 游戏目标:通过玩家与庄家的牌面点数比较,争取使手中牌的点数最接近 21 点且不超过 21 点,超过 21 点则为失败。
二、游戏规则1. 参与人数游戏可由 2 到多名玩家进行。
2. 发牌玩家开始时各获得一定数量的牌,庄家也会获得相应牌。
3. 牌面点数计算A 牌既可算 1 点也可算 11 点,其他牌面按其面值计算点数。
4. 比较点数玩家与庄家分别比较手中牌的点数大小,点数接近 21 点且不超过者胜,超过 21 点则失败。
5. 胜负判定若玩家点数超过 21 点则为爆牌,直接输掉游戏;若庄家爆牌则玩家获胜;若双方点数均未超过 21 点,则点数高者胜,若点数相同则为平局。
6. 特殊情况若玩家的前两张牌刚好为 21 点(即 blackjack),则直接获胜,称为“天然 21 点”。
三、游戏流程1. 玩家选择是否参与游戏并进行投注。
2. 庄家发牌给玩家和自己。
3. 玩家根据牌面情况可以选择继续要牌(hit)、停止要牌(stand)或进行其他操作(如加倍等,视具体规则设定)。
4. 庄家根据规则决定是否继续要牌,直到庄家或玩家满足特定条件(如达到一定点数等)停止发牌。
5. 比较双方点数,判定胜负并进行相应的筹码结算。
四、游戏策略1. 玩家要根据手中牌的情况合理决定是否要牌,尽量追求接近 21 点但不超过。
2. 可以根据庄家露出的牌面等情况进行一些策略性的判断和决策。
五、游戏道具1. 一副标准的扑克牌,去掉大小王。
2. 用于放置筹码的筹码盘等。
六、游戏环境与氛围营造1. 提供舒适的游戏桌面和合适的灯光环境。
2. 营造轻松、刺激的游戏氛围,让玩家能够全身心投入游戏。
七、游戏扩展与变化1. 可以增加一些特殊规则,如允许玩家进行保险投注等。
2. 设计不同的游戏难度级别,满足不同玩家的需求。
篇二《21 点游戏策划书》一、游戏简介21 点是一种广受欢迎的扑克牌游戏,玩家通过与庄家竞争点数大小来获取胜利。
二十一点规则玩法玩家需将赌注置于下注圈中央。
然后,庄家给每个玩家发两张牌,牌面朝上;给自己发两张牌,一张牌面朝上,一张牌面朝下。
K、Q、J和10牌都算作10点。
A牌既可算作1点也可算作11点,由玩家自己决定。
其余所有2至9牌均按其原面值计算。
如果玩家拿到的前两张牌是一张A和一张10,就拥有黑杰克(Blackjack);此时,如果庄家没有黑杰克,玩家就能赢得 1.5倍的赌金(2赔3)。
没有黑杰克的玩家可以继续拿牌,以使总点数尽可能接近但不超过21点;如果超过21点,玩家就会“爆破”并输掉赌金。
如果庄家的总点数等于或少于16点,则必须拿牌;如果庄家的总点数等于或多于17点,则必须停牌。
二十一点术语拿牌(Hit)再拿一张牌。
停牌(Stand)不再拿牌分牌(Split)玩家再下一注与原赌注相等的赌金,并将前两张牌分为两副单独的牌。
这两张牌的点数必须相同(即一对8、一对K和一对Q)。
分成两副牌之后,一张A牌和一张10牌只能算作21点,不能算作黑杰克。
双倍下注(Double)玩家在拿到前两张牌之后,可以再下一注与原赌注相等的赌金(如果觉得少可以加倍),然后只能再拿一张牌。
如果拿到黑杰克,则不许双倍下注。
保险(Insurance)选做如果庄家牌面朝上的牌是A,玩家可以买保险,也就是相当于原赌注一半的额外赌金。
如果玩家确信庄家下一张是10点牌,则可以买保险。
如果庄家确实有黑杰克,玩家将赢得2倍的保险赌金;如果庄家没有黑杰克,玩家将输掉保险赌金,游戏照常继续。
黑杰克要大于其他总点数为21点的牌。
玩的时候使用三副扑克牌(即2-10的牌,J,Q,K,和A来自红心,方块,黑桃,和草花4套)。
有两个玩家,一个是电脑用户,一个是电脑本身。
这个游戏的目标是打败另一个玩家,尽可能地接近21分(without超过21),或者持有5张牌并且小于等于21分。
每张牌有一个值:牌2-10对应数字2-10,J,Q,K对应数字10,A对应数字11。
21点,世界上最流行的扑克牌赌博玩法,在拉斯维加斯各个赌场都能见到玩这种牌的赌桌。
玩法是这样的:21点一般用到1-8副牌。
庄家给每个玩家发两张牌,牌面朝上;给自己发两张牌,一张牌面朝上(叫明牌),一张牌面朝下(叫暗牌)。
大家手中扑克点数的计算是:K、Q、J 和 10 牌都算作 10 点。
A 牌既可算作1 点也可算作11 点,由玩家自己决定。
其余所有2 至9 牌均按其原面值计算。
首先玩家开始要牌,如果玩家拿到的前两张牌是一张 A 和一张10点牌,就拥有黑杰克 (Blackjack);此时,如果庄家没有黑杰克,玩家就能赢得1.5 倍的赌金(2 赔 3)。
没有黑杰克的玩家可以继续拿牌,可以随意要多少张。
目的是尽量往21点靠,靠得越近越好,最好就是21点了。
在要牌的过程中,如果所有的牌加起来超过21点,玩家就输了——叫爆掉(Bust),游戏也就结束了。
假如玩家没爆掉,又决定不再要牌了,这时庄家就把他的那张暗牌打开来。
假如他现在的两张牌加起来小于或等于16点(Hit),他就必须继续给他自己发牌(不管他的点数是否比你大),一直发到他的点数大于等于17点为止。
如果庄家的总点数等于或多于17 点,则必须停牌(Stand)。
庄家在给自己发牌的过程中,假如他爆掉了,那他就输了。
假如他没爆掉,那么你就与他比点数大小,大为赢。
一样的点数为平手,你可以把你的赌注拿回来。
如果拿牌拿到手中有5张牌,并且总数不到21点,那这种情况能压住一切牌型(当然5张加起来一共21点更好)。
数学看似与赌博沾不上边的东西,却在美国电影《决胜21点》中被导演运用到了这上面,那么真实中有这么一个人吗?答案是肯定的,而且他还是一个华裔美国人。
马恺文,一名麻省理工学院的高材生,是位计量分析的奇才。
1994年,正在麻省理工就读大三的他,原本打算毕业后进入医学院继续深造,不想受两名同学邀请加入一个算牌系统小组——“麻省理工21点小组”。
事实上,早在1979年,麻省理工学院就出现了一个名叫“非赌不可怎么赌”的迷你课程,让精通数学的学生彼此切磋玩“21点”与算牌的技巧。
21点目录玩法规则游戏术语符号游戏起源时间设置编辑本段玩法规则21点一般用到1-8副牌。
庄家给每个玩家发两张牌,牌面朝下;给自己发两张牌,一张牌面朝上(叫明牌),一张牌面朝下(叫暗牌)。
大家手中扑克点数的计算是:K、Q、J 和 10 牌都算作 10 点。
A 牌既可算作1 点也可算作11 点,由玩家自己决定。
其余所有2 至9 牌均按其原面值计算。
首先玩家开始要牌,如果玩家拿到的前两张牌是一张 A 和一张10点牌,就拥有黑杰克(Blackjack);此时,如果庄家没有黑杰克,玩家就能赢得2倍的赌金(1赔2)。
没有黑杰克的玩家可以继续拿牌,可以随意要多少张。
目的是尽量往21点靠,靠得越近越好,最好就是21点了。
在要牌的过程中,如果所有的牌加起来超过21点,玩家就输了——叫爆掉(Bust),游戏也就结束了。
假如玩家没爆掉,又决定不再要牌了,这时庄家就把他的那张暗牌打开来。
庄家根据自己的情况拿牌,一般到17点或17点以上不再拿牌,但也有可能15到16点甚至12到13点就不再拿牌或者18到19点继续拿牌。
假如庄家爆掉了,那他就输了。
假如他没爆掉,那么你就与他比点数大小,大为赢。
一样的点数为平手,你可以把你的赌注拿回来。
如果拿牌拿到手中有5张牌,并且总数不到21点,那这种情况能压住一切牌型(当然5张加起来一共21点更好),但某些玩法中不支持此规则。
编辑本段游戏术语二十一点术语:花牌(K、Q、J)和10都计算为 10点。
A牌可作 1或 11点计。
其它牌则按照牌面上的点数计算。
黑杰克:一手牌内两张牌的点数相加合共达 21点(如A牌和一张花牌或10点牌)。
拿牌(HIT) :再拿一张牌。
玩家(包括闲家和庄家)只要手上牌相加点数不超过21点都可要牌。
停牌(STAND) :不再拿牌。
在任何情况下,玩家可选择停止要牌。
分牌(SPLIT):玩家再下一注与原赌注相等的赌金,并将前两张牌分为两副单独的牌。
这两张牌的点数必须相同(即一对8、一对K 或一对Q,某些玩法中两张10点的牌如一张10一张Q时也可分牌)。
二十一点规则引言:二十一点(Blackjack),也被称为“21点”,是一种非常流行的纸牌游戏,通常由一至六副扑克牌进行。
在这个游戏中,玩家的目标是尽可能接近但不超过21点,同时要打败庄家。
二十一点规则虽然简单易学,但是需要玩家掌握一定的策略和技巧,才能提高胜算。
一、基本规则:1. 二十一点的牌面点数规则如下:Ace(A)的点数可以是1点或11点;2-10的点数按牌面上的数值计算;J、Q、K的点数都为10点。
2. 游戏开始时,玩家和庄家将分别发两张牌。
玩家所有的牌都是面向上的,而庄家的一张牌则是面向上的,另一张牌是面向下的。
3. 玩家可以选择“要牌”(Hit),即向庄家要求发一张额外的牌,以增加自己的牌面点数。
玩家可以任意次数的要牌,直到决定停止。
4. 玩家也可以选择“停牌”(Stand),即停止要牌,并进入庄家的回合。
5. 当玩家的牌面点数超过21点时,即为“爆牌”(Bust),玩家将直接判负。
6. 庄家的回合:庄家会根据规定的策略继续要牌或停牌。
通常情况下,庄家在手中的牌面点数低于17点时会要牌,超过17点时则停牌。
7. 当玩家停牌后,庄家会将自己未亮出的牌翻开,进行点数比较。
点数更接近21点的一方获胜,如果点数相同,则判定为平局。
二、特殊情况:1. “黑杰克”(Blackjack):当玩家拿到一张A和一张10点牌(包括J、Q、K)时,即为“黑杰克”或“天才”,此时玩家直接获胜。
2. “分牌”(Split):当玩家手中的两张牌点数相同时,可以选择将其分为两个独立的手牌,并继续游戏。
这需要玩家再下注一次,并将每张牌的点数作为新手牌的起始点数。
3. “加倍下注”(Double Down):玩家在初始两张牌面向上时,可以选择加倍下注。
玩家将下注金额加倍,并且必须要求庄家发给他一张额外牌。
这之后,玩家将不能再要牌,直接进入庄家的回合。
4. “保险”(Insurance):当庄家的明牌是A时,玩家可以选择购买保险。
纸牌游戏21点摘要大多数赌场使用6副牌或8副牌玩这种游戏,以防止“数牌点”,在你的模拟中使用两副牌(共104张)。
只有2位参与者,你和庄家。
游戏开始时每人得到两张牌,对于牌面为2~10的牌,点数和面数相同;对于为人脸(J、Q、K)的牌,点数为10;牌面为A的牌,点数为1或者11.游戏的目的是得到总数尽量接近21点的牌,不得超过(超过称“爆了”),并使你得到的总点数多于庄家。
在21 点游戏的赌桌前,往往一套牌(由四到六副组成)在用掉一半左右之后,才会换一副洗过的新牌。
这一规则使得21 点游戏中有了“算牌”的机会,玩家可以记住前面几局中哪些牌已经打出,哪些牌还留在剩下的牌里。
因此在21 点游戏中,玩家并不只是听天由命,可以主动做出很多决定。
比如,手里有一张10,一张5,是否继续要牌呢?最后获胜的概率各是多少呢?这要受很多变数影响。
除了刚刚提到的算牌(正在使用的这一套扑克牌打出哪些牌,还剩哪些牌)以外,还要考虑到目前其他玩家手里都有什么牌,做出这个选择后其他玩家怎样回应……这个概率的计算很复杂,不像骰子、轮盘那样直接容易。
我们可以在电脑上使用一种名为“蒙特卡洛模拟”的方法来帮助我们。
在进行21点的纸牌游戏过程中玩家总是受到各种因素的影响,因此,我们所得到的模型以及模型得到的结果都是一个平均的趋势,不能用来说明玩家的真正得分,不能确定玩家每一次的得分。
关键词:纸牌游戏21点、蒙特卡洛模拟一、问题重述纸牌游戏21点(Blackjack).构造并实施21点游戏的蒙特卡洛模拟。
21点游戏规则如下:大多数赌场使用6副牌或8副牌玩这种游戏,以防止“数牌点”,在你的模拟中使用两副牌(共104张)。
只有2位参与者,你和庄家。
游戏开始时每人得到两张牌,对于牌面为2~10的牌,点数和面数相同;对于为人脸(J、Q、K)的牌,点数为10;牌面为A的牌,点数为1或者11.游戏的目的是得到总数尽量接近21点的牌,不得超过(超过称“爆了”),并使你得到的总点数多于庄家。
21点游戏package 二十一点游戏;import java.awt.Dimension;import java.awt.Rectangle;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.V ector;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;public class CardFrame extends JFrame implements ActionListener{ /*** @author 21点游戏*/private static final long serialV ersionUID = 1L;JMenuBar menuBar; //定义菜单栏JMenu fileMenu; //定义文件菜单JMenu helpMenu;JMenuItem exitItem; //定义退出菜单项JMenuItem aboutItem;//显示牌区JLabel label1=new JLabel();JLabel label2=new JLabel();JLabel label3=new JLabel();JLabel label4=new JLabel();JLabel label5=new JLabel();JLabel label6=new JLabel();JLabel label7=new JLabel();JLabel player=new JLabel();JLabel computer=new JLabel();//用于放置52张纸牌图片的标签框JLabel game[]=new JLabel[52];//定于纸牌管理对象CardManager18 cm18=new CardManager18();//记录抓牌数int count=0;//定义电脑点数int computer_dot=0;//定义玩家点数int game_dot=0;//存储电脑抓的纸牌V ector<Card18> v18=new V ector<Card18>();//洗牌按钮JButton button1;//开始游戏按钮JButton button2;//玩家抓牌按钮JButton button3;//游戏结束按钮JButton button4;int player_int; //玩家积分int computer_int; //电脑积分public CardFrame(){getContentPane().setLayout(null);menuBar=new JMenuBar();fileMenu=new JMenu("文件");helpMenu=new JMenu("帮助");exitItem=new JMenuItem("退出");aboutItem=new JMenuItem("关于");button1=new JButton("洗牌");//设置按钮在窗口中的位置button1.setBounds(new Rectangle(80,388,90,31));//设置按钮的可编辑性button1.setEnabled(true);//为按钮添加事件监听button1.addActionListener(this);button2=new JButton("开始游戏");button2.setBounds(new Rectangle(263,388,90,31));button2.setEnabled(false);button2.addActionListener(this);button3=new JButton("玩家抓牌");button3.setBounds(new Rectangle(433,388,90,31));button3.setEnabled(false);button3.addActionListener(this);button4=new JButton("本轮结果");button4.setBounds(new Rectangle(630,388,90,31));button4.setEnabled(false);button4.addActionListener(this);label1.setText("电脑显示牌区");label1.setBounds(new Rectangle(104,330,95,38));label2.setText("玩家显示牌区");label2.setBounds(new Rectangle(604,330,95,38));//积分统计区label3.setText(" 积分统计区");label3.setBounds(new Rectangle(330,170,120,15));player.setText("玩家积分:"+"0 分");player.setBounds(new Rectangle(330,215,150,15));computer.setText("电脑积分:"+"0 分");computer.setBounds(new Rectangle(330,260,150,15));//游戏规则区label4.setText(" 游戏规则");label4.setBounds(new Rectangle(685,0,100,15));label5.setText("赢: 3 分");label5.setBounds(new Rectangle(685,15,100,15));label6.setText("平局: 1 分");label6.setBounds(new Rectangle(685,30,100,15));label7.setText("输:0 分");label7.setBounds(new Rectangle(685,45,100,15));menuBar.add(fileMenu); //添加菜单到菜单栏中menuBar.add(helpMenu);fileMenu.add(exitItem); //添加菜单项到菜单中helpMenu.add(aboutItem);exitItem.addActionListener(new MenuListerner()); //添加文件菜单的监听器aboutItem.addActionListener(new AboutListerner());this.setTitle("二十一点游戏");this.setResizable(false);this.setJMenuBar(menuBar); //添加菜单栏到窗口中this.setSize(800, 500); //设置窗口大小//把按钮添加进窗口中this.getContentPane().add(label1);this.getContentPane().add(label2);this.getContentPane().add(label3);this.getContentPane().add(label4);this.getContentPane().add(label5);this.getContentPane().add(label6);this.getContentPane().add(label7);this.getContentPane().add(player);this.getContentPane().add(computer);this.getContentPane().add(button1);this.getContentPane().add(button2);this.getContentPane().add(button3);this.getContentPane().add(button4);//获得屏幕的宽和高Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获得当前窗体的宽和高Dimension frameSize = this.getSize();//设置窗体居中if (frameSize.height > screenSize.height) {frameSize.height = screenSize.height;}if (frameSize.width > screenSize.width) {frameSize.width = screenSize.width;}this.setLocation((screenSize.width - frameSize.width) / 2,(screenSize.height - frameSize.height) / 2);//设置窗口可见this.setV isible(true);}//菜单监听器private class MenuListerner implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {System.exit(0);}}//关于监听器private class AboutListerner implements ActionListener{@Overridepublic void actionPerformed(ActionEvent e) {new AboutFrame();}}public static void main(String args[]){new CardFrame();}@Overridepublic void actionPerformed(ActionEvent e) {//洗牌if(e.getSource()==button1){//关闭洗牌按钮,开启开始游戏按钮button2.setEnabled(true);button1.setEnabled(false);//对计数器、电脑点数、玩家点数等的初始化count=0;computer_dot=0;game_dot=0;v18.clear();//把标签框控件数组放入窗体的窗格中cm18.gameStart(game, this.getContentPane());//初始化一副牌cm18.initCard();//随机打乱这副牌cm18.randomCard();}//开始游戏if(e.getSource()==button2){//关闭开始游戏按钮,开启玩家抓牌按钮button3.setEnabled(true);button2.setEnabled(false);//电脑抓牌for(;;){game[count].setIcon(new ImageIcon("images/rear.gif"));game[count].setBounds(new Rectangle(50+count*20,200,71,96));getContentPane().setComponentZOrder(game[count], 1);//设置电脑的第一张牌为正面显示if(count==0){game[count].setIcon(new ImageIcon("images/" + cm18.card18[count].getSuit() +"-" +cm18.card18[count].getV alue() + ".gif"));game[count].setBounds(new Rectangle(50+count*20,200,71,96));this.getContentPane().setComponentZOrder(game[count], 1);}//将牌J Q K的面值设为10点if(cm18.card18[count].getV alue()>10){computer_dot=computer_dot+10;}else{computer_dot=computer_dot+cm18.card18[count].getV alue();}v18.add(cm18.card18[count]);getContentPane().repaint();count+=1;//如果面值总数大于18则停止抓牌if(computer_dot>=18){return;}}}//玩家抓牌按钮if(e.getSource()==button3){//提示玩家if(game_dot>=15){int a=JOptionPane.showConfirmDialog(null, "现在点数为"+game_dot+"是否再抓牌","提示",JOptionPane.YES_NO_OPTION);if(a==JOptionPane.NO_OPTION){button3.setEnabled(false);button4.setEnabled(true);return;}}//设置标签框显示抓到的纸牌game[count].setIcon(new ImageIcon("images/"+cm18.card18[count].getSuit()+"-"+cm18.card18[count].getV alue()+".gif"));game[count].setBounds(new Rectangle(450+count*20,200,71,96));this.getContentPane().setComponentZOrder(game[count], 1);//计算抓到纸牌的面值if(cm18.card18[count].getV alue()>10){game_dot=game_dot+10;}else{game_dot=game_dot+cm18.card18[count].getV alue();}//记录抓到的牌数count+=1;//面值大于21停止抓牌,关闭玩家抓牌按钮,开启本轮结果按钮if(game_dot>21){button3.setEnabled(false);button4.setEnabled(true);return;}}//本轮结果按钮if(e.getSource()==button4){//把电脑的纸牌翻过来for(int i=0;i<v18.size();i++){Card18 card18=(Card18)v18.get(i);game[i].setIcon(new ImageIcon("images/"+card18.getSuit()+"-"+card18.getV alue()+".gif"));game[i].setBounds(new Rectangle(50+i*20,200,71,96));this.getContentPane().setComponentZOrder(game[i], 1);}//计算胜负String game_over="";if(game_dot>21&&computer_dot<=21){game_over="电脑获胜";computer_int+=3;}else if(game_dot<=21&&computer_dot>21){game_over="玩家获胜";player_int+=3;}else if(game_dot>=21&&computer_dot>=21){game_over="平局";player_int+=1;computer_int+=1;}else if(game_dot>computer_dot){game_over="玩家获胜";player_int+=3;}else if(game_dot<computer_dot){game_over="电脑获胜";computer_int+=3;}else if(game_dot==computer_dot){game_over="平局";player_int+=1;computer_int+=1;}//以对话框的方式显示胜负String message="游戏结果\n";message+="电脑点数:"+String.valueOf(computer_dot)+"\n";message+="玩家点数:"+String.valueOf(game_dot)+"\n";message+="游戏结果:"+game_over;JOptionPane.showMessageDialog(null, message,"本轮游戏结果",RMA TION_MESSAGE);//显示积分player.setText("玩家积分:"+player_int+" 分");computer.setText("电脑积分:"+computer_int+" 分");//设置命令按钮可操作button1.setEnabled(true);button2.setEnabled(false);button3.setEnabled(false);button4.setEnabled(false);}}}package 二十一点游戏;public class Card18 {private int suit=0;private int value=0;Card18(int suit,int value){this.suit=suit;this.value=value;}public int getSuit() {return suit;}public void setSuit(int suit) {this.suit = suit;}public int getV alue() {return value;}public void setV alue(int value) {this.value = value;}}package 二十一点游戏;import java.awt.Container;import java.awt.Rectangle;import javax.swing.ImageIcon;import javax.swing.JLabel;public class CardManager18 {public Card18[] card18 =new Card18[52];//初始化牌public void initCard(){for(int i=1;i<=4;i++){for(int j=1;j<=13;j++){card18[(i-1)*13+j-1]=new Card18(i,j);}}}//随机洗牌public void randomCard(){Card18 temp=null;for(int i=0;i<=52;i++){int a=(int)(Math.random()*52);int b=(int)(Math.random()*52);temp=card18[a];card18[a]=card18[b];card18[b]=temp;}}//发牌public void gameStart(JLabel game[],Container c18){//在容器中删除标签组件if(game[0]!=null){for(int i=0;i<52;i++){c18.remove(game[i]);}c18.repaint();}//在容器中放置52个标签组件用于盛放图片for(int i=0;i<52;i++){game[i]=new JLabel();game[i].setBorder(javax.swing.BorderFactory.createEtchedBorder(javax.swing.border.EtchedBorder.RAISED));game[i].setBounds(new Rectangle(100+i*10,59,71,96));c18.add(game[i]);}//设置标签组件的图片为rear.gif,即牌的背面for(int i=0;i<52;i++){game[i].setIcon(new ImageIcon("images/rear.gif"));}}}package 二十一点游戏;import java.awt.Dimension;import java.awt.Rectangle;import java.awt.Toolkit;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JTextArea;public class AboutFrame extends JFrame{/****/private static final long serialV ersionUID = 1L;JLabel jLabel1 = new JLabel();JLabel jLabel2 = new JLabel();JTextArea ta1 = new JTextArea();JTextArea ta2 = new JTextArea();public AboutFrame(){getContentPane().setLayout(null);jLabel1.setText("游戏规则");jLabel2.setText("声明");jLabel1.setBounds(27, 0, 97, 36);jLabel2.setBounds(26, 176, 80, 27);ta2.setEditable(false);ta2.setLineWrap(true);ta2.setBounds(26, 207, 398, 63);ta1.setColumns(40);ta1.setLineWrap(true);this.setTitle("关于");this.getContentPane().add(jLabel1);this.getContentPane().add(jLabel2);this.getContentPane().add(ta1);this.getContentPane().add(ta2);ta1.setEditable(false);ta1.setText("电脑先抓牌,玩家后抓牌。