java21点游戏论文

合集下载

软件综合实验报告_21点游戏

软件综合实验报告_21点游戏

综合实验报告( 2008-- 2009年度第1学期)实验名称:软件综合实验题目:21点游戏院系:计算机科学与技术系班级:计算0701班组长学号:1071220103组长姓名:丁炳淼指导教师:石敏设计周数: 2 周成绩:日期:2009年1月9日一、综合实验的目的与要求㈠实验目的:掌握用图解决实际问题的方法。

培养综合运用已经学过的程序设计知识,针对实际问题建立相应的数据模型的能力。

综合运用所学过的知识分析实际问题和解决问题的能力,熟练掌握一种开发平台并编写出高效、完整的实用程序。

进一步提高编程能力。

㈡实验要求:图形用户界面包含一个含“开始”、“要牌”、“结束”三个按钮和分别代表“当前分数”和“历史最高分数”的两个标签的Panel对象,以及一个使用CardLayout布局策略的Panel对象,设其中叠放了一幅52张的扑克牌(有“红心”、“黑桃”、“草花”、“方片”四种花色,每种花色有A到K共13张牌)。

当用户点击“开始”按钮时,当前分数清零,“要牌”按钮被激活;当用户点击“要牌”按钮时,计算机在52张牌中随机跳出一张显示给用户,并将其分数添加在“当前分数”的标签中显示出来;如果当前分数超过21,则用户输掉了一局,“要牌”按钮变灰,用户不能再要牌;如果用户点击“结束”按钮,结束当前一局游戏,查看当前分数是否超过历史最高分数,是则更新历史最高分数。

二、设计正文⑴实验题目21点游戏⑵程序总体结构在同一个文件夹下由文件夹cards,存放了名为0.gif~52.gif,代表扑克的图1、图形界面(构造函数以及布局设置,图片的加入及初始)2、事件监听器(ActionListener和WindowListener)3、事件处理的设计(Actionperformed和窗口时间处理)4、main方法⑶界面设计用边布局管理器BorderLayout():north设置为电脑庄家的面板comcards,作边布局BorderLayout(),从左到右面板包括标签“电脑庄家”,文本区拿到牌点数和当前总分数;south设置为玩家的面板mycards,也作作边布局BorderLayout(),从左到右面板包括标签“玩家”,文本区各次拿到牌的点数和当前总分数;west设置了介绍面板introduce,作网格布局GridLayout(3,1)放入3各文本区:2个为介绍,最下面的为用户输入name用;east为设置分数的面版rank,作网格布局GridLayout(3,1),包含1个标签wager,作提示信息,然后为玩家当前分数和历史最高分数的文本区;中央区为一个GridLayout (1,2)网格布局,其左边再加入一个按钮面板作GridLayout(3,2),放入6个按钮,实现5个,另一个作空。

Java实训报告纸牌游戏黑杰克

Java实训报告纸牌游戏黑杰克

《Java实训》设计报告纸牌游戏黑杰克专业:软件技术班级:09-23班学号:*********姓名:***石家庄科技信息职业学院信息工程系2011年10月15日项目简介纸牌游戏黑杰克一、项目需求黑杰克简称为21点,1700年左右法国赌场就有这种21点的纸牌游戏。

该游戏由 2 到 6 个人玩,使用除大小王之外的52 张牌,游戏者的目标是使手中的牌的点数之和不超过21 点且尽量大。

有着悠久的历史。

发牌:一开始给每个玩家发一张牌,这张牌是底牌,只有玩家自己知道是什么,然后只发给要牌的玩家。

如果所有玩家都不再要牌,则开牌计分。

计分:2到10都是按牌面计算点数,直接累加。

J、Q、K按10点计算,A一般记作11点累加,此时如果点数大于21点则将A记作1点。

爆分:21点为最大点数值,如果玩家手中的牌点数大于21点,则属于爆分,玩家手中点数将归0,判定为输。

要牌:玩家在底牌之后可以继续要牌,知道点数满意或爆分为止。

下注:玩家在每局开局前可下注,定当前局输赢的钱数。

输赢:21点位最大点数,哪个玩家点数大,就哪个玩家赢。

二、项目设计下面是5个Java源文件的总体设计。

(1)BlackJack.java(主类)BlackJack 类负责创建主窗口,该类含有main方法,游戏从该类开始执行。

BlackJack类有5种类型的对象,分别是:Dealer,Scanner,Player,Computer,Card,对象。

