基于java的猜拳小游戏设计-毕设论文.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 java 猜拳 小游戏 设计 论文
- 资源描述:
-
目 录 绪论 - 1- 一、背景与意义 - 2- 二、设计原理与方案 - 2- 一)方案 - 2- 二)设计思路 - 3- 三)系统分析 - 3- 四)程序概要设计 - 4- 五)工作流程图 - 4- 六)程序框图 - 5- 七)程序中所用类说明 - 5- 八)程序运行效果及存在的问题 - 7- 三、项目实现 - 8- 一)程序用到的类库简介 - 8- 二)游戏主程序设计 - 8- 三)主界面PigPanel类 - 8- 四)具体实现 - 9- 四、运行结果 -14- 一)结果截图 -14- 二)系统在调度中经常出现的问题 -16- 五、心得 -17- 六、总结语 -18- 七、参考文献 -19- 绪论: 面向对象(OOP)的程序设计认为:现实世界是由一组彼此相关并互通信息的实体——对象(Object)组成的。不管是一所学校、一个班级;一辆汽车、一张桌子;还是一个窗体、一个按钮,都可视作对象。一个对象包含两部分内容:描述对象状态的数据和描述对象行为或功能(方法)的编码。数据和编码紧密结合,共同构成一个对象。面向对象的程序设计有三大特性:封装性、继承性和多态性。 计算机技术的应用正在朝着网络化的方向阔步前进,万维网成为世界上最大的信息中心。但目前外围网上的内容仍多为文本、图像、声音等静态信息,Java为其提供了简便并且功能强大的编程接口,开发人员利用这些编程接口可以向Web增加动态性、交互性内容,这使得Web页面翻开了新的一页。 Java是一种跨平台的面向对象的语言,这就允许开发人员生成独立于平台的应用程序,用Java编写的程序可以在许多硬件平台上运行而不需要重新编译。 Java具有很多优点:简单、面向对象、可移植、与硬件无关、强健安全、具有很高的性能,此外还对多线程、动态性提供了支持。 Java采用面向对象技术,所有的Java程序都是对象,通过封装性实现了模块化和信息隐藏,通过继承性实现了代码的复用,使得用户可以根据自己的需要创建自己的类库。 Java最强大的是网络方面的应用,本课程设计不涉及网络方面的应用。 一、背景与意义 游戏是全球最大的娱乐经济项目之一,已经被命名为“第九艺术”。而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,已成为了一系列专门的岗位。虽然说中国的游戏行业开始逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏又直接制约着行业的发展,这就更加严格了对社会培训机构的稳定性和正规性的要求。在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。 所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,来满足社会对游戏人才的需求。 通过Java程序设计的一些重要理论基础来实现“人机猜拳小游戏”的功能。通过利用所学到的计算科学的理论知识,提高解决实际问题的能力,增强运算、编程和使用技术资料的技能,通过实际问题的分析设计、编程和调试,掌握应用软件的分析方法和工程设计方法,能正确阐述设计和实验结果,逐步建立正确的全局观念。通过本次程序设计,我掌握了Java语言的基本运用,提高了理论结合实际能力。 二、设计原理及方案 程序总体介绍和设计要求程序使用J2SE语言编写,使用标准JDK平台编译和运行。程序使用已创建的PairOfDice类,设计并实现一个类来玩游戏。根据游戏规则玩家将和电脑进行比赛。创建小游戏,实现电脑与玩家之间互动猜拳这主要功能,通过按钮的方式,与电脑进行猜拳游戏,电脑随机出拳并能显示设置的图片,增加美观。 一)方案: 1)界面的左侧是电脑或者玩家的名字,让界面看起来一目了然。 2)系统界面的中间是电脑或者玩家出拳的图片。图片可以生动形象得表示出电脑或者玩家出的拳,显示的图片在对话框中也相得益彰。在图片的下方会显示,人机猜拳以后的输赢。 3)界面的右侧是三个剪刀石头布的按钮。玩家通过按钮出拳,电脑随机出拳,猜拳的输赢结果在下方显示。 二)设计思路: 在设计游戏时,我们要充分考虑到剪刀石头布游戏的特性,以及多种技术的实现: ⑴构造创建服务器端和客户端 ⑵创建输入输出流 ⑶编写服务器端处理数据的线程方法 ⑷绘制游戏界面 ⑸绘制界面上的提示 采用此方法设计使程序简洁明了,使绘制游戏界面时简单化,更加易于游戏的实现,程序也更易于读懂。 如java中得到输入输出流的方法: //调用客户端的getInputStream()方法 Inputs=newBufferedReader(new InputStreamReader(client.getInputStream())); 通过调用此方法获取从服务器得到的数据 调用客户端的getOutputStream()方法,通过此方法把客户端的数据传输给服务器。 三)系统分析 Java程序编辑器是:图形界面、线程、流与文件等技术的综合应用。 图形界面的实现:考虑到简单、实用、高效等特点,就选择了AWT来完成实现,在选择组件上,文本编辑区就选用了TaxtArea作为主要的部件。 线程实现文件自动保存:在相关的参考书上查阅到在Time类中有一个schedule方法可以在后台自动完成一定的功能,而且调用起来相当简单,于是就用了Time类中的schedule方法来实现文件自动保存及备份功能。 文件操作的实现:利用了字符文件流FileReader和FileWriter类来实现。 由于Java的特性,可能用任何一个编辑器来编辑,于是就将Windows中的记事本作为模仿对象,根据实现情况删减了其中的一些功能,如自动换行,设置字体,打印等功能。 在设计类的时候,考虑到简单明了,就用了两个类,一个主类和一个默认属性类作为程序的整体框架,所有的对象和方法都是在默认属性类中创建和实现的,以及为各组件注册事件监听程序也是在默认属性类中实现的。主类完成对象的实例化及显示。这们设计的优点是:条理清晰,容易理解,容易修改。这样设计的缺点是:不利于共享类中的方法。 四)程序概要设计 1)功能需求分析 一个剪刀石头布游戏,根据一般的常识,首先要有两个人,两个人同时出,然后,根据双方的出拳,决定谁是赢者,虽然想起来这个游戏很简单,但如何实现 ,还是有一定难度的。实现这个时针时涉及到几个技术问题: 1. 双方如何出拳 2. 如何同时出拳 3. 如何判断哪方赢了 4. 如何显示结果 剪刀石头布游戏,都是通过两个人同时出拳,然后根据双方出的拳,判定哪方是赢家。 2)性能需求分析 准确性:在实现此的过程中,我们要考虑到,双方是否能同时地出拳,还要就是如何去判断,准确地知道哪方是赢家. 简洁性:在实现此的过程中,我们要考虑到,怎样使游戏界面更简单,让人更容易明白它怎样去玩。 五)工作流程图: 图1 工作流程图 六)程序框图 游戏程序框图如图2所示 图2 游戏程序框图 七)程序中所用类说明: (1)用户自定义类 类名:SmallGame 作用:实例化对象 主要成员变量: Frame myFrm // 定义主窗体 TextArea myText // 定义文本编辑区 Button BfontOK, Bfind, Breplace, Bnext, Bcancel //定义和创建各按钮 Label Lf Lr, Ls //定义和创建各标签 MenuBar Mbbar //定义和创建主菜单 Menu Mfile,Medit,Mformation,Mhelp //定义和创建主菜单中的选项 Toolkit toolKit Clipboard myCB //剪切板对象 FileDialog myFDlg //定义文件对话框 主要成员方法: public void init() //初始化各部件菜单的定义和事件的监听 public void displayEdit ()//显示窗体及调用Time中的schedule方法 public void windowClosing () //关闭窗体 public void save //保存文件方法 .内部类类名:KeyEvents 作用:实现菜单的事件的响应功能 继承的父类:KeyAdapter 主要成员变量:无 成员方法:actionPerformed()、keyPressed() (2)用户自定义类与Java类的继承关系图如下: Thread Service getInputStream Start Run Random getOutputStream Readline 图3 子类及其父类继承关系图 (3)类中成员及作用 Service类成员: String data; //接收数据 BufferedReader inputs;// 读取数据 PrintStream outputs;//输出数据 Socket client;//定义套接字 Client类成员: String data;//接收数据 Socket client = null;//定义套接字 BufferedReader inputs = null;// 读取数据 BufferedReader key = null;// 缓冲数据 PrintStream outputs = null;//输出数据 八)程序运行效果及存在的问题 (1)运行效果图 剪刀石头布游戏效果如图4所示: 图4游戏效果图 (2)存在的问题 此游戏界面简洁明了,但还是有许多问题的,比如说这个界面不是GUI的,所以操作性不强,也不美观,而且处理数据的random函数也有问题,它可能出现相同的结果,不能成为真正意义上的随机,所以这个小游戏还是有许多问题的,我会进一步的改进它。 三、项目实现 一) 程序用到的类库简介 (1)Java的抽象窗口工具集AWT(Abstract Window Toolkit)中包含了很多的类来支持GUI的设计,使得用户和程序可以非常方便地进行交互。java.awt包中包含Component、Panel、Frame、Applet、Container、Button等许多常用的类。 (2) Swing类库提供一组“轻量级”(全部是 Java 语言)组件,尽量让这些组件在所有平台上的工作方式都相同。而javax.swing.event则供 Swing 组件触发的事件使用。 (3)此外,程序还用到了部分applet、net、io、util类。 二)游戏主程序设计 主程序PigPanel用到两个类:Die和PairOfDice,均为已设计类。 Die类主要实现出招过程,PairOfDice过程主要返回游戏规定的得分情况,PigPanel使用这两个类,并产生用户交互界面,由用户操作实现出招、得分、等步骤。 三)主界面PigPanel类 1. 成员变量 restart Jbutton 对本次游戏数据进行清零 get JButton 模拟出招 pause Jbutton 获得当前得分的点数 pod PairOfDice 声明类以获得分点数 2.成员变量 info String 储存读取的信息 ta JTextArea 显示文字 四)具体实现 首先建立一个Test类,如下: import java.awt.Color; import java.awt.Image; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.AbstractButton; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; public class Test extends JFrame { JLabel jl,jl1; final JLabel jl2,jl3; JLabel jl4; public String person; public String m; int j; int i; final String[] arr = new String[3]; public void Win(String person) { arr[0] = "石头"; arr[1] = "剪刀"; arr[2] = "布"; person = arr[j]; i = (int) (Math.random() * 3); String c = arr[i]; //判断输赢 if (c.equals(person)) { jl4.setText("平手"); } else if (c.equals("剪刀") && person.equals("石头") || c.equals("石头")&& person.equals("布") || c.equals("布") && person.equals("剪刀")) { jl4.setText("你赢了"); } else { jl4.setText("你输了"); } } public Test() { JFrame jf = new JFrame(); this.setSize(400, 300); this.setTitle("猜拳游戏"); this.setLayout(null); jl = new JLabel("电脑出的是:"); jl.setBounds(50, 50, 100, 50); this.add(jl); jl1 = new JLabel("你出的是:"); jl1.setBounds(50, 120, 100, 50); this.add(jl1); // 电脑的出的拳标签 jl2 = new JLabel(); jl2.setBounds(150, 50, 100, 50); this.add(jl2); //我出的拳的标签 jl3 = new JLabel(); jl3.setBounds(150, 120, 100, 60); this.add(jl3); jl4 = new JLabel(""); jl4.setBounds(150, 200, 100, 50); this.add(jl4); // 按钮 final JButton btn = new JButton("石头"); btn.setBounds(280, 50, 60, 40); this.add(btn); final JButton btn1 = new JButton("剪刀"); btn1.setBounds(280, 105, 60, 40); this.add(btn1); final JButton btn2 = new JButton("布"); btn2.setBounds(280, 160, 60, 40); this.add(btn2); //按钮事件监听 btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { //如果你鼠标点击的是石头按钮 j = 0; String b = btn.getActionCommand(); jl3.setText(b); jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".jpg"))); Win(person); Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource (i+".jpg"))); Test.this.jl2.setText(arr[i]); System.out.println(arr[i]); } }); btn1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { j = 1; String b1 = btn1.getActionCommand(); jl3.setText(b1); jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".jpg"))); Win(person); Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource (i+".jpg"))); Test.this.jl2.setText(arr[i]); System.out.println(arr[i]); // System.out.println(b); } }); btn2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { j = 2; String b2 = btn2.getActionCommand(); jl3.setText(b2); jl3.setIcon(new ImageIcon(MyImg.class.getResource(j+".jpg"))); Win(person); Test.this.jl2.setText(arr[i]); System.out.println(arr[i]); Test.this.jl2.setIcon(new ImageIcon(MyImg.class.getResource (i+".jpg"))); // System.out.println(b); } }); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setResizable(false); } public static void main(String[] args) { Test t = new Test(); } } 再建立一个名为MyImg的类,把下面几张图片放到该类下 图片名称自左向右依次为布、石头、剪刀。 四、 运行结果 一) 结果截图 图5 开始界面 图6 游戏过程 图7 游戏过程 图8 游戏过程 二) 系统在调度中经常出现的问题 (1)数据库的连接容易出错 (2)各种数据写入数据库时容易出错 (3)在调度中经常出现数词不匹配 五、心得 个人分析: 程序从最初的黑盒子运行到后来的可视化,经过了一段“设计的思考”:如何把游戏表现出来、如何让用户最快上手、如何完善游戏。这属于需求分析的范畴。在设计中不断体会系统的需求分析需求满足的重要,才会做出好的程序。 在程序实现的过程中,遇到的困难也不少。不提编写的小错误,有所学的知识不够用的尴尬,有用户界面的多媒体实现的难处,不一而足。于是我通过不断的学习和纠正错误,得到了最后的源程序。 后来是课程设计,并且要做好各个环节的分析,用语言表达出来。这相当有难度。也许在此之前已经把程序脱个精光,但是要把各个环节拆开并且详细描述就仿佛要把程序继续脱。当然最终是“脱”出来了,也许还不尽如人意,但已能大致表达程序设计的思想了。 虽然提交时间推延到了最后,但是我仍然感觉时间相对紧张(思想紧张?),所以难免出现不足之处,有可完善的,也有个人能力之外的。已知的列举如下: 1.出招过程未能表现; 2.没有开始菜单以及结束菜单; 3.不能由键盘控制; 4.在最大化窗口后出现部分界面不能显示; 5.界面还可更加完善; 6.应更多学习成熟游戏的优点,改善游戏环境; 7.编程还未能做到完全模块化,这是在课程设计中发现的; 六、总结语: 作为率先推广面向对象思想的语言,java却不是革命性的东西,所有现有的 java 的思想都是继承自其他的语言和技术,没有什么革命的地方。但是 java 在真正推动面向对象编程思想方面是功不可没的。使用 java 编程,你无需考虑到向后兼容什么语言的问题,它是重新建立的语言,你在掌握这门语言之前,你必须将自己的编程思想由过程编程彻底转向面向对象编程,因为每个 java 程序,本身就是一个类,你编写任何 java 程序,你都不自觉的在构造一个对象模板,没有第二条道路,只能是面向对象编程。 相对于另一门面向对象的语言C++而言,java 在面向对象的贯彻方面要比 C++ 彻底。有人说“C++ 是打着面向对象的幌子,干着过程编程的勾当”或许不是言过其辞,C++继承了C的面向过程的一些特性,而java几乎都用了面向对象的思想来实现程序。但是无论是 c++ 还是 java 都有可能走过程编程的老路, java 降低的过程编写的可能性,但是如果你没有具备面向对象的编程思想,你还是可能走面向过程的老路的。 程序中生成了几个对象,均为较简单的对象,而却难免会步入面向过程的老路,但这看似是却是难免的:实现游戏规则,就要把过程写出来。 理解课程设计如果想要做好,绝不是一朝一夕的事。 本次毕业设计的每一个阶段:系统分析、总体设计、编码实现、调试与测试,都是我在不断学习的情况下完成的。而在这些过程中不断体会软件设计的各个步骤、各个环节,又转到不断学习中去。 java的学习是要不断把所学和所用结合的,一次课程设计可以体会到知识的不足,而后补充所需的知识,再进行实践,再发现不足,如此不断,才能慢慢体会这门语言的精髓。 是故,本次课程设计带给我的不仅仅是为未来打基础这么简单的收获,更多的是一种认识。小至一门课程、一门语言,大至一门专业、一段人生,若不是热情主动刻苦地学习,将一无所获。 七、参考文献 JAVA开发实战宝典--------编著:李钟蔚 出版社:清华大学出版社 JAVA面向对象编程--------编著:孙卫琴 出版社:电子工业出版社 18展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




基于java的猜拳小游戏设计-毕设论文.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4865789.html