JAVA课程设计21点扑克牌(2)

2018-12-27 18:07

邸伟:基于JAVA的21点设计

第三章 本次设计的重点及难点

向玩家发额外的 牌并显示牌和总分 向电脑发额外的 牌并显示牌和总分 玩家引 爆? Y N 玩家赢 平局

- 6 -

玩家输 洗牌 给玩家发最初的三张牌,并显示出来 给电脑发最初的三张牌 并显示牌和总分 Y 玩家需要额外的牌? N 显示电脑的牌 Y 电脑需要额外的牌? N Y 电脑引爆? N Y N 玩家引爆? 玩家总分>电脑? 玩家赢 玩家输 图3.1 21点流程图

邸伟:基于JAVA的21点设计

游戏胜负的判别方法: 本方法考虑了鬼牌的因素,由于所用到的扑克牌为54张,将他们存放在数组,且通过数组的下标来保证牌的唯一。由于数组中的计数方式是从0开始的,所以第0--12号为13张1组牌,12-25号为下一组.....以此类推,共4组到51号牌,所以第52号和53号及为鬼牌,且他们的作用是一样的。

int judge(int[] a,int[] b,int num){//判断电脑和玩家谁的点数更接近21,如果有鬼牌就另行判断

int sum_a=0,sum_b=0;

boolean joker_a=false,joker_b=false; for(int i=0;i

if(a[i]==14||a[i]==15)joker_a=true;

else sum_a+=a[i];

if(b[i]==14||b[i]==15)joker_b=true; else sum_b+=b[i]; }

if(joker_a)if(sum_a<8)sum_a+=13;//鬼牌可以任意1-13 else if(sum_a<21)sum_a=21;

if(joker_b)if(sum_b<8)sum_b+=13; else if(sum_b<21)sum_b=21;

if(sum_a>21&&sum_b<=21)return -1; if(sum_a<=21&&sum_b>21)return 1;

if(Math.abs(sum_a-21)

else if(Math.abs(sum_a-21)==Math.abs(sum_b-21)) return 0;

else //if(Math.abs(sum_a-21)>Math.abs(sum_b-21)) return -1; } }

if(judge(human,computer,n)==1) System.out.println(\你赢了!\ else if(judge(human,computer,n)==0)

System.out.println(\平局!\

else if(judge(human,computer,n)==-1) System.out.println(\你输了!\

System.out.println(\

- 7 -

邸伟:基于JAVA的21点设计

当玩家抽到鬼牌时,鬼牌可以顶替1-13任意大小的牌,抽到鬼牌时的判别方法为,鬼牌存在,并且其余牌总和小于8,那么现在加上13就是总和,如果除了鬼牌其余牌大于8小于21,那么总和就是21,电脑和人判断方法一样。最后判断大小,通过返回1,0,-1,分别表示人赢,平局,电脑赢;如:人的大于21并且电脑小于等于21,则返回-1,那么电脑赢,否则返回1,即表示人嬴;当人和电脑的牌都大于21时,通过将人和电脑的牌都减去21取绝对值的方法,然后比较得到的值,如果人得到的值小则返回 1,即人赢;相等则返回0,即平局;电脑的值小则返回-1,即电脑赢。

递归法的使用: 本方法为了避免牌的重复而使用了递归法,其中的程序为: int nextOne(){//用递归确保返回的牌没有重复

int n=(int)(Math.random()*54);//通过随机的方法产生数

if(cards[n]==0){//如果产生的那个数字曾经没有用过那么就用,否则重新产生 cards[n]=1;//用过的赋值为1 if(n==52)//如果n的值为52 return 14;//返回的值为14

else if(n==53)//如果n的值为53 return 15;//返回的值为15

else return n+1;//这个数对13取模然后加1就是产生的牌 }

else return nextOne();//重新随机产生 } 所有牌的被定义在包含54个元素,且所有元素为0的数组中,即所有的牌的都通过数组的下标n表示,且在数组中代表的元素被赋值为0,当这张牌被使用时,通过元素的下标,将此位置的元素从0改为1。在调用本方法时,首先 通过方法int n=(int)(Math.random()*54)获得元素的下标n,然后通过if(cards[n]==0)判断,如果该位置的元素为0,则这个n代表的牌没有使用过的的,将它在数组所指的牌从0赋值为1后,将这个牌的下标取模后返回;否则,这张牌是被使用过的, 通过 return nextOne(); 返回到本方法的开始位置,重新执行一遍本方法,直到随机出的n所代表的牌,没有被使用过的牌 ,然后将n代表的牌返回后跳出本方法,继续程序的运行。

- 8 -

邸伟:基于JAVA的21点设计 表3.1 程序中方法和类的说明

类名 Play21 Play21 Play21 Play21 Play21 Play21 Test

方法名 Start() Clear() Show() Ask() Nextone() Judge() Main() 始游戏 描述 游戏开始 数组清零开始计数 显示玩家或电脑的牌 询问玩家或电脑是否要牌 通过迭代的方式获得牌 对比玩家和电脑的牌的大小 程序的入口方法,通过这里开

- 9 -

邸伟:基于JAVA的21点设计

第四章 程序的图形结果及分析

程序分析

本程序没有采用传统的21点的52张牌的规则,而是采用了54张牌全用的方法,大小鬼牌也带了进去,但鬼牌可以表示1-13的任意大小具体情况可有玩家自己决定,当玩家手里牌的总分小于等于8时,若抽到鬼牌可以顶替13,当玩家手中的牌大于8时,鬼牌可以成为任意一个,并且大小鬼牌作用相同。在游戏中为了防止抽到重复的牌而采用了将牌存放在数组中,把没用过的牌在数组中赋值为0.用过的牌赋值为1,且通过递归方法来更好的避免了牌的重复。即所有牌的被定义在包含54个元素,且所有元素为0的数组中,即所有的牌的都通过数组的下标n表示,且在数组中代表的元素被赋值为0,当这张牌被使用时,通过元素的下标,将此位置的元素从0改为1。在调用本方法时,首先 通过方法int n=(int)(Math.random()*54)获得元素的下标n,然后通过if(cards[n]==0)判断,如果该位置的元素为0,则这个n代表的牌没有使用过的的,将它在数组所指的牌从0赋值为1后,将这个牌的下标取模后返回;否则,这张牌是被使用过的, 通过 return nextOne(); 返回到本方法的开始位置,重新执行一遍本方法,直到随机出的n所代表的牌,没有被使用过的牌 ,然后将n代表的牌返回后跳出本方法,继续程序的运行。本程序也运用了比较简单的数组结构。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。一个数组中的所有元素具有相同的数据类型。当然,当数据类型为 Variant 时,各个元素能够包含不同种类的数据(对象、 字符串 、数值等等)。

10 - -


JAVA课程设计21点扑克牌(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新SQL——SERVER实验练习答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: