扑克牌游戏软件开发说明书

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

*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2013年秋季学期
Java 课程设计
题目:扑克牌游戏软件开发
专业班级:计算机科学与技术班
姓名:
学号:
指导教师:
成绩:
目录
摘要..................................................................................................................................................... - 2 - 序言..................................................................................................................................................... - 3 -
一、系统分析与设计......................................................................................................................... - 4 -
1、问题描述............................................................................................. - 4 -
2、功能分析 .......................................................................................... - 4 -
3、系统流程图 ...................................................................................... - 5 -
二、详细设计..................................................................................................................................... - 6 -
一、函数说明........................................................................................... - 6 -
二、方法和类说明................................................................................. - 12 -
三、系统测试................................................................................................................................... - 13 -
四、二十一点游戏说明书............................................................................................................... - 15 - 设计总结........................................................................................................................................... - 16 - 参考文献........................................................................................................................................... - 17 - 致谢............................................................................................................................................... - 18 - 附录................................................................................................................................................... - 19 -
此程序主要是编写二十一点扑克牌游戏的开发。

本程序先以随机函数实现花色的获取。

黑桃、红桃、梅花、方块。

然后在调用随机函数来实现发牌,给玩家和电脑实现随机的发牌,在bijiao1函数里获取电脑和玩家的牌,并存在字符串tr1、tr2中,再用mm1,mm2 计算得到玩家和电脑的牌总分。

并用bijiao2函数返回比较和输出值给按钮2,点击按钮就获取电脑的牌和比较结果并输出到te3中。

此程序有点就是模拟显示中赌博的情况,全靠运气获取牌(随机函数)。

模模拟现实玩牌。

关键词:二十一点;纸牌游戏;递归算法设计;Java
在人们的生活中,随着我们每天生活水平的提高,有很多空闲的时间,大多数便会在乘车、等车、中间休息等等的业余。

可以来玩一点小游戏,打发一下空闲时间和无聊的心理。

本软件主要就是实现纸牌小游戏二十一点的基本功能,当点击要牌按钮时,开始发牌,开始发三张牌,玩家的牌显示出来,当大于二十一点是,便是玩家输了。

不大于二十一点时,点击按钮比较,开始和电脑的牌比较大小,大于电脑的牌便是赢了,等于就是平局,小于就是输了。

当电脑的牌也是大于二十一点是就是电脑输了!
通过本软件的设计、开发,使学生初步进行是JAVA语言的初级编程。

其次JAVA语言的21点扑克牌的编程及设计。

还有JAVA平台软件eclipse的使用。

并且使用软件eclipse对21点游戏进行编程,设计游戏算法,实现游戏功能。

本次设计的主要难点1.二十一点游戏的基本功能的实现。

2. 程序中胜负的判别方法。

3. 递归法的理解与使用。

一、系统分析与设计
1、问题描述
在开局时,包括庄家在内的所有参与者都一张牌。

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

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

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

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

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

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

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

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

2、功能分析
该扑克牌21点游戏主要实现以下功能:
1) 洗牌;
2) 发牌;
3) 清空;
4) 计算总分;
5) 判断胜负
3、系统流程图
图1.1系统流程图
开始
玩家要牌(最多5张)
电脑要牌
小 于 21 点 比 较 大 小 大 于 21 点
赢 输
结束
二、详细设计
游戏胜负的判别方法:本方法没有考虑了鬼牌的因素,由于所用到的扑克牌为52张,用随机函数来获取牌得数字和花色,并将其存在数组中,再转换成字符串输出到Text 中。

要获得玩家和电脑的牌,所以用到一个随机函数,但是要储存获取的牌用于比较大小,玩家和电脑分别用一个比较函数,调用了随机函数来获取牌和储存牌。

同时在调用另一个随机函数来实现花色的排序获得,也存起来,用于输出到获得的数值的前面。

当获得的牌为1是用A显示,当是11时用J显示,当是12时用Q显示,当获得13时用K。

花色共有四种:红-红桃,黑-黑桃,梅-梅花,方-方块。

一、函数说明
1、因为有52张牌,所以随机函数如下:
int nextOne(){ //获取牌得随机函数
int n=(int)(Math.random()*52);
n=(n%13)+1;
return n;
}
2、因为有4种花色,所以随机函数如下:
int huase(){ //获取花色得随机函数
int n=(int)(Math.random()*4);
n=(n%4)+1;
return n;
}
3、玩家获取牌、花色及其显示比较函数:
此函数获取了玩家的牌,并计算起总和值存在mmm1中,再判断牌值是否为1、11、12、13是则变成相应的字母。