(2)Card.java对于一张扑克牌来说,主要有牌面值及花色,Card类用faces数组及suits数组分别存储所有牌面值及花色,并提供了getFace()方法及getSuit()方法获取一张扑克的面值及花色信息。

(3)CardsInHand.java玩家手上的牌。

(4)Dealer.java荷官的抽象只是实现了两个较核心的能力,一个是发牌,一个是洗牌。

发牌涉及到一个随机算法的问题,是比较重要的运算处理。

(5)Player.java玩家类的抽象是非常明显的,完全模拟了现实中一个玩家的属性及行为,属性有:赢次数、输次数、拥有现金数、手上的牌。

21点游戏java实现

21点游戏java实现

21点游戏java实现21点的基本知识21点是世界上⽐较流⾏的扑克游戏项⽬除掉⼤⼩王的⼀副扑克牌,共计52张牌21点不区分花⾊,其中A----10均代表扑克牌本⾝的点数J Q K代表10点区分庄家和闲家,其中闲家可以优先要牌⽽庄家在与闲家点数⼀样⼤的情况下,庄家赢,当有⼀⽅点数超过21点则另⼀⽅⾃动获胜,庄家的点数如果正好是21点,那么庄家直接获胜,其他情况以点数⼤的获胜流程设计:⼈机对战模式!1由⽤户输⼊选择作庄还是作闲,电脑⾃动成为另⼀⽅2随机为双⽅发两张牌3询问闲家是否要牌,⼀直到闲家不再要或者发⽣暴点为⽌4询问庄家要牌,⼀直到庄家不再要或者暴点或者正好21点为⽌5⽐较游戏输赢6询问是否继续7统计战果技术问题:1.发牌的时候随机发取2.发牌出来还要判断是否本张牌已经发过了!如果已经发过了,那么就要重新随机发另外⼀张牌,要保证牌的唯⼀性3.当给电脑派牌的时候要考虑AI的问题!让电脑的逻辑稍微模拟⼈的思维主类:import java.util.Scanner;public class CardTest {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int win = 0;int lose = 0;while (true) {System.out.println("请问做庄家1/闲家2?");int num = sc.nextInt();if (num == 1) {System.out.println("你选择做庄家");Ruler r = new Ruler();int n=r.play();if(n==0) {//庄家赢win++;}elselose++;} else if (num == 2) {System.out.println("你选择做闲家");Player p = new Player();int n= p.play();if(n==1) {//闲家赢win++;}elselose++;} else {System.out.println("输⼊错误,重新输⼊");}System.out.println("是否继续Y/N");if (sc.next().charAt(0) == 'Y')continue;else {System.out.println("游戏结束");System.out.println("赢:"+win);System.out.println("输:"+lose);break;}}}}import java.util.Random;public class Card {int index = 0; // 发牌索引下标String[] card = { "红桃A", "红桃2", "红桃3", "红桃4", "红桃5", "红桃6", "红桃7", "红桃8","红桃9", "红桃10", "红桃J", "红桃Q", "红桃K","⿊桃A","⿊桃2", "⿊桃3", "⿊桃4", "⿊桃5", "⿊桃6", "⿊桃7", "⿊桃8", "⿊桃9", "⿊桃10", "⿊桃J", "⿊桃Q", "⿊桃K","梅花A", "梅花2", "梅花3","梅花4", "梅花5", "梅花6", "梅花7", "梅花8", "梅花9", "梅花10", "梅花J", "梅花Q", "梅花K", "⽅⽚A", "⽅⽚2", "⽅⽚3", "⽅⽚4", "⽅⽚5", "⽅⽚6", "⽅⽚7", "⽅⽚8", "⽅⽚9", "⽅⽚10", "⽅⽚J", "⽅⽚Q", "⽅⽚K", };public void show() {for (int i = 0; i < 52; i++) {System.out.println(card[i]);}}// 洗牌,打乱牌的顺序public void cutcards() {int index=0;Random rand = new Random();for (int i = 0; i < 52; i++) {int n = rand.nextInt(52);String temp;temp = card[n];card[n] = card[51 - n];card[51 - n] = temp;}}// 发牌,按顺序发牌,从下标0开始public String deal() {String c = card[index];index++;return c;}}public class JudgeNum {public int judgeString(String num) {String word= num.substring(2);if(word.equals("A")) {return 1;}else if(num.substring(2).equals("J")||num.substring(2).equals("Q")||num.substring(2).equals("K")||num.substring(2).equals("10")) {return 10;}else {int n=(int)num.substring(2).charAt(0)-48;return n;}}}import java.util.Random;import java.util.Scanner;public class Player {/** 选择做闲家先得牌您选择: 闲家发牌时间:闲家:红桃K ⽅⽚3庄家:⿊桃6 梅花4* 闲家要牌时间:闲家是否要牌(Y/N)?Y发牌:⿊桃A* 闲家是否要牌(Y/N)?Y 发牌:梅花5 闲家是否要牌(Y/N)?N 闲家不再要牌:闲家点数:19点庄家要牌时间:庄家要牌:梅花5* 庄家要牌:⿊桃4庄家不再要牌:庄家点数19点庄赢****/Scanner sc= new Scanner(System.in);public int play() {int playernum=0;int rulernum=0;String player1;String player2;String ruler1;String ruler2;JudgeNum judge = new JudgeNum();Card c = new Card();c.cutcards();player1 = c.deal();player2 = c.deal();System.out.println("发牌时间:");System.out.println("闲家:" + player1 + " " + player2);playernum=judge.judgeString(player1)+judge.judgeString(player2); ruler1 = c.deal();ruler2 = c.deal();System.out.println("庄家:" + ruler1 + " " + ruler2);rulernum=judge.judgeString(ruler1)+judge.judgeString(ruler2);System.out.println("闲家点数:"+playernum);System.out.println("庄家点数:"+rulernum);System.out.println("闲家要牌时间: " );//循环要牌阶段while(true) {System.out.println("闲家是否要牌(Y/N)? " );char w = sc.next().charAt(0);if(w=='Y') {System.out.println("闲家继续要牌");String player3=c.deal();System.out.println("闲家: "+player3 );playernum=playernum+judge.judgeString(player3);System.out.println("闲家点数:"+playernum);if(playernum>21){System.out.println("闲家爆掉,庄家赢");return 0;}}else if(w=='N') {System.out.println("闲家不再要牌,闲家点数:"+playernum);break;}}System.out.println("庄家要牌时间");while(true) {if(rulernum>=playernum) {System.out.println("庄家不再要牌,庄家赢");return 0;}else {System.out.println("庄家要牌时间:");String ruler3=c.deal();System.out.println("庄家:"+ruler3);rulernum=rulernum+judge.judgeString(ruler3);if(rulernum>21) {System.out.println("庄家点数"+rulernum);System.out.println("庄家爆掉,闲家赢");return 1;}else if(rulernum>=playernum) {System.out.println("庄家点数:"+rulernum+" 闲家点数:"+playernum); System.out.println("庄家赢");return 0;}}}}}import java.util.Scanner;public class Ruler {// 选择做庄家/** 闲家先要牌**/Scanner sc = new Scanner(System.in);public int play() {int playernum = 0;int rulernum = 0;String player1;String player2;String ruler1;String ruler2;JudgeNum judge = new JudgeNum();Card c = new Card();c.cutcards();player1 = c.deal();player2 = c.deal();System.out.println("发牌时间:");System.out.println("闲家:" + player1 + " " + player2);playernum = judge.judgeString(player1) + judge.judgeString(player2); ruler1 = c.deal();ruler2 = c.deal();System.out.println("庄家:" + ruler1 + " " + ruler2);rulernum = judge.judgeString(ruler1) + judge.judgeString(ruler2);System.out.println("闲家点数:" + playernum);System.out.println("庄家点数:" + rulernum);System.out.println("闲家要牌时间:");while (true) {String player3;if (playernum <rulernum) {System.out.println("闲家要牌");player3 = c.deal();System.out.println("闲家:" + player3);playernum = playernum + judge.judgeString(player3);} else if (playernum > 21) {System.out.println("闲家点数:" + playernum);System.out.println("闲家爆掉,庄家赢");return 0;} else if (playernum >= 15) {System.out.println("闲家不再要牌");System.out.println("闲家点数" + playernum);break;}else {System.out.println("闲家要牌");String player4 = c.deal();System.out.println("闲家:" + player4);playernum=playernum+judge.judgeString(player4);if (playernum > 21) {System.out.println("闲家点数:" + playernum);System.out.println("闲家爆掉,庄家赢");return 0;}}}// 庄家要牌时间System.out.println("庄家要牌时间:");while (true) {System.out.println("庄家是否要牌(Y/N)");char w = sc.next().charAt(0);if (w == 'Y') {System.out.println("庄家继续要牌");String ruler3 = c.deal();System.out.println("庄家: " + ruler3);rulernum = rulernum + judge.judgeString(ruler3);System.out.println("庄家点数:" + rulernum);if (rulernum > 21) {System.out.println("庄家爆掉,闲家赢");return 1;}} else if (w == 'N') {System.out.println("庄家不再要牌,庄家点数:" + rulernum); break;}}if (rulernum >= playernum) {System.out.println("庄家赢");return 0;} else {System.out.println("闲家赢");return 1;}}}。

21点小游戏

21点小游戏
}
if(sum==w){
g.drawString("庄家和你一样大~你输了~",200,380);
}
if(sum<w){
g.drawString("庄家比你大~你输了~",200,380);
I[9]=Toolkit.getDefaultToolkit().getImage("th.gif");
I[10]=Toolkit.getDefaultToolkit().getImage("jh.gif");
I[11]=Toolkit.getDefaultToolkit().getImage("qh.gif");
public void windowActivated(WindowEvent e) {
}
public void windowClosed(WindowEvent e) {
}
public void windowClosing(WindowEvent e) {
e.getWindow().dispose();
I[6]=Toolkit.getDefaultToolkit().getImage("7h.gif");
I[7]=Toolkit.getDefaultToolkit().getImage("8h.gif");
I[8]=Toolkit.getDefaultToolkit().getImage("9h.gif");
for(i=0;i<2;i++)
{
k[i]=Math.abs(r.nextInt()%13);

java设计简单的21点游戏

java设计简单的21点游戏

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

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

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

三、实验结果package 游戏;import java.util.Random;import java.util.Scanner;public class Youxi {/*** @param args*/// TODO Auto-generated method stubpublic static void show(){//具有菜单形式的界面System.out.println("**************************");System.out.println("* 欢迎使用21点游戏*");System.out.println("**************************");}public static void shuffle(int a[] ){// 洗牌模块int temp,j,k=1;for(int i=0;i<=51;i++){a[i]=k;if((i+1)%4==0 )k++;}a[52]=14;a[53]=15;Random r=new Random();for(j=0;j<=10000;j++){int n=r.nextInt(54);int m=r.nextInt(54);temp=a[n];a[n]=a[m];a[m]=temp;}}public static int person(int a[] ){//计算玩家的点数和int p=1,j,t=1,sum=0;System.out.print("可以开始了吗?(1号键开始游戏):");while(p==1){Scanner r=new Scanner(System.in);int q=r.nextInt();if(q!=1)System.out.print("输入有误,请重新输入:");else p=0;}for(j=0;t==1;j=j+2){if(a[j]==14)System.out.print("您拿到小王,");if(a[j]==15)System.out.print("您拿到大王,");if(a[j]<14)System.out.print("本次发的牌是"+a[j]+"点,");sum+=a[j];if(a[j]==14||a[j]==15){sum-=a[j];System.out.print("请输入您想要的点数(1点到13点):");Scanner input=new Scanner(System.in);int h=input.nextInt();System.out.print("本次发的牌是"+h+"点,");sum+=h;}if(sum>21){System.out.print("现在是"+sum+"点,");break;}System.out.print("现在是"+sum+"点,");System.out.print("还要继续吗(继续请按1,退出请按2):");Scanner input1=new Scanner(System.in);int c=input1.nextInt();if(c==1)t=1;else t=0;}return sum;}public static int computer(int a[] ){ //计算电脑的点数和int t1=1,j,sum=0;for(j=1;t1==1;j=j+2){sum+=a[j];if(a[j]==14||a[j]==15){sum-=a[j];Random y=new Random();int b=y.nextInt(13);sum+=b;}if(sum>15)break;}return sum;}public static void Judge(int a[],int sum,int sum1 ){ //判定输赢if(sum>sum1&&sum<=21&&sum1<=21)System.out.println("恭喜您,胜利了!");else if(sum<sum1&&sum<=21&&sum1<=21)System.out.println("很遗憾,您失败了!");else if (sum==sum1&&sum<=21&&sum1<=21)System.out.println("平局!");else if(sum<=21&&sum1>21)System.out.println("恭喜您,胜利了!");else if(sum>21&&sum1<=21)System.out.println("很遗憾,您失败了!");else if (sum>21&&sum1>21)System.out.println("您和电脑都爆了,平局!");}public static void main(String[] args) {int i,t=1,sum1,sum,a[]=new int[54];show(); //具有菜单形式的界面for(i=0;t==1;i++){shuffle(a); //洗牌sum1=computer(a); //电脑的点数和sum=person(a); //玩家的点数和System.out.print("您的点数为:"+sum+" ");if(sum1>21)System.out.println("电脑的点数为"+sum1+" ");elseSystem.out.println("电脑的点数为:"+sum1);Judge(a,sum,sum1); //判断输赢System.out.print("还要继续玩游戏吗(继续请按1,退出请按2):");Scanner input=new Scanner(System.in);int k=input.nextInt();if(k==1)t=1;else t=0;}}}运行结果:四、遇到的问题以及解决方案1.随机数的产生:Random r=new Random();Int x=r.nextInt(n);//n代表产生的随机数在[0,n-1]之间。

21点JAVA游戏程序课程设计实验报告

21点JAVA游戏程序课程设计实验报告
教师评价
评定项目
A
B
C
D
评定项目
A
B
C
D
算法正确
界面美观,布局合理
程序结构合理
操作熟练
语法、语义正确
解析完整
实验结果正确
文字流畅
报告规范
题解正确
其他:
评价教师签名:
年月日
finalJButton button =newJButton();
button.addActionListener(newActionListener() {
publicvoidactionPerformed(finalActionEvent arg0) {
onClick();
}
});
button.setText("出牌");
number=this.randNumber();
this.sum+=number;
label.setText(""+number);
String strTemp =bel_1.getText();
strTemp +=""+number+" ";
label_1.setText(strTemp);
label.setFont(newFont("", Font.BOLD, 26));
label.setText("背面");
label.setBounds(158, 81, 137, 153);
getContentPane().add(label);
label_1.setText("你已经拥有的牌:");

21点游戏的设计与开发

21点游戏的设计与开发
毕业设计(论文)报告
题 目
基于 C#的 21 点游戏的设计与 开发 软件与服务外包学院 软件技术 *** *** ******** *******
系 别 专 业 班 级 学生姓名 学 号 指导教师
2012 年 4 月
无锡科技职业学院毕业设计(论文) 基于 C#的 21 点游戏的设计与开发
基于 C#的 21 点游戏的设计与开发
Key Words:Blackjack、Computing power、C #
ii
无锡科技职业学院毕业设计(论文) 基于 C#的 21 点游戏的设计与开发
目录
前言.............................................................................................................................................1 第一章 需求分析.......................................................................................................................2 1.1 本课题研究的意义.......................................................................................................2 1.2 21 点游戏发展历史......................................................................................................2 1.3 21 点游戏的特点和规则..............................................................................................2 1.4 21 点游戏常用术语......................................................................................................3 1.5 开发工具选择...............................................................................................................5 1.6 C#编程语言的介绍...................................................................................................... 6 1.7 C#编程语言的特点...................................................................................................... 6 第二章 概要设计.......................................................................................................................8 2.1 系统调研.......................................................................................................................8 2.2 可行性分析...................................................................................................................8 2.3 技术可行性分析...........................................................................................................9 2.4 程序设计.....................................................................................................................10 2.5 类及对象设计.............................................................................................................10 2.6 数据流程图 ...............................................................................................................11 第三章 程序设计.....................................................................................................................12 3.1 开始和退出功能实现.................................................................................................12 3.2 发牌功能实现.............................................................................................................13 3.3 胜负判断功能实现.....................................................................................................14 3.4 加牌功能实现.............................................................................................................16 第四章 总结.............................................................................................................................19 致谢...........................................................................................................................................21 参 考 文 献.............................................................................................................................22

21点游戏设计范文

21点游戏设计范文

21点游戏设计范文21点是一种非常受欢迎的扑克牌游戏,通常由两个或更多个玩家参与。

每个玩家的目标是使手中的牌的点数总和尽可能接近21点,但不能超过21点。

以下是一个关于如何设计一个21点游戏的详细说明。

游戏规则:1.游戏使用一副标准扑克牌,不含大小王。

每张牌的点数为A到K,其中A值1点,J、Q、K值10点。

2.每局游戏开始时,玩家会收到两张面朝上的牌,庄家(计算机或其他玩家)也收到两张牌,其中一张面朝下。

3.玩家可以选择“要牌”或“停牌”。

如果玩家选择“要牌”,则会从牌堆中抽取一张牌并加入手牌,如果点数超过了21点,则玩家输掉这局游戏。

如果玩家选择“停牌”,则庄家会继续向自己的手牌中加牌,直到点数达到17点或超过21点为止。

4.如果玩家的点数超过21点,庄家自动获胜。

如果庄家点数超过21点,玩家获胜。

如果两者都没有超过21点,则点数较靠近21点的一方获胜。

游戏设计:1.游戏界面:设计一个简洁美观的游戏界面,包括牌桌、发牌区和得分区。

牌桌上有两个区域,分别是玩家区和庄家区,用来放置玩家和庄家的手牌。

发牌区用来显示发牌动画和发牌结果。

得分区用来显示当前的得分情况。

2.发牌逻辑:设计一个发牌逻辑,当游戏开始或每局结束后,从牌堆中随机抽取四张扑克牌,两张分别发给玩家和庄家,其中一张庄家的牌面朝下。

同时,在得分区显示当前的得分情况。

3.玩家操作:提供“要牌”和“停牌”两个操作按钮,当玩家点击“要牌”时,从牌堆中抽一张牌并加入玩家手牌,更新得分区的得分情况。

当玩家点击“停牌”时,庄家开始抽牌直到达到17点或超过21点。

4.判断胜负:设计一个胜负判断逻辑,在玩家和庄家都停牌后,比较两者的点数,判断胜负并显示结果。

如果玩家点数超过21点,则庄家获胜;如果庄家点数超过21点,则玩家获胜;如果两者都没有超过21点,则点数较靠近21点的一方获胜。

5.游戏结束后,提供重新开始游戏的选项,可以重新发牌开始新的一局游戏。

这是一个基本的21点游戏设计,你可以根据需要进行进一步的扩展和改进。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

X X X X 大学《Java语言程序设计》课程设计(论文)题目:21点游戏院(系):专业班级:学号:学生姓名:指导教师:教师职称:起止时间:课程设计(论文)任务及评语目录第1章课程设计目的与要求 (1)1.1设计目的 (1)1.2实验环境 (2)1.3预备知识 (2)1.4设计要求 (2)第2章课程设计内容 (2)2.1 课题描述 (2)2.2 系统设计 (3)2.2.1功能分析 (3)2.2.2面向对象设计 (4)2.2.2类成员描述 (6)2.3程序实现 (8)2.3.1源码分析 (8)2.3.2运行结果 (11)第3章总结 (12)参考文献 (14)第1章课程设计目的与要求1.1设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。

通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程《JAVA语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。

(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。

(3)利用所学知识,开发小型应用系统,掌握运用JAVA语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。

(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。

(5)掌握面向对象程序设计的方法。

(6)熟练掌握JAVA语言的基本语法,灵活运用各种数据类型。

(7)进一步掌握在集成环境下如何调试程序和修改程序。

1.2实验环境硬件要求能运行Windows 操作系统的微机系统。

JAVA语言应用程序开发软件使用:VJAVA 系统,或其他JAVA语言应用程序开发软件。

1.3预备知识熟悉JAVA语言程序设计的基本知识及VJAVA编辑器的使用方法。

1.4设计要求1.仔细分析设计题目,画出程序流程图,编写程序源代码。

2.积极上机调试源程序,增强编程技巧与调程能力。

3.认真书写课程设计预习报告,课程设计说明书。

4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。

第2章课程设计内容2.1 课题描述21点有着悠久的历史。

1700年左右法国赌场就有这种21点的纸牌游戏。

1931年,当美国内华达州宣布赌博为合法活动时,21点游戏第一次公开出现在内华达州的赌场俱乐部,15年内,它取代掷骰子游戏,而一举成为非常流行的赌场庄家参与的赌博游戏。

出现在亚洲是1957年在香港第一次出现,而后迅速的发展起来,五年不到的时间发展的与牌九,麻将一同成为中国人最喜欢的三大游戏。

拥有最高点数的玩家获胜,其点数必须等于或低于21点;超过21点的玩家称为爆牌。

2点至10点的牌以牌面的点数计算,J、Q、K 每张为10点。

A可记为1点或为11点,若玩家会因A而爆牌则A可算为1 点。

当一手牌中的A算为11点时,这手牌便称为“软牌”,因为除非玩者再拿另一张牌,否则不会出现爆牌。

庄家在取得17点之前必须要牌,因规则不同会有软17点或硬17点才停牌的具体区分。

每位玩家的目的是要取得最接近21点数的牌来击败庄家,但同时要避免爆牌。

要注意的是,若玩家爆牌在先即为输,就算随后庄家爆牌也是如此。

若玩家和庄家拥有同样点数,这样的状态称为“push”,玩家和庄家皆不算输赢。

每位玩者和庄家之间的游戏都是独立的,因此在同一局内,庄家有可能会输给某些玩家,但也同时击败另一些玩家。

两张牌点数相加为21(一张A再加一张价值10点的牌)称为“二十一点”(Blackjack),拥有这副牌的玩家即自动成为赢家(除非庄家也同时持有二十一点,这种点数相同的情形就称为push)。

拥有二十一点的玩家可赢得下注筹码的1.5倍。

部份的赌场仅付给1.2倍的金额;但通常是在仅使用一副牌游玩的赌局中。

通常每次以四至六副扑克牌游玩,直至玩剩一副或一半为止,再重新洗牌。

21点小游戏是一个非常流行的益智类游戏,它不仅能娱乐,还能在娱乐中锻炼人的反应能力、逻辑思维能力,是一款寓教于乐的小游戏。

游戏的规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。

扑克牌的分值取它们的面值,A充当1或者11分,J,Q和K人头牌都是10分。

庄家VS1~7个玩家。

在开局时,包括庄家在内的所有参与者都有两张牌。

玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。

接下来,只要愿意,各个玩家都有机会依次再拿一张牌。

如果是玩家的总分超过了21(称为引爆),那么这个玩家就输了。

在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。

只要庄家的总分等于或小于16,那么他就必须再拿牌。

如果庄家引爆了,那么还没有引爆的所有玩家都将获胜,引爆的玩家打成平局。

否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。

如果二者的总分相同,则玩家与庄家打成平局中。

2.2 系统设计2.2.1功能分析本系统完成了21点游戏所要求的所有功能,下面是功能模块分析:1)游戏规则模块本模块显示了,这个游戏的规则,基本就运用了System.out.println;语句,没有什么特别的。

2)下注模块可以让系统重新下注、输入赌注,并且记录该局已下的总赌注,当赌注小于0时乘-1,当资金不够,会提示重新下注,下注成功后,资金减少。

3)要牌模块系统会先发前两张牌,然后牌数值记为2,并且计算机随机产生牌点,如果牌点数大于10,记为0.5,然后记录总点数发牌,随即产生牌点当大于10点记为半点,最后记录总点数。

3)游戏过程模块发最初两张牌显示玩家牌点,电脑发前两牌并显示其中一张牌,计算机连续要牌,计算机在小于16点并少于5张牌是有权要牌,显示没次牌点,计算机要牌结束,玩家后几张要牌循环起点(小局),玩家要牌前可选择加注,玩家选择不再要牌时退出当盘比赛,比较当盘比赛结果,要派程序,根据返回值而定,返回值为1,进入普通玩家牌的张数加一,牌超过5张时将D=0,作为退出当盘比赛条件,满足普通玩家发牌条件时调用发牌函数发牌,返回值为2,高级玩家,满足高级玩家发牌条件,进入高级玩家函数,返回值为3,超级玩家,D=0,作为结束当盘比赛循环结束条件,调用结果统计函数,调用该函数询问是否再玩一盘,将全局变量变0,以进入下盘时用,返回值为Y时再玩一盘,否则退出,退出后打印出比赛最终结果。

4)玩家选择模块本系统分为三个级别的玩家,普通玩家、高级玩家和超级玩家,玩家第一次登陆的时候都是从普通玩家开始,然后根据玩家级别的提升和登陆的次数增多,玩家的等级不断升高从而转变为高级玩家和超级玩家,本且系统会有一定的资金的奖励。

每个玩家登陆后都会有500元的基础资金,然后就随着玩家自己对游戏的理解和熟练程度了。

每当一个玩家登陆的时候系统会根据以前的游戏记录,判定玩家的级别,从而对玩家归类,使玩家进入到自己适合的级别。

2.2.2面向对象设计此图表示了系统所含有的模块,粗略的展示了系统所能展现的游戏过程,使玩家一样就能看见游戏的大概的方向和结果。

2.1系统功能模块图图2.2UML类图此图是本系统21点游戏总体流程,它展现了这个游戏的过程,使用户直观的看出游戏的流程规范,在没有打开游戏的时候就能清楚地看清自己需要操作的具体步骤。

xxxx 大学课程设计说明书(论文)图2.3 21点游戏总体流程图2.2.3类成员描述1.类的数据成员本程序我声明了1个类,game21,在类中我定义了构造函数,构造函数定义了初始化变量。

构造函数是一种特殊的方法主要用来在创建对象时初始化对象即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中特别的一个类可以有多个构造函数可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。

Java语言为类提供的构造函数可自动完成对象的初始化任务,全局对象和静态对象的构造函数在main()函数执行之前就被调用,局部静态对象的构造函数是当程序第一次执行到相应语句时才被调用。

然而给出一个外部对象的引用性声明时,并不调用相应的构造函数,因为这个外部对象只是引用在其他地方声明的对象,并没有真正地创建一个对象。

2.函数成员描述1)延时函数wait()延时函数在本系统中是控制游戏开始的时间和结束的时间的,也是用来限制玩家与计算机的思考过程的限制,使游戏不至于由于思考的时间过长而影响,游戏的进度。

学过汇编的就会知道,每条指令都占一定的时间(或者机器周期)的,如果你让机器什么都不做,即空指令的话,机器就会延时,然后你在计算好每次延时到底有多长,外面套一个循环(或者多重循环),根据你想要的延时时间即可计算出来循环的次数,延时函数基本上都是这种原理,它的参数就是用来控制循环次数的。

2)暂停函数pause()本系统中设置了暂停函数,它是使玩家更好的控制系统的,玩家可以根据自己需要的思考时间来控制游戏的进度,本系统中设置了玩家可以按任意一个键使游戏继续或者停止,并且都有相应的中文语句提示。

3)显示比赛规则的函数rules()在比赛规则函数中主要是运用了System.out.println;这条语句主要是输出本游戏的规则要领,使第一玩这个游戏的玩家了解游戏规则。

4)下注函数Bet()在下注函数中主要分为两类,一是资金足够的情况,一是资金不够的情况。

