您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 软件综合实验报告_21点游戏
综合实验报告(2008--2009年度第1学期)实验名称:软件综合实验题目:21点游戏院系:计算机科学与技术系班级:计算0701班组长学号:1071220103组长姓名:丁炳淼指导教师:石敏设计周数:2周成绩:日期:2009年1月9日综合实验报告1一、综合实验的目的与要求㈠实验目的:掌握用图解决实际问题的方法。培养综合运用已经学过的程序设计知识,针对实际问题建立相应的数据模型的能力。综合运用所学过的知识分析实际问题和解决问题的能力,熟练掌握一种开发平台并编写出高效、完整的实用程序。进一步提高编程能力。㈡实验要求:图形用户界面包含一个含“开始”、“要牌”、“结束”三个按钮和分别代表“当前分数”和“历史最高分数”的两个标签的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个,另一个作空。网格右边为一个CardLayout布局的cardpanel面板,初始为一张扑克的背面。其中,文本区除introduce的text_name外都为不可写,且text_name在按钮开始后也变为不可写。按钮有各自的用处而相互制约,部分按钮在一定时间内为不可用。如图综合实验报告2⑷重要数据的数据结构设计publicstaticintmysum=0,comsum=0,myscore=200,bestscore=200,temp;牌的点数和得分publicstaticStringname1=;用户自定义名字publicstaticbooleanvictory=false;是否“胜”publicTextFieldtext_name,text_mywords1,text_mywords2,com2,com3,me2,me3,score1,highestscore1;各种各样的文本publicPanelcomcards,mycards,centerpanel,introduce,rank,cardpanel;面板publicLabelwager;注释标签publicButtonstart,onemore,next,wash,stop,over;主要按钮publicCardLayoutcl;卡片布局publicJButtoncard[];按钮组⑸函数设计详细设计publicvoidactionPerformed(ActionEvente)包括5各按钮的事件处理,所有的操作都已经划分进按钮中:开始按钮:①输入名字后保存,以便在最后处理;②初始化电脑和玩家的当前分数和牌的点数;③初始化玩家得分;④设置要牌、停、结束按钮可用,开始按钮不可用;⑤名字文本区不可写入;要牌按钮:①随即产生一个0~51的随机数,声明一个字符串strt,将随机数转化为字符串格式给strt,用CardLayout输出这个随机数代表的扑克图;②当牌为JQK时,点数以10输出;③输出各张扑克点数和当前点数;④用IF定义当当前点数大于21时,返回一个false的Boolean的victory;⑤按钮变化停(牌)按钮:①设置电脑的要牌模式为当电脑分数小于玩家就要牌;②其余近似要牌③按钮变化;下一轮按钮:①初始化;综合实验报告3②判断victory,若true,则在“当前得分”中加10,false则减10,并显示;③最后赋值victory为false,出去游戏bug;④按钮变化结束按钮:①结束化,同最初界面;②显示玩家当前得分③比较得分与最高分数,输出更高者,以及游戏者名字publicvoidwindowClosing(WindowEvente)publicvoidwindowOpened(WindowEvente){}publicvoidwindowActivated(WindowEvente){}publicvoidwindowDeactivated(WindowEvente){}publicvoidwindowClosed(WindowEvente){}publicvoidwindowIconified(WindowEvente){}publicvoidwindowDeiconified(WindowEvente){}⑹难点及关键技术分析难点:将扑克图片装进程序中;随机取一张扑克牌,并将其点数输出;游戏可玩性关键技术:在同一个文件夹下由文件夹cards,存放了名为0.gif~52.gif,代表扑克的图,利用自定义的classResource(把图片赋值给按钮用到到的类),用card[i]=newJButton(newImageIcon(Resource.getImgResource(/cards/+i+.gif)))把图片赋值给JButton组;并且将i转化为一个字符串stri,用cardpanel.add(card[i],stri)添加到CardLayout的卡片组中,用stri可直接调用这张牌。随机取,用到了temp=(int)(Math.random()*100)%51,产生的0~51的数对应扑克调用CardLayout中的show(),即cl.show(cardpanel,strt)(cl为CardLayout的对象,cardpanel为放牌的面板,strt为一个字符串)再声明一个temp,用ten=temp/4+1得卡片的值(如13为k),则能输出了注:图片在同一个文件夹中的cards中,且黑桃A0.gif红桃A1.gif草花A2.gif方片A3.gif黑桃24.gif………………扑克背面52.gif⑺测试结论经过测试要求的各种功能均已实现,解决已知bug三、综合实验总结或结论1.实验完成的工作:设计题目所给出的功能都已实现,并美化了用户界面2.实验所需做的改进:(1)因为21点游戏在各个地区都要不同的规则,而且21点游戏的电脑庄家的AI只是一个简单的方式,并非很智能化;(2)21点游戏还存在各种赔率(普通的21点为2倍,5张牌俗称“五老虎”为3倍等等),但本程序并没实现。四、小组详细分工都由自己完成。五、参考文献叶核亚java2程序设计使用教程电子工业出版社附录(设计流程图、程序、测试数据等)综合实验报告4设计流程图程序注:图片在同一个文件夹中的cards中,且黑桃A0.gif红桃A1.gif草花A2.gif方片A3.gif黑桃24.gif………………扑克背面52.gifimportjava.awt.*;importjava.awt.event.*;importjava.util.*;importjavax.swing.*;importjava.net.URL;publicclassgame21pointextendsFrameimplementsActionListener,WindowListener{publicstaticintmysum=0,comsum=0,myscore=200,bestscore=200,temp;publicstaticStringname1=;publicstaticbooleanvictory=false;publicTextFieldtext_name,text_mywords1,text_mywords2,com2,com3,me2,me3,score1,highestscore1;publicPanelcomcards,mycards,centerpanel,introduce,rank,cardpanel;publicLabelwager,nocardlabel;publicButtonstart,onemore,next,wash,stop,over;publicCardLayoutcl;publicJButtoncard[];publicgame21point(){super(21点游戏(无赔率版));cl=newCardLayout();card=newJButton[53];this.setSize(600,350);this.setResizable(false);this.setLocation(200,200);this.setBackground(java.awt.Color.lightGray);comcards=newPanel(newBorderLayout());this.add(comcards,North);introduce=newPanel(newGridLayout(3,1));添加监听器给按钮组添加扑克图片添加CardLayout布局数据处理添加到ActionPerformed中的按钮处理方法中,并对按钮的可用或不可用进行处理修改游戏出现的基本BUG基本的图形界面设计综合实验报告5this.add(introduce,West);centerpanel=newPanel(newGridLayout(1,2));this.add(centerpanel,BorderLayout.CENTER);rank=newPanel(newGridLayout(3,1));this.add(rank,East);mycards=newPanel(newBorderLayout());this.add(mycards,South);Labelcom1=newLabel(电脑庄家);comcards.add(com1,West);com2=newTextField(0);com2.setEditable(false);comcards.add(com2);com3=newTextField(当前分数,20);com3.setEditable(false);comcards.add(com3,East);text_mywords1=newTextField(请在开始前:写入名字,20);text_mywords1.setEditable(false);introduce.add(text_mywords1);text_mywords2=newTextField(一组多幅扑克,没有赔率);text_mywords2.setEditable(false);introduce.add(text_mywords2);text_name=newTe
本文标题:软件综合实验报告_21点游戏
链接地址:https://www.777doc.com/doc-2011936 .html