在将牌值返回到按钮一中,用于发牌。

String bijiao1()
{ //玩家获取牌和花色得函数t1=nextOne();
m1 =m1+t1;
tt1=huase();
mmm1=m1; // 储存获取牌得和if(mmm1>21)
{
tr1=HH;
}
else
{
if(t1==1)
W=a;
else if(t1==11)
W=j;
else if(t1==12)
W=q;
else if(t1==13)
W=k;
else W=String.valueOf(t1);
if(tt1==1)
M="方";
if(tt1==2)
M="黑";
if(tt1==3)
M="红 ";
if(tt1==4)
M="梅 ";
tr1+=""+M+""+W+" ";
}
return tr1;
}
4、电脑获取牌、花色及其显示比较函数:
此函数获取了电脑的牌,并计算起总和值存在mmm2中,再判断牌值是否为1、11、12、13是则变成相应的字母。

在将牌值返回到按钮一中,用于发牌。

String bijiao2(){ //电脑获取牌和花色得函数
t2=nextOne();
m2 =m2+t2;
tt2=huase();
mmm2=m2; // 储存获取牌得和
if(mmm2>21)
{
tr2=HH;
}
else
{
if(t2==1)
W=a;
else if(t2==11)
W=j;
else if(t2==12)
W=q;
else if(t2==13)
W=k;
else W=String.valueOf(t2);
if(tt2==1)
M="方";
if(tt2==2)
M="黑";
if(tt2==3)
M="红 ";
if(tt2==4)
M="梅 ";
tr2+=M+""+W+" ";
}
return tr2;
}
5、这是返回存有玩家和电脑的牌得和值的差的函数:
public int get(){ // 返回差值
int t= mmm1-mmm2;
return t;
}
6、这是按钮一:
主要是获取玩家、电脑的牌,并将玩家的牌输出到Text1中。

b1.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
cards dd=new cards();
trr1 =dd.bijiao1();
trr2 =dd.bijiao2();
mmm1=dd.mmm1;
mmm2=dd.mmm2;
aaa =get();
if(b1.hasFocus()){
trr1=bijiao1();
trr2=bijiao2();
}
te1.setText(trr1);
}
});
7、这是按钮二:
主要是将电脑的牌输出到Text2中,并获取两者的比较值然后将结果输出到Text3中。

并判断输出结果的值是什么。

b2.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
String xx= new String();
te2.setText(trr2);
aaa =get();
H1=te1.getText();
H2=te2.getText();
int slen1=H1.length();
int slen2=H2.length();
if(slen1==slen)
{
te3.setText("☆☆你的牌大于21点!你输了!☆☆☆");
}
else if(slen2==slen)
{
te3.setText("☆☆电脑的牌大于21点!你赢了!☆☆☆!");
}
else if(slen1==slen&&slen2==slen)
{
te3.setText("☆☆都大于21点!平局☆☆☆!");
}
else{
if(aaa<0)
xx="△△ ~ 你输了 ~ △△!!";
else
if(aaa==0)
xx="◇◇ ~ 平局 ~ ◇◇!!";
else if(aaa>0)
xx="☆☆ ~ 你赢了 ~ ☆☆!!";
te3.setText("卍结果为: "+mmm1+"比"+mmm2+xx +"卐");
}
}
});
8、这是按钮三:
b3.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
cards dd=new cards();
te1.setText(null);
te2.setText(null);
te3.setText(null);
}
});
二、方法和类说明
程序中方法和类的说明
类名方法名描述
Cards go() 游戏框架界面
Cards start() 设置按钮并开始游戏
Cards clean() 清除数据并退出
Cards bijiao1() 给玩家发牌
Cards bijiao2() 给电脑发牌
Cards get() 返回玩家、电脑的牌差值
Cards Main() 入口方法,调用其他函数
开始
三、系统测试
当运行该程序,打开该小游戏时,软件运行界面如图所示:1、要牌的测试如图3.1所示:
图3.1
2、小于21时双方比较大小的测试如图3.2所示:
图3.2
3、大于21时双方比较大小的测试如图3.3所示:
图3.3
四、二十一点游戏说明书
1、点击按钮“要牌”开始游戏。