资金足够的情况我定义了一个数学运算公式:all=all+a.nGamble;并且通过a.nGamble=a.nGamble*(-1);来控制下注资金在以有的资金控制范围内,来控制资金的输入,还有减少资金的语句“a.nRMB=a.nRMB-a.nGamble”。

资金不够的情况我定义了一个提示语“cout<<"\t对不起,您资金不够,请重新下注"<<endl;”来提示玩家资金不足。

5)高级玩家vipplayer()和超级玩家superplayer()本系统中分为普通玩家、超级玩家和高级玩家三种用户类型,随着用户对系统的使用程度和玩家自身的游戏技巧来限定权限。

图2.4函数流程图2.3程序实现2.3.1源码分析/*此程序是21点小游戏,下部分是程序的主代码部分由谢晶晶设计,完成时间是2013年06月13日。

*/import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.SwingConstants;import javax.swing.border.LineBorder;public class game21 extends JFrame {private JLabel label_2;private int number;private int sum;final JLabel label = new JLabel();final JLabel label_1 = new JLabel();public static void main(String[] args) {new game21();}public game21() {super("21点?!");getContentPane().setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);final JButton button = new JButton();button.addActionListener(new ActionListener() {public void actionPerformed(final ActionEvent arg0) {onClick();}};button.setText("出牌");button.setBounds(170, 350, 106, 28); getContentPane().add(button);label.setBorder(new LineBorder(Color.black, 1, false)); label.setHorizontalAlignment(SwingConstants.CENTER); label.setFont(new Font("", Font.BOLD, 26));label.setText("背面");label.setBounds(158, 81, 137, 153);getContentPane().add(label);label_1.setText("你已经拥有的牌:");label_1.setBounds(109, 22, 270, 45);getContentPane().add(label_1);this.setBounds(200, 300, 501, 528);this.setVisible(true);getContentPane().add(getLabel_2());}public int randNumber() {try {Thread.sleep(10);}catch (InterruptedException e) {e.printStackTrace();}return (int) (Math.random() * 10 + 1);}public void onClick() {number = this.randNumber();this.sum += number;label.setText("" + number);String strTemp = bel_1.getText();strTemp += "" + number + " ";label_1.setText(strTemp);String temp = "合计:" + sum;label_2.setText(temp);isWin();}public void isWin() {if (sum > 21) {JOptionPane.showMessageDialog(this, "你输了");clear();return;}else if (sum == 21) {JOptionPane.showMessageDialog(this, "你赢了");clear();return;}else {int i = JOptionPane.showOptionDialog(this, "是否继续?", "提示", JOptionPane.OK_CANCEL_OPTION,RMATION_MESSAGE, null, null, null);if (i == JOptionPane.OK_OPTION) {onClick();}elsereturn;}}private void clear() {label_2.setText("合计:");sum = 0;number = 0;label_1.setText("你已经拥有的牌:");}/*** return*/protected JLabel getLabel_2() {if (label_2 == null) {label_2 = new JLabel();label_2.setText("合计:");label_2.setBounds(313, 35, 66, 18);}return label_2;}}2.3.2运行结果此界面为开始界面,玩家直接点出牌就可以了。

相关文档
最新文档