JAVA课程设计21点扑克牌.docx
《JAVA课程设计21点扑克牌.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计21点扑克牌.docx(3页珍藏版)》请在冰豆网上搜索。
![JAVA课程设计21点扑克牌.docx](https://file1.bdocx.com/fileroot1/2022-10/13/a40801d2-e7a8-47fe-8579-be1113c9fd19/a40801d2-e7a8-47fe-8579-be1113c9fd191.gif)
JAVA课程设计21点扑克牌
JAVA课程设计21点扑克牌
通信专业课程设计一 太原科技大学 课程设计 设计(论文)题目:
基于JAVA的21点扑克牌 姓 名 学 号 班 级 学 院 指导教师 2011年12月23日 太原科技大学课程设计任务书 学院:
时间:
2011年月日 学生姓名设计题目指导教师基于JAVA的21点扑克牌游戏设计语言的初级编程。
主要研究内容语言的21点扑克牌的编程及设计。
平台软件eclipse的使用。
研究方法使用软件eclipse对21点游戏进行编程,设计游戏算法,实现游戏功能。
主要技术指标(或研究目标) 1.21点游戏的基本功能的实现。
2.程序中胜负的判别方法。
3.递归法的理解与使用。
教研室意见教研室签字:
年 月 日 邸伟:
基于JAVA的21点设计 目录 第一章绪论.............................................................-4-JAVA工作平台的简介.................................................-4-本次设计的主要内容.................................................-4-第二章设计任务的分析..................................................-5- 二十一点游戏介绍..................................................-5- 实现以下功能:
....................................................-5-第四章程序的图形结果及分析............................................-10-第五章小结...........................................................-16-
邸伟:
基于JAVA的21点设计 第三章本次设计的重点及难点 向玩家发额外的牌并显示牌和总分 向电脑发额外的牌并显示牌和总分 玩家引爆?
YN玩家赢平局 -6- 玩家输洗牌给玩家发最初的三张牌,并显示出来给电脑发最初的三张牌并显示牌和总分Y玩家需要额外的牌?
N显示电脑的牌Y电脑需要额外的牌?
NY电脑引爆?
NYN玩家引爆?
玩家总分>电脑?
玩家赢玩家输图21点流程图 邸伟:
基于JAVA的21点设计 游戏胜负的判别方法:
本方法考虑了鬼牌的因素,于所用到的扑克牌为54张,将他们存放在数组,且通过数组的下标来保证牌的唯一。
于数组中的计数方式是从0开始的,所以第0--12号为13张1组牌,12-25号为下一组.....以此类推,共4组到51号牌,所以第52号和53号及为鬼牌,且他们的作用是一样的。
intjudge(inta,intb,intnum){//判断电脑和玩家谁的点数更接近21,如果有鬼牌就另行判断 intsum_a=0,sum_b=0; booleanjoker_a=false,joker_b=false;for(inti=0;i if(a[i]==14||a[i]==15)joker_a=true; elsesum_a+=a[i]; if(b[i]==14||b[i]==15)joker_b=true; elsesum_b+=b[i];} if(joker_a)if(sum_a if(joker_b)if(sum_b if(sum_a>21&&sum_b21)return1; if((sum_a-21) elseif((sum_a-21)==(sum_b-21)) return0; else//if((sum_a-21)>(sum_b-21)) return-1;}} if(judge(human,computer,n)==1) (\你赢了!
\elseif(judge(human,computer,n)==0) (\平局!
\ elseif(judge(human,computer,n)==-1) (\你输了!
\ (\ -7- 邸伟:
基于JAVA的21点设计 当玩家抽到鬼牌时,鬼牌可以顶替1-13任意大小的牌,抽到鬼牌时的判别方法为,鬼牌存在,并且其余牌总和小于8,那么现在加上13就是总和,如果除了鬼牌其余牌大于8小于21,那么总和就是21,电脑和人判断方法一样。
最后判断大小,通过返回1,0,-1,分别表示人赢,平局,电脑赢;如:
人的大于21并且电脑小于等于21,则返回-1,那么电脑赢,否则返回1,即表示人嬴;当人和电脑的牌都大于21时,通过将人和电脑的牌都减去21取绝对值的方法,然后比较得到的值,如果人得到的值小则返回1,即人赢;相等则返回0,即平局;电脑的值小则返回-1,即电脑赢。
递归法的使用:
本方法为了避免牌的重复而使用了递归法,其中的程序为:
intnextOne(){//用递归确保返回的牌没有重复 intn=(int)(()*54);//通过随机的方法产生数 if(cards[n]==0){//如果产生的那个数字曾经没有用过那么就用,否则重新产生cards[n]=1;//用过的赋值为1if(n==52)//如果n的值为52return14;//返回的值为14 elseif(n==53)//如果n的值为53return15;//返回的值为15 elsereturnn_+1;//这个数对13取模然后加1就是产生的牌 } elsereturnnextOne();//重新随机产生 }所有牌的被定义在包含54个元素,且所有元素为0的数组中,即所有的牌的都通过数组的下标n表示,且在数组中代表的元素被赋值为0,当这张牌被使用时,通过元素的下标,将此位置的元素从0改为1。
在调用本方法时,首先通过方法intn=(int)(()*54)获得元素的下标n,然后通过if(cards[n]==0)判断,如果该位置的元素为0,则这个n代表的牌没有使用过的的,将它在数组所指的牌从0赋值为1后,将这个牌的下标取模后返回;否则,这张牌是被使用过的,通过returnnextOne();返回到本方法的开始位置,重新执行一遍本方法,直到随机出的n所代表的牌,没有被使用过的牌,然后将n代表的牌返回后跳出本方法,继续程序的运行。
-8- 邸伟:
基于JAVA的21点设计表程序中方法和类的说明 类名Play21Play21Play21Play21Play21Play21Test 方法名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。
在调用本方法时,首先通过方法intn=(int)(()*54)获得元素的下标n,然后通过if(cards[n]==0)判断,如果该位置的元素为0,则这个n代表的牌没有使用过的的,将它在数组所指的牌从0赋值为1后,将这个牌的下标取模后返回;否则,这张牌是被使用过的,通过returnnextOne();返回到本方法的开始位置,重新执行一遍本方法,直到随机出的n所代表的牌,没有被使用过的牌,然后将n代表的牌返回后跳出本方法,继续程序的运行。
本程序也运用了比较简单的数组结构。
数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。
这些按序排列的同类数据元素的集合称为数组。
数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
一个数组中的所有元素具有相同的数据类型。
当然,当数据类型为Variant时,各个元素能够包含不同种类的数据。
10--
邸伟:
基于JAVA的21点设计 图程序运行结果 图程序运行结果 11-- 邸伟:
基于JAVA的21点设计 程序中的部分注释:
1.publicvoidstart(){//开始游戏 (\ (\开始游戏!
\ intn=3; for(inti=0;i computer[i]=nextOne(); human[i]=nextOne(); } while(n show(human,n,1);//显示现在玩家的牌面 if(ask(human,n)){//如果玩家要牌computer[n]=nextOne();//电脑获得一张牌 human[n]=nextOne();//玩家获得一张牌 n++;//n的值自动加1} elsebreak;////如果不选择加牌则跳出本循环} 12-- 邸伟:
基于JAVA的21点设计 2.intnextOne(){//用递归确保返回的牌没有重复 intn=(int)(()*54);//通过随机的方法产生数 if(cards[n]==0){//如果产生的那个数字曾经没有用过那么就用,否则重新产生 cards[n]=1;//用过的赋值为1 if(n==52)//如果n的值为52 return14;//返回的值为14 elseif(n==53)//如果n的值为53 return15;//返回的值为15 elsereturnn_+1;//这个数对13取模然后加1就是产生的牌,正常情况下,除13后剩下的牌就是牌的值 但数组是从0开始计数的所以加10--12为13张1组牌,12-25下一组...以此类推,共4组到51号牌} elsereturnnextOne();//重新随机产生} 13-- 邸伟:
基于JAVA的21点设计 3.intjudge(inta,intb,intnum){//判断电脑和玩家谁的点数更接近21,如果有鬼牌就另行判断 intsum_a=0,sum_b=0;//设置两个变量为了计数 booleanjoker_a=false,joker_b=fals