玩家、电脑各得到一张牌。

玩家可以看到Text里显示出来自己的牌。

电脑的一张牌暂时是隐藏的。

2、接下来,只要愿意,可再点击按钮“要牌”,玩家电脑各再机会依次拿一张牌。

玩家还是可以看到自己的牌。

3、当还没大于21点,玩家电脑都还可以在要牌,如果大于21点则输了,依次类推获取牌。

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

如果不想要牌了,想结束本局可点击第二个按钮“比较”,将会显示电脑的牌,并在第三个Text中显示玩家和电脑的牌得总分和比较结果!如果电脑引爆(大于21点)了,那么还没有引爆的玩家获胜,玩家也引爆了就打成平局。

5、点击第三个按钮清空数据并结束游戏!
设计总结
这次课程设计,培养了我开发一个中小型程序的能力。

在这次对扑克牌游戏的编写过程中,有过程序功能成功实现时的欣喜,也有遇到问题、解决问题时的执着以及迷茫。

这次课程设计中,我发现动手比看书更能获取实际有用的知识。

很多知识,在书本上看似很有道理,可是这些知识在与实际情况结合起来往往就会出现书本上没有见过的情况,或者说之前的理解与实际的使用是截然不同的。

而这次课设也加强了我们这些方面的理解能力,对书面上的东西实际操作在具体项目上有了一个更加清晰的认识。

我还意识到在写代码前,一定要有良好的需求分析和结构设计,应该占整个程序设计的大部分时间,一个好的程序,分析设计应该要非常充分,这样才不至于代码写了一半才发现很多错误。

在具体代码操作之前的设计规划与构建才是一个优秀的程序设计的灵魂。

设计过程中,我另一个大的体会就是要及时参考图书馆借来的书,通过教程,大大的提高了工作的效率。

同时我也发现自己的不足之处。

对于很多自己以为很熟悉的东西,在细节上的把握有许多不足。

这也让我明白,做事细心是必须的,所谓细节决定成败!
参考文献
[1] 陈维新. JAVA面向对象程序设计[M].北京:国防科技大学出版社,1998. 33-35
[2] 林小茶. JAVA编程思想[M].北京:北京航空学院出版社,2003.
[3] 王克宏. JAVA技术教程[M].北京:中国信息科学出版社,1995. 63-66
[4] 吕志勇. JAVA核心技术[M].北京:北京航空学院出版社,1996. 155-158
[5]曲朝阳,杨杰明等.Java程序设计. 北京: 清华大学出版社,2008.10
[6]耿祥以,张跃平.Java大学生实用教程. 北京: 电子工业出版社,2012.6
[7]明日科技.Java经典编程.北京:清华大学出版社,2012.10
致谢
首先感谢我的指导老师庞淑侠老师在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在面对从书本到实际应用的鸿沟之时有了一座坚固的桥。

感谢我的java王燕老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。

我的同学在设计过程及完成后的测试中起到了相当重要的作用,没有他们,我就不能发现后期测试过程出现的错误和漏洞,在此一一表示感谢。

