为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

抢钱游戏

2013-09-04 18页 doc 360KB 38阅读

用户头像

is_503582

暂无简介

举报
抢钱游戏《面向对象程序设计(Java)》课程设计报告 华 北 科 技 学 院 课程设计说明书 班级: 网络B071 姓名: 徐成胜 设计题目: 抢钱游戏 设计时间: 2009.12.28 至 2010.1.22 指导教师: 孙改平 评 语: 评阅成绩: 评阅教师: ...
抢钱游戏
《面向对象程序设计(Java)》课程设计报告 华 北 科 技 学 院 课程设计说明书 班级: 网络B071 姓名: 徐成胜 设计题目: 抢钱游戏 设计时间: 2009.12.28 至 2010.1.22 指导教师: 孙改平 评 语: 评阅成绩: 评阅教师: 目  录 11 引 言 11.1课程设计选题 11.2课程设计的目的 11.3本选题的设计背景 12 系统分析与设计 12.1 功能需求 12.2 系统的开发运行环境 12.3 系统总体设计 23 数据库设计 23.1 数据库概念结构 23.2 数据库逻辑结构 23.3 数据库的实现 24 详细设计与实现 24.1 登录模块 24.2 ×××模块 24.3 ×××模块 24.4 ×××模块 24.5 ×××模块 3结  论 3参 考 文 献 [单击此处键入附录题名]附录 [可选项] 3 1 引 言 1.1课程设计选题 《抢钱游戏》 1.2课程设计的目的 使学生巩固和加深以Java 语言为基础的面向对象编程技术理论知识的理解,提高实际动手编程能力的培养,掌握以Java为核心的应用软件开发,达到能独立阅读、编制和调试一定规模的Java程序的水平。 1.3本选题的设计背景 1.3.1选题原因: 开始本来想做一个简单一点的电话号码查询系统,因为其题目要求只是简单的涉及了表的查询,修改,插入,删除等要求,以前学习别的语言时对其接触的比较深,因此我想选其作为我这次课程设计的题目。 然而当真的选择其作为题目时,和老师商量时,却听老师说其设计方法和题目难度不大,相应的即使你做得再好,分数也不会太高!听老师建议做抢钱游戏更能体现Java这门学科语言的特点,因此我就选择其作为我的课程设计题目。 因为我真的想学好这门编程语言,所以当时虽然对这个编程一点头绪都没有,但是我还是选择其作为我的课程设计题目。 1.3.2选题设计意义: 因为其是java游戏的设计,所以所先必须体现的就是java的AWT组件的使用,这是我这个游戏设计的最根本的体现。还有就是游戏操作时需要用到鼠标,所以鼠标监视器必不可少,还有动作监视器这个跟组件一起用得就更不用说了!由于随着对程序的编写,一步一步的完善了其功能,本着更深一步的原则,我还把数据库的一些操作加了进去,虽然对数据库的设计并没有什么深层次的考虑,只是建了几张表,然后用java对其操作,但却使得游戏的功能更加完善! 最后需要提的一点,就是使用的Timer 类这个完成时间控制,可以说前期使用这个类真的是我很烦恼,查阅了大量的资料,才最终在网上找到了一个类似的方法使用,并通过大量的数据分析才弄懂了这个类方法的使用。 系统分析与设计 2.1 功能需求 游戏提供一个窗口,在窗口中显示一个钱币。每个钱币在窗口中显示一段时间后消失。游戏玩家使用鼠标点击钱币,如果在钱币消失之前点到钱币,玩家得分,游戏继续;否则游戏结束。当游戏玩家得分数达到一定数值时,钱币显示时间减少。当游戏结束后,提供一个分数功能。显示分数最高的三个玩家姓名和分数。下面对游戏的规则细节进行说明。 · 钱币显示的位置。在窗口中给出了4行4列16个位置,在这些位置上可以放置钱币。 · 钱币显示的时间长度。最初每个钱币显示的时间长度为2秒钟,以后每次晋级,显示时间长度减少1/3。 · 加分规则。每次点到一个钱币玩家的分数加10分。 · 钱币更新规则。当玩家点到钱币后,钱币消失,在另一个位置上重新出现一枚钱币。 · 分数显示。在游戏进行过程中,在窗口中显示玩家得到的分数。 · 晋级规则。每次分数达到160的整倍数时,游戏晋升一级。 排行榜。游戏结束后,如果玩家的分数比当前的第三名高,进入排行榜显示。 2.2 系统的开发运行环境 本系统开发平台: Java + Microsoft Access2003 本系统集成开发环境: Eclipse 本系统运行环境: windows xp 2.3 系统总体设计 2.3.1游戏操作面版 一个游戏开始必须的就是一个游戏面板,里面包括游戏的所有操作按钮,游戏使用者可以通过点击相应的按钮对游戏进行简单的设置,比如设置游戏的难度,游戏开始,游戏结束,游戏暂停,游戏继续,观看游戏的积分排行榜等等! 这些都是游戏面板必须包括的,所以建一个类继承JFrame组件来完成游戏面版的这些功能,里面必须设置一些按钮,菜单栏和菜单条。 2.3.2游戏工作面板 这个面板是游戏“钱”币显示的地方,当游戏开始时,“钱”通过随机数字处理在游戏工作面版里不断的显示,然后游戏用户可以通过点击游戏工作面版里出现的“钱”使钱不断的变幻位子。 若是一定时间后,用户始终没点“钱”,那么游戏就将失败。玩家可以通过游戏操作界面的开始按钮,重新开始新游戏。 2.3.3游戏难度设定 这个需要设置一下时间的长短,通过主操作界面调用后,调用设置不同的时间,还有就是当分数到达一定后,对时间进行处理函数,使时间减少! 2.3.4分数设置 这个是分数处理,一个继承标签的类,可以加到主界面中。 2.3.5钱币 这也是一个继承标签的类,里面只有标题的设置。 2.3.6数据库的操作 这里包括了4个类,当然可以简化成两个说明,因为其事实上只实现了两个功能,a.就是对数据库中表的查询,然后显示b.就是对数据库中的表中数据进行更新。 A. 对数据库中表的查询,是根据游戏操作界面中的查询成绩难度而选着查询表的,这样可以宣示不同难度等级的分数的记录 B. 对数据库中表的更新也是得根据游戏设置难度进行更新的,当游戏设置的难度不同,调用不同的方法队数据库处理,然后用玩家得分与数据库中的成绩进行比较,当高于数据库中的成绩时更新。 因为其具体功能实现过程比较复杂,这里就不介绍显示具体过程,将在后面的功能模块中详细介绍这部分功能。 程序大体功能大致就上述这些,关键是操作界面把所有的功能连接起来,这就得通过监视器来实现功能的调用,通过不同的调用类功能里的方法,游戏才能进行下去。 数据库设计 1.1 数据库概念结构 在这个数据库我建了3个表,表名分别为show1,show2,show3这是用来存防游戏的前3名记录的,每个表中的数据属性都是相同的,之间没有什么相互的约束。 因为在使用这些表时都是分开用的,其之间的数据没什么关系,所以没有相应的约束。每个表都有3个属性,rank(文本),name(文本),grade(数字),然后rank为主码。 上面的是整个表的E-R图。 3.2 数据库逻辑结构 各个表的逻辑设计模式如下: show1(rank,name,grade) show2(rank,name,grade) show3(rank,name,grade) 其中每个表的rank是主键,注意一点是,每个表中的rank,name,grade都是独立的,并不是指同一个,他们是毫无关系,独立存在的。 3.3 数据库的实现 表的建立过程如下图所示: 上述为建表的过程,完成以后如下图所示: 表show2和show3的建表过程和上述表show1的建立过程大致相同,在这里就不一一详细说明了,到此数据库建立完成,接下来就可以使用了SQL语句进行相应的操作了。 详细设计与实现 4.1 操作界面模块 4.1.1模块功能演示 上图为游戏的操作界面,玩家可以通过上面的按钮对游戏进行相应的操作。第一个为游戏菜单栏,里面有游戏开始,继续和结束菜单,如下图所示: 接下来在等级设置的菜单栏中有等级的设置,如下图所示: 暂停和继续菜单栏中有暂停和继续菜单,玩家可以点击暂停按钮对游戏进行暂停,点击继续按钮可以继续游戏。排名显示里有游戏的不同难度等级的分数记录,点击可以显示记录。 帮助菜单栏里有帮助菜单,点击帮助菜单会弹出一个消息提示对话框,里面有游戏的操作方法,和制作人信息。具体信息如下图所示: 4.1.2模块算法 因为这个游戏操作页面大部分都是按钮的创建和按钮的组合,所以就不多说这些的按键组合的方法了。 在这里介绍一下动作监视器的动作方法,因为其把所有的功能组合起来了,是最主要的一段代码,缺少了不行。代码算法如下: public void actionPerformed(ActionEvent e){ if(e.getSource()==item10){ tmr.stop();} else if(e.getSource()==item11){ JOptionPane.showMessageDialog(this, "用手标点击画面中出现得“钱”,每点中一次得10分,没点中游戏结束。 制作人:徐成胜", "抢钱游戏", JOptionPane.INFORMATION_MESSAGE);} else if(e.getSource()==item7){ init(); start();} else if(e.getSource()==item9){ tmr.start();} else if(e.getSource()==item8){ System.exit(0);} else if(e.getSource()==item1){ dur.setTimeLength(2000); d=1;} else if(e.getSource()==item2){ dur.setTimeLength(1500); d=2;} else if(e.getSource()==item3){ dur.setTimeLength(1000); d=3;} else if(e.getSource()==item4){ show=new Show("显示排名",1); show.setVisible(true);} else if(e.getSource()==item5){ show=new Show("显示排名",2); show.setVisible(true);} else if(e.getSource()==item6){ show=new Show("显示排名",3); show.setVisible(true);} else if(e.getSource()==tmr) { stop(); board.dispear(); JOptionPane. showMessageDialog(this,(new StringBuilder("您的分数是:")).append(s.getScore()),"分数提示",JOptionPane.INFORMATION_MESSAGE); if(d==1){ new getData(s.getScore(),1);} else if(d==2){ new getData(s.getScore(),2);} else if(d==3){ new getData(s.getScore(),3);} } } 4.1.3功能介绍 这个操作界面的功能监视器功能就是把所有的按钮个监视起来,当点击相应的按钮时,动作被激发,就进行不同的调用,使其进行相应的操作。 这里面还要说一下的就是tmr = new Timer(dur.getTimeLength(), this)这个代码和对应的else if(e.getSource()==tmr),这个方法的使用比较难,许多书本上都没有相关的介绍,这个是时间监视操作,在网上查找了很多资料才发现相关的Timer(2000,ActionListener)这个方法。 4.2 游戏工作模块 4.2.1模块功能演示 当点击游戏开始时,游戏开始进行,工作面板上出现“钱”,玩家需要用手标去点击钱,当点中时,分数增加10,不点击的话一段时间钱消失,游戏结束并弹出得分对话框 4.2.2模块算法 这部分的主要算法应该在钱的随即出现的处理上,主要代码如下: public int getRow() { return (int)(Math.random() * 4D); } public int getCol() { return (int)(Math.random() * 4D); } public void placeMoney() { m.setLocation(getRow() * 116, getCol() * 117); m.setVisible(true); } 然后对于处理鼠标点钟钱以后,钱就会出现在另外一个地方,这里用到了鼠标的监视器,其主要代码如下: board.getM().addMouseListener(this); public void mouseClicked(MouseEvent e) { board.dispear(); addScore(); s.display(); stop(); start(); } 4.2.3功能介绍 其功能主要是当鼠标点击中钱时,激发鼠标点击事件,然后执行board.dispear();s.display();stop();start();这些方法使的钱在当前位子消失,然后出现在另外一个随机位子。 4.3 难度设置模块 4.3.1模块功能演示 当玩家点击不同低级,中级,高级不同的按钮时,设置不同的游戏起始间隔时间其主要是通过类中的监视器调用时间SetTimer类中的函数对起始时间进行设置。 4.3.2模块算法 这里SetTimer类中的设置时间函数代码如下: public int getTimeLength() { return timeLength; } public void setTimeLength(int len) { timeLength = len; } 然后主类通过 else if(e.getSource()==item1) { dur.setTimeLength(2000); d=1; } else if(e.getSource()==item2) { dur.setTimeLength(1500); d=2; } else if(e.getSource()==item3) { dur.setTimeLength(1000); d=3; } 对其进行调用。 4.3.3功能介绍 当点击低级时,起始时间设置为2秒,也就是说开始时,你需要在两秒种之内点击画面中出现的钱,点击中级按钮设置起始时间为1.5秒,高级时为1秒。 4.4 数据库显示模块 4.4.1模块功能演示 因为数据库这方面的东西处理起来可以多种多样,选择的数据库不一样,连接方法上有点少许的差别。 我选用的是Mcrosoft access2003,因为这个数据库的使用方法是课本上介绍的,用这个数据库更能体现课本和实践的结合。功能显示分为3个不同难度的显示,因为保存的数据是3个不同难度的记录,所以需要对3个不同的表进行相应的操作,不能在一个表中包括所有的。演示图如下: 这个是低难度的成绩排行榜,根据题目要求只要求前3名的成绩记录,所以显示成绩时,我只是把成绩记录前3名保存了下来,然后通过表组建显示了出来,其余低于前3名的分数记录不作处理。 这个是难度为中级的排名显示 这个是难度为高级的排名显示,因为这个当时还没玩高难度的游戏,所以里面的姓名,分数都是空的。当然只要有人玩的时候数据库就会保存数据的,若是想试验一下,可以自己运行程序,设置高难度后进行游戏。 4.4.2模块算法 这里面主要一点就是与数据库的连接,用不同的数据连接代码有少许差别。因为我运用的数据库系统是Microsofr Access2003,因此用的是数据库的连接代码如下: con=DriverManager.getConnection("jdbc:odbc:getMoney","",""); sql=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 从代码可以看出我用的是桥接器形式来处理数据库与java的连接的,开始的时候还得创建桥接器,这个创建桥接器的方法是通用的,代码如下: try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e) { System.out.println(""+e); } 4.4.3功能介绍 这部分功能就是用来显示玩家游戏成绩的排行,当然只是显示前3名的。当用户的成绩达到了前3名的成绩时,系统将自动保存其成绩到数据库里面,然后再通过数据库的查询把成绩记录调出来,用java里面的表组件进行输出。 可以显示不同难度的成绩记录,这是通过查询不同表实现的,在保存时也是把不同难度的成绩记录保存再不同的表中。所以可以通过不同的查询不同的表,进行相应的显示操作. 4.5 数据库更新模块 4.5.1模块功能演示 这部分功能是用来向数据库中的表输入记录的,当玩家的分数打破记录,达到前3名时,或调用这部分功能,让玩家输入自己的姓名,然后通过数据库的更新语句,把玩家的信息保存到数据库中,替换原来的信息。当然根据不同的难度等级,系统会对不同的数据库中的表进行相应的更新。演示图如下: 当你输入你的姓名后,点击确认键,你的分数和排名就会被自动的加入到数据库中,在数据库里就有你的信息了。你可以通过排名显示功能,就可以显示你在数据库中的排名和成绩等信息了。 点击显示后如下图: 在上图中可以清晰地看到你的排名和分数。这个是难度为低的前3名的成绩,然后中级难度和高级难度的成绩录入功能就不详细的讲解了,大家可以自己运行成绩,设置难度,然后观看得分记录情况。 4.5.2模块算法 这面运用的与数据库连接方法与前面的数据显示功能的方法一样,这里就不再详细说明此部分的代码了,然后就把数据库更新的部分功能说一下吧,具体代码如下: if(num>a[0]) { String str=JOptionPane.showInputDialog(null, "请输入您的姓名","你的分数打破记录啦!",JOptionPane.INFORMATION_MESSAGE); sql.execute("UPDATE show1 SET name='"+str+"',grade="+num+" WHERE rank='1'"); } else if(num>a[1]) { String str=JOptionPane.showInputDialog(null, "请输入您的姓名","你的分数打破记录啦!",JOptionPane.INFORMATION_MESSAGE); sql.execute("UPDATE show1 SET name='"+str+"',grade="+num+" WHERE rank='2'"); } else if(num>a[2]) { String str=JOptionPane.showInputDialog(null, "请输入您的姓名","你的分数打破记录啦!",JOptionPane.INFORMATION_MESSAGE); sql.execute("UPDATE show1 SET name='"+str+"',grade="+num+" WHERE rank='3'"); } 这就是运用的数据库更新算法,需要注意的是,更新时注意与数据库中的数据类型与代码中的数据类型得一致,我在编程过程中就出现了此问题,费了很大劲才弄明白问题的所在,当然这都是编程经验不足的问题,大家需得注意。 4.5.3功能介绍 这部分就是数据库录入功能,当玩家成绩打破记录,数据库信息更新,然后玩家可以通过显示记录功能观看记录的分数和名次。 结  论 在完成这个程序时,遇到不少困难。由于编程经验的缺乏,使得编写程序时没有一个具体清晰的方案,无重下手,就是不知道怎么写。所以就重网上下了几份编好的了程序,其中大多错误不能运行。看了大体过程,明白了需编写的功能和算法,开始着手写自己的程序。虽然有程序可以参照,使得自己编写程序的过程相对简单的多,然而却也遇到不少困难。 首先,由于学到的东西和实际运用的东西有很大差别,学的东西都比较简单,而且并不是很深,对于实际编程来说缺乏很多东西,比如设置对话框时,书本只有.showConfirmDialog()这样的,然而却不知道其具体参数怎么设定,像.showConfirmDialog(null,"文件 " + file.getName() + "已经改变\n想保存当前已修改文件吗?","写字板",1,2);这样的一个语句当时根本不是很清楚其具体含义,所以不是很清楚,只有网上查找,而且网上这样的分析句子的含义却并不多!再比如System.err.println("文件未找到");这么简单的一个报错输出,自己就没学到,当时还以为这句话有错,应改成System.out.println("文件未找到");。通过查找相关东西才知道,这只不过是系统报错处理的显示方法。 其次,就是编程经验的缺乏,使得编写程序的过程中不经意就出现一些错误,比如忘了在一个语句后打;,或是忘了一个},或是编程的时候把System中的S写成了小写s,然后就不能运行程序了,当然这些都是小问题。但是由于第一次编写这么长的代码使得自己有一种厌烦感,就是觉得太长了,而又一种不可完成的思想,写着写着就不想写了,而且有时出现一些问题时由于代码太长,系统报错后并不能找到其错误的地点,还得重新看一次代码,仔细分析才能知道问题出在那,不像有些编程经验丰富的人一眼就能看出问题所在。 最后,通过这次综合实验使得我学到了Java编程过程的实际运用方法,宽展了书本上学到的东西,并认识到自己学习java中的不足,使自己明白了许多在学习时没有清楚的东西,并深层明白了许多Java的功能,在编程过程中还加深了自己的编程经验,使得自己调试大程序有了一定得经验,明白了一些经常出错的地方,使得自己在今后编程可以少出错。(宋体,小四号,1.5行距) 结论应当准确、完整、明确精练,不是正文中各段的小结的简单重复。可以阐明本人在设计中的体会和见解,对存在的问题和不足应作出客观的叙述。 参 考 文 献 [1] 孙家广, 杨长青. 计算机图形学 [M]. 北京:清华大学出版社, 1995. [2] 李旭东,宗光华,毕树生等. 基于J2EE的排课系统关键问题研究 [J]. 华北科技学院报, 2002, 28(3): 249-252.(宋体,小四号,1.5行距) 附录 MACROBUTTON NoMacro [单击此处键入附录题名][可选项] MACROBUTTON NoMacro [单击此处键入内容](宋体,小四号,1.5行距) � � � ��� � � � � � � � � � show1 rank grade name show2 rank name grade show3 rank name grade � 建表的开始。 � �� � � -16-
/
本文档为【抢钱游戏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索