扑克牌游戏软件开发说明书.docx
- 文档编号:25315972
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:26
- 大小:109.96KB
扑克牌游戏软件开发说明书.docx
《扑克牌游戏软件开发说明书.docx》由会员分享,可在线阅读,更多相关《扑克牌游戏软件开发说明书.docx(26页珍藏版)》请在冰豆网上搜索。
扑克牌游戏软件开发说明书
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
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系统流程图
二、详细设计
游戏胜负的判别方法:
本方法没有考虑了鬼牌的因素,由于所用到的扑克牌为52张,用随机函数来获取牌得数字和花色,并将其存在数组中,再转换成字符串输出到Text中。
要获得玩家和电脑的牌,所以用到一个随机函数,但是要储存获取的牌用于比较大小,玩家和电脑分别用一个比较函数,调用了随机函数来获取牌和储存牌。
同时在调用另一个随机函数来实现花色的排序获得,也存起来,用于输出到获得的数值的前面。
当获得的牌为1是用A显示,当是11时用J显示,当是12时用Q显示,当获得13时用K。
花色共有四种:
红-红桃,黑-黑桃,梅-梅花,方-方块。
一、函数说明
1、因为有52张牌,所以随机函数如下:
intnextOne(){//获取牌得随机函数
intn=(int)(Math.random()*52);
n=(n%13)+1;
returnn;
}
2、因为有4种花色,所以随机函数如下:
inthuase(){//获取花色得随机函数
intn=(int)(Math.random()*4);
n=(n%4)+1;
returnn;
}
3、玩家获取牌、花色及其显示比较函数:
此函数获取了玩家的牌,并计算起总和值存在mmm1中,再判断牌值是否为1、11、12、13是则变成相应的字母。
在将牌值返回到按钮一中,用于发牌。
Stringbijiao1()
{//玩家获取牌和花色得函数
t1=nextOne();
m1=m1+t1;
tt1=huase();
mmm1=m1;//储存获取牌得和
if(mmm1>21)
{
tr1=HH;
}
else
{
if(t1==1)
W=a;
elseif(t1==11)
W=j;
elseif(t1==12)
W=q;
elseif(t1==13)
W=k;
elseW=String.valueOf(t1);
if(tt1==1)
M="方";
if(tt1==2)
M="黑";
if(tt1==3)
M="红";
if(tt1==4)
M="梅";
tr1+=""+M+""+W+"";
}
returntr1;
}
4、电脑获取牌、花色及其显示比较函数:
此函数获取了电脑的牌,并计算起总和值存在mmm2中,再判断牌值是否为1、11、12、13是则变成相应的字母。
在将牌值返回到按钮一中,用于发牌。
Stringbijiao2(){//电脑获取牌和花色得函数
t2=nextOne();
m2=m2+t2;
tt2=huase();
mmm2=m2;//储存获取牌得和
if(mmm2>21)
{
tr2=HH;
}
else
{
if(t2==1)
W=a;
elseif(t2==11)
W=j;
elseif(t2==12)
W=q;
elseif(t2==13)
W=k;
elseW=String.valueOf(t2);
if(tt2==1)
M="方";
if(tt2==2)
M="黑";
if(tt2==3)
M="红";
if(tt2==4)
M="梅";
tr2+=M+""+W+"";
}
returntr2;
}
5、这是返回存有玩家和电脑的牌得和值的差的函数:
publicintget(){//返回差值
intt=mmm1-mmm2;
returnt;
}
6、这是按钮一:
主要是获取玩家、电脑的牌,并将玩家的牌输出到Text1中。
b1.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente)
{
cardsdd=newcards();
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(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente)
{
Stringxx=newString();
te2.setText(trr2);
aaa=get();
H1=te1.getText();
H2=te2.getText();
intslen1=H1.length();
intslen2=H2.length();
if(slen1==slen)
{
te3.setText("☆☆你的牌大于21点!
你输了!
☆☆☆");
}
elseif(slen2==slen)
{
te3.setText("☆☆电脑的牌大于21点!
你赢了!
☆☆☆!
");
}
elseif(slen1==slen&&slen2==slen)
{
te3.setText("☆☆都大于21点!
平局☆☆☆!
");
}
else{
if(aaa<0)
xx="△△~你输了~△△!
!
";
else
if(aaa==0)
xx="◇◇~平局~◇◇!
!
";
elseif(aaa>0)
xx="☆☆~你赢了~☆☆!
!
";
te3.setText("卍结果为:
"+mmm1+"比"+mmm2+xx+"卐");
}
}
});
8、这是按钮三:
b3.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente)
{
cardsdd=newcards();
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王燕老师在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。
我的同学在设计过程及完成后的测试中起到了相当重要的作用,没有他们,我就不能发现后期测试过程出现的错误和漏洞,在此一一表示感谢。
附录
源代码:
packagecard;
importjava.awt.*;
importjava.awt.event.*;
importjava.util.Arrays;
importjava.util.Random;
publicclasscards{
publicLabelL1,L2;
publicFramef;
publicPanelp1,p2,p3;
publicButtonb1,b2,b3;
publicTextFieldte1,te2,te3;
intmm;
intt1;
inttt1;
Stringtr1=newString();
Stringttr1=newString();
intt2;
inttt2;
Stringtr2=newString();
Stringttr2=newString();
StringW=newString();
StringM=newString();
StringH1=newString();
StringH2=newString();
staticStringHH="大于21点";
intslen=HH.length();
Stringtrr1,trr2,ttr;
intmmm1,mmm2;
intaaa;
Stringa="A";
Stringj="J";
Stringq="Q";
Stringk="K";
intm1=0,m2=0;
FontFF=newFont("黑体",Font.PLAIN,20);
publicstaticvoidmain(String[]args){
cardsd=newcards();
d.go();
d.start();
}
publicvoidgo(){//创建窗口
f=newFrame("小游戏-二十一点");
f.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente)
{
System.exit(0);
}
});
p1=newPanel();
p2=newPanel();
p3=newPanel();
L1=newLabel("★你的牌:
→");
te1=newTextField();
L2=newLabel("◆电脑的牌:
→");
te2=newTextField();
te3=newTextField();
te1.setFont(FF);
te2.setFont(FF);
te3.setFont(FF);
L1.setFont(FF);
L2.setFont(FF);
b1=newButton("要牌");
b2=newButton("比较");
b3=newButton("清空");
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(newGridLayout(1,4));
p1.add(L1);
p1.add(te1);
p1.add(L2);
p1.add(te2);
p2.setLayout(newGridLayout(1,3));
p2.add(b1);
p2.add(b2);
p2.add(b3);
p3.setLayout(newGridLayout(1,1));
p3.add(te3);
f.setLayout(newGridLayout(3,1));
f.add(p1);
f.add(p2);
f.add(p3);
f.setSize(600,400);
f.setVisible(true);
}
voidstart(){//开始游戏按钮功能
b1.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente)
{
cardsdd=newcards();
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(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente)
{
Stringxx=newString();
te2.setText(trr2);
aaa=get();
H1=te1.getText();
H2=te2.getText();
intslen1=H1.length();
intslen2=H2.length();
if(slen1==slen)
{
te3.setText("☆☆你的牌大于21点!
你输了!
☆☆☆");
}
elseif(slen2==slen)
{
te3.setText("☆☆电脑的牌大于21点!
你赢了!
☆☆☆!
");
}
elseif(slen1==slen&&slen2==slen)
{
te3.setText("☆☆都大于21点!
平局☆☆☆!
");
}
else{
if(aaa<0)
xx="△△~你输了~△△!
!
";
else
if(aaa==0)
xx="◇◇~平局~◇◇!
!
";
elseif(aaa>0)
xx="☆☆~你赢了~☆☆!
!
";
te3.setText("卍结果为:
"+mmm1+"比"+mmm2+xx+"卐");
}
}
});
b3.addMouseListener(newMouseAdapter(){
publicvoidmouseClicked(MouseEvente)
{
cardsdd=newcards();
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);
}
publicvoidmousePressed(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseReleased(MouseEvente){}
});
}
publicStringclea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扑克牌 游戏软件 开发 说明书