附录
源代码:
package card;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import java.util.Random;
public class cards{
public Label L1,L2;
public Frame f;
public Panel p1,p2,p3;
public Button b1,b2,b3;
public TextField te1,te2,te3;
int mm;
int t1;
int tt1;
String tr1=new String();
String ttr1=new String();
int t2;
int tt2;
String tr2=new String();
String ttr2=new String();
String W =new String();
String M =new String();
String H1 =new String();
String H2 =new String();
static String HH ="大于 21 点 ";
int slen=HH.length();
String trr1,trr2,ttr;
int mmm1,mmm2;
int aaa;
String a="A";
String j="J";
String q="Q";
String k="K";
int m1=0,m2=0;
Font FF=new Font("黑体",Font.PLAIN,20);
public static void main(String[] args) {
cards d=new cards();
d.go();
d.start();
}
public void go(){ //创建窗口 f=new Frame("小游戏 - 二十一点");
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
p1=new Panel();
p2=new Panel();
p3=new Panel();
L1=new Label("★你的牌:→");
te1=new TextField();
L2=new Label("◆电脑的牌:→");
te2=new TextField();
te3=new TextField();
te1.setFont(FF);
te2.setFont(FF);
te3.setFont(FF);
L1.setFont(FF);
L2.setFont(FF);
b1=new Button("要牌");
b2=new Button("比较");
b3=new Button("清空");
b1.setBackground(Color.yellow);
b1.setSize(50,20);
b2.setBackground(Color.green);
b2.setSize(50,20);
b3.setBackground(Color.orange);
b3.setSize(50,20);
p1.setLayout(new GridLayout(1,4));
p1.add(L1);
p1.add(te1);
p1.add(L2);
p1.add(te2);
p2.setLayout(new GridLayout(1,3));
p2.add(b1);
p2.add(b2);
p2.add(b3);
p3.setLayout(new GridLayout(1,1));
p3.add(te3);
f.setLayout(new GridLayout(3,1));
f.add(p1);
f.add(p2);
f.add(p3);
f.setSize(600,400);
f.setVisible(true);
}
void start(){ //开始游戏按钮功能
b1.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
cards dd=new cards();
trr1 =dd.bijiao1();
trr2 =dd.bijiao2();
mmm1=dd.mmm1;
mmm2=dd.mmm2;
aaa =get();
if(b1.hasFocus()){
trr1=bijiao1();
trr2=bijiao2();
}
te1.setText(trr1);
}
});
b2.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
String xx= new String();
te2.setText(trr2);
aaa =get();
H1=te1.getText();
H2=te2.getText();
int slen1=H1.length();
int slen2=H2.length();
if(slen1==slen)
{
te3.setText("☆☆你的牌大于21点!你输了!☆☆☆");
}
else if(slen2==slen)
{
te3.setText("☆☆电脑的牌大于21点!你赢了!☆☆☆!");
}
else if(slen1==slen&&slen2==slen)
{
te3.setText("☆☆都大于21点!平局☆☆☆!");
}
else{
if(aaa<0)
xx="△△ ~ 你输了 ~ △△!!";
else
if(aaa==0)
xx="◇◇ ~ 平局 ~ ◇◇!!";
else if(aaa>0)
xx="☆☆ ~ 你赢了 ~ ☆☆!!";
te3.setText("卍结果为: "+mmm1+"比"+mmm2+xx +"卐");
}
}
});
b3.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e)
{
cards dd=new cards();
dd.mm=0;
dd.t1=0;
dd. tt1=0;
dd.tr1=null;
dd.ttr1=null;
dd.t2=0;
dd.tt2=0;
dd.tr2=null;
dd.ttr2=null;
dd.aaa=0;
dd.ttr= clean();
te1.setText(ttr);
te2.setText(ttr);
te3.setText(ttr);
}
public void mousePressed(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
});
}
public String clean(){
cards ddd=new cards();
trr1=null;
trr2=null;
return trr1;
}
int nextOne(){ //获取牌得随机函数
int n=(int)(Math.random()*52);
n=(n%13)+1;
return n;
}
int huase(){ //获取花色得随机函数
int n=(int)(Math.random()*4);
n=(n%4)+1;
return n;
}
String bijiao1()
{ //玩家获取牌和花色得函数
t1=nextOne();
m1 =m1+t1;
tt1=huase();
mmm1=m1; // 储存获取牌得和
if(mmm1>21)
{
tr1=HH;
}
else
{
if(t1==1)
W=a;
else if(t1==11)
W=j;
else if(t1==12)
W=q;
else if(t1==13)
W=k;
else W=String.valueOf(t1);
if(tt1==1)
M="方";
if(tt1==2)
M="黑";
if(tt1==3)
M="红 ";
if(tt1==4)
M="梅 ";
tr1+=""+M+W+" ";
}
return tr1;
}
String bijiao2(){ //电脑获取牌和花色得函数
t2=nextOne();
m2 =m2+t2;
tt2=huase();
mmm2=m2; // 储存获取牌得和
if(mmm2>21)
{
tr2=HH;
}
else
{
if(t2==1)
W=a;
else if(t2==11)
W=j;
else if(t2==12)
W=q;
else if(t2==13)
W=k;
else W=String.valueOf(t2);
if(tt2==1)
M="方";
if(tt2==2)
M="黑";
if(tt2==3)
M="红 ";
if(tt2==4)
M="梅 ";
tr2+=M+""+W+" ";
}
return tr2;
}
public void setstr(int mmm1,int mmm2)
{
this.mmm1=mmm1;
this.mmm2=mmm2;
}
public int get(){ // 返回差值int t= mmm1-mmm2;
return t;
}。

相关文档
最新文档