当前位置:文档之家› JAVA编程~~21点游戏源代码

JAVA编程~~21点游戏源代码

学号********天津城建大学Java 语言程序设计C实验报告实验1:21点游戏学生姓名杨弘毅班级卓越七班实验一21点游戏一、实验目的1.掌握使用Java语言进行结构化程序设计;2.熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。

3.熟悉Eclipse开发环境,编写简单的Application程序,并编译和执行。

二、实验要求1.调试程序、编译,运行后得到正确的结果;2.写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。

三、实验环境1.计算机一台;2.JDK、MyEclipse工具软件。

四、实验内容编写并运行21点游戏。

具有菜单形式的界面掌握Random类基本用法设计胜负判定算法五、实验步骤1.了解21点游戏的基本规则2.用0到53代表52张扑克牌3.完成洗牌发牌模块4.设计胜负判定算法源程序:package a;import java.util.Scanner;import java.util.Arrays;public class Play21 {int[] cards,computer,human;//定义一副54张牌,电脑5张,玩家5张Scanner sr=new Scanner(System.in);public Play21(){//构造方法cards=new int[54];//定义54个大小的数组表示扑克牌Arrays.fill(cards,0);//54张牌全赋值零,一旦某一张牌被用了就赋1 computer=new int[5];//电脑5张牌Arrays.fill(computer,0);human=new int[5];//人5张牌Arrays.fill(human,0);}public void clear(){//使数组内所有数据赋值0没有用过,用过的赋值1 Arrays.fill(cards,0);Arrays.fill(computer,0);Arrays.fill(human,0);}public void start(){//开始游戏System.out.println("-------------------------------------");System.out.println("开始游戏!");int n=1;for(int i=0;i<1;i++){//电脑和玩家先各抽1张computer[i]=nextOne();human[i]=nextOne();}while(n<5){//牌数小于5时询问是否再要牌show(human,n,1);//显示现在玩家的牌面if(ask(human,n)){computer[n]=nextOne();human[n]=nextOne();n++;}else break;}show(human,n,1);show(computer,n,0);if(judge(human,computer,n)==1)System.out.println("\n你赢了!");else if(judge(human,computer,n)==0)System.out.println("\n平局!");else if(judge(human,computer,n)==-1)System.out.println("\n你输了!");System.out.println("------------------------------------");}void show(int[] a,int num,int c){//显示牌面,如果c是1显示的是玩家的牌面,c是0显示的是电脑的牌面,num就是第几轮if(c==1)System.out.println("\n"+(num-2)+":你现在的牌是:");else System.out.println("\n"+(num-2)+":电脑现在的牌是:");for(int i=0;i<num;i++){//以此把牌都显示出来,如果是1就是A、11就是J、12就是Q、13就是K、14就是小鬼、15就是大鬼if(a[i]==1){System.out.print("A ");continue;}if(a[i]==11){System.out.print("J ");continue;}if(a[i]==12){System.out.print("Q ");continue;}if(a[i]==13){System.out.print("K ");continue;}if(a[i]==14){System.out.print("小鬼");continue;}if(a[i]==15){System.out.print("大鬼");continue;}System.out.print(a[i]+" ");//以空格为分割以次打印}}boolean ask(int[] a,int num){System.out.println("\n还抽一张?Y/N");String ch=sr.nextLine();if(!ch.equals("n")&&!ch.equals("N"))return true;else return false;}int nextOne(){//用递归确保返回的牌没有重复int n=(int)(Math.random()*54);//通过随机的方法产生数if(cards[n]==0){//如果产生的那个数字曾经没有用过那么就用,否则重新产生cards[n]=1;//用过的赋值为1if(n==52)return 14;else if(n==53)return 15;else return n%13+1;//这个数对13取模然后加1就是产生的牌}else return nextOne();//重新随机产生}int judge(int[] a,int[] b,int num){//判断电脑和玩家谁的点数更接近21,如果有鬼牌就另行判断int sum_a=0,sum_b=0;//设置两个变量为了计数boolean joker_a=false,joker_b=false;//分别代表人和电脑是否有鬼牌,true代表有for(int i=0;i<num;i++){//这里把电脑和人的牌总和加起来,如果有鬼牌就把joker_a或joker_b设为true,再进一步判断if(a[i]==14||a[i]==15)joker_a=true;//14为小鬼、15为大鬼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,如果鬼牌存在,并且其余牌总和小于8,那么现在加上13就是总和else if(sum_a<21)sum_a=21;//如果除了鬼牌其余牌大于8小于21,那么总和就是21if(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;//最后判断大小,如果人的大于21并且电脑小于等于21那么电脑赢if(sum_a<=21&&sum_b>21)return 1;//否则人赢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;//否则电脑赢}}主函数:package a;import java.util.Scanner;public class Test1 {public static void main (String[] args) {Play21 p=new Play21();//创建一个对象Scanner sr=new Scanner(System.in);//再控制台输入String ch="y";//定义一个字符while(true){//循环p.start();//调用start方法System.out.println("再来一局?Y/N");ch=sr.nextLine();//再控制台输入y或者nif(!ch.equals("n")&&!ch.equals("N"))//判断如果不是n或者N的话就重新玩,否则游戏结束p.clear();//调用clear方法,把所有牌都标记为0就是没用过else break;}}}实验结果:。

相关主题