




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实用标准文案推箱子趣味游戏1 .课程设计的目的随着科技水平的发展,人们的生活,工作节奏越来越快,同时人们的各方面的 压力也越来越大。在社会的条件下,压力给人们带来很多烦恼,所以合理的解压, 但又不会浪费很多时间的方式成为现代人的共同心愿。游戏随之产生,他的娱乐 性和有趣性也越来越被大家所认可,小游戏可以安装在手机里,让人们无论何时 何地都能玩到游戏。基于这样的目的,我们在本次课程设计中为大家开发了一款 适合休闲娱乐的小游戏一推箱子趣味游戏。他不仅可以帮助人们消磨时间,还可 以在一定程度上开发智力,此游戏的挑战性更加激发大家玩此游戏的热情。此课设计是配合JAVA程序 设计课程,深入学习掌握JAV
2、A语言,熟练运用Java工具对系统的编写。通过课 程设计各个项目的综合训练,培养学生实际分析问题,编程和动手能力,提高学生 的综合素质。2 .系统总体设计在此游戏中本着娱乐为目的,游戏者不仅可以在玩游戏还可以享受音乐,游 戏界面简单,操作容易,在玩游戏的同时还可以锻炼大家的反应速度及灵敏程度, 在游戏中设置关数,级别由低到高,一关比一关难,提高大家的兴趣,玩家可以 自由的选关,并设置了分数的存储系统。系统中又增加了音乐的设置可以让玩家 享受音乐。通过对小人移动箱子是否到达墙边进行判断决定胜负及是否可以进入 下一关。2.1 系统功能模块划分在该系统中总共划分了五个模块(1)初始化模块,对游戏界面
3、进行初始化操作,对各个按钮的功能进行操作 使之当动作发生时有一定的反应及相应。(2)画图模块,主要是对地图的绘制进行画图的操作,在此游戏中不同的数 字代表不同的含义。(3)移动箱子模块,在推箱子游戏中最主要的模块,用户可以移动箱子到界 面中的各个地方,以完成游戏设定的任务。精彩文档(4)移动小人模块,同过对小人的操作使之小人能够操作木块到各个位置。(5)功能控制模块,通过对此功能的设置,可以对游戏的功能进行设置,可 以设置背景音乐,及通过的关数进行一些必要的设定。2.2 系统功能结构图推箱子游戏主要分为初始化模块,画图模块,移动箱子模块,移动小人模 块,功能控制模块.推箱子游戏功能模块图如图1
4、所示。系统功能模块移动小人模块功能控制模块初始化模块图1.功能模块图2.3 系统流程图推箱子游戏由功能和规则的确定。系统流程图如下图2所示第一关图2.系统执行流程图3 .详细设计3.1 程序中自定义类说明(1)重来:重新开始当前关;(2)悔一步:返回上一移动状态(可以连续返回多步);(3)第一关:游戏系统默认开始关为第一关,此按钮可以将关从其它关跳跃到第 一关;(4)上一关:返回到当前关的上一关;(5)下一关:返回到当前关的下一关;(6)最终关:跳跃到最后一关,即第五十关;(7)选关:选择想要玩的关;(8)音乐关(开):默认为开,点击自动关闭音乐和开启音乐;(9)更换音乐:从不同的音乐中选取适
5、合玩家的音乐。3.2 程序中主要方法说明(1)界面框架与按钮设计界面设计中包括了,所有你所直观见到的图形界面,窗体的大小,下拉菜单中 的功能菜单。使得玩家能够很直观的见到所有游戏中的功能,界面中有菜单,包 括:“选项”“设置音乐” “帮助”,按钮包括:“重来”“悔一步”“第一关” “上一 关”“下一关” “最终关” “选关”“音乐”。部分代码如下:Menu setmuc=new Menu("设置音乐");setmuc.add(nor);setmuc.add(qin);setmuc.add(po);音乐调用代码如下:void mystop()midi.stop();midi.
6、close();sign=false;boolean isplay()return sign;(2)地图的绘制形成地图以二维数组的形式进行存储的,不同的数字有着不同的含义。在地图当 中不同的数字代表不同的含义我当时是将09解读成为不同的图形与图像。"0"代表"地图以内的空位";"1"代表"地图中的边缘";"2"代表"地图以内的空位非点位;"3"代表"地图中的箱子";"4"代表"点位";"5&quo
7、t;代表"小人面部朝下";"6"代表"小人面部朝左";"7"代表"小人面部朝右”;"8"代表"小人面部朝上";"9"代表"箱子已经到达点位。(3)推箱子游戏的游戏性其主要功能是给用户一个友好的游戏界面,游戏中包括50关的地图,推箱子这个游戏的50个地图是事先完成的,将所有地图上面的信息以数字的形式储 存在一个20*20的二维数组当中;然后,每一关都按照数组重新绘制地图, 这样 就拥有了 50张地图。(4)游戏规则的设置在游戏中要保证箱子
8、不能重叠,箱子不能碰到墙壁,在设置过程中一定要将 移动一次箱子的位置后位置的布尔值要设置为true,不然移动一次箱子后不能再移动。(5)小人与箱子移动的算法移动中包括正移动,与"悔一步”的负移动。正移动:小人上下左右的移动是, 归结起来上下左右是一个判断的算法,判断都是通过判断小人前面是否是空位箱 子或者是墙,如果没有,就移动;有的话,据判断箱子是否可以移动,最后讨论 箱子推过的,小人移动,以及被遮挡住点的图形变化,重新绘制地图,算法判断完毕.传出数据记录在一个栈当中,以备“悔一步”使用。负移动:通过记录在栈中的 数据判断,前一步是的移动方向以及移动使用过的算法,逆向将代码重新运行,
9、同时 绘制地图以达到前一步的状态。(6)移动的代码在本游戏系统中,给人的视觉感受应该是能感受都动作的变化,逼真的人物 动作会使系统更有效。通过控制人物,箱子,空地,障碍物在数组中的位置的改 变来控制移动动作。(7)的应用推箱子中的数据存储是很重要的,不然无法进行“悔一步”的操作本系统。 采用栈的存储方式来存储并控制人物,箱子的移动和地图的变换,悔一步操作让 玩家有了反悔的一步,这节省玩家的时间,避免因错位导致重新开始。4 .设计结果与分析4.1 程序运行结果程序编译无错误,单击运行按钮,运行通过,开始时弹出该游戏的页面,然 后开始游戏。一般的会显示出第一关的游戏,玩家可以根据自己的实际水平去操
10、 作,而后选择适于自己水平的关卡来玩。开始运行程序,显示该页面时,会在页面的正中央显示出该关为第一关,以提醒玩家。第一关如下图3所示图3.推箱子游戏第一关界面当玩家想选关时,可以根据自己的意愿去选关闯。选第50关,如下图4所示。现在是第 50关图4.推箱子游戏第50关页面f b 1 a 匕*kBk b. i IF s LB t - h - b 餐 H Kfts”fcH*sH H 特*>X H H4.2 尚需解决的问题游戏的背景音乐比较单一,可以通过在“选项”模式中添加“背景音乐导入” 模块,导入玩家自己喜欢的音乐。在此次课程设计中,我遇到了一些问题,如: 对于面向对象的方法了解不够透彻,
11、运用到实际的软件开发中存在着困难;对于 Java语言,只学习到了一些最基本的知识,这导致编写程序时经常出现一些语法 错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战; 还有对于正规开发一个系统的流程不熟悉,适应起来比较慢,编写各个模块相对 应的操作时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍, 对于书上以及网站上下载的资料中的 Java实例必须有清楚的理解,还有就是多跟 精通此方面的老师和同学交流,取其精华。对于实际动手能力与系统开发的流程 的适应,必须多进行实际的练习与操作,才能有大的进
12、步。5 .设计体会通过这次课程设计我充分了解了理论与课程设计相结合的重要性,理论基础 上必须有实际上的应用,在实际的应用中才能发现个种问题,再灵活的应用理论知 识去解决它们。在这一周的学习过程中,我不仅能够把以前所学知识联系起来, 并且还学会了一些新的知识,在此期间通过对 JAVA设计的系统训练,使我基本 上达到了这周的课程设计目的,并且懂得了要想学好课,除了要有扎实的基础知识 的功底深厚外,还需要有一定的实践动手能力,操作能力.我们要学习别人的长处, 改掉自己的缺点, 要懂得用网络,现在的网络包括的知识很多,就是看你能不能 把握住,有没有那个心在网络上要善于讨论,在论坛里向那些高人学习,学习
13、他 们学习的方法和思想.o虽然课程设计已经完事,可是我们觉得应该继续努力,自 己做点东西,增加自己的学习经历和学习经验,不断的深入,了解它的内部,借 助它创造财富。课程设计之所以进行的如此顺利,得力于老师的信任和支持,得 力于同学们的真诚配合和勤勉不断的努力!为此,我们深深地感恩!感谢老师谆谆教导,感恩同学们间的互帮互助。6 .参考文献1文杰书院.JAVA程序设计完全自学手册M.北京:机械工业出版社,20102张永常.JAVA2程序设计实用教程M.北京:电子工业出版社,20103朱仲杰.JAVA2全方位学习M.北京:机械工业出版社,20084张永常等.JAVA程序设计实践教程M.北京:清华大学
14、出版社,20105梁勇.Java语言程序设计M.北京:机械工业出版社,20116郑莉.Java程序设计M.北京:清华大学出版社,20117张广彬.Java课程设计M.北京:清华大学出版社,20118狄祥义.Java面向对象程序设计M.北京:清华大学出版社,2010附录程序具体代码:(1)主界面设置代码如下:class mainFrame extends JFrame implements ActionListener,ItemListenerprivate static final long serialVersionUID = 1L;JLabel lb;JLabel lb2;JButton
15、btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback; mainpanel panel;Sound sound;JComboBox jc=new JComboBox();MenuItem renew=new MenuItem("重新开始");MenuItem back=new MenuItem("悔一步");MenuItem last=new MenuItem("上一关"力MenuItem next=new MenuItem("下一关"
16、力MenuItem choose=new MenuItem(" 选关");MenuItem exit=new MenuItem("退出");MenuItem qin=new MenuItem(" 琴萧合奏");MenuItem po=new MenuItem("泡泡堂");MenuItem guang=new MenuItem("灌篮高手");MenuItem nor=new MenuItem("默认");MenuItem eye=new MenuItem(" ey
17、es on me");MenuItem about=new MenuItem("关于推箱子.");mainFrame()super("推箱子 v2.0");setSize(720,700);setVisible(true);setResizable(false);setLocation(150,10);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container cont=getContentPane();cont.setLayout(null);cont.setBackground(Colo
18、r.black);Menu choice=new Menu("选项");choice.add(renew);choice.add(last);choice.add(next);choice.add(choose);choice.add(back);choice.addSeparator();choice.add(exit);renew.addActionListener(this);last.addActionListener(this);next.addActionListener(this);choose.addActionListener(this);exit.add
19、ActionListener(this);back.addActionListener(this);Menu setmuc=new Menu("设置音乐");setmuc.add(nor);setmuc.add(qin);setmuc.add(po);setmuc.add(guang);setmuc.add(eye);nor.addActionListener(this);qin.addActionListener(this);po.addActionListener(this);guang.addActionListener(this);eye.addActionList
20、ener(this);Menu help=new Menu("帮助)help.add(about);about.addActionListener(this);MenuBar bar=new MenuBar();bar.add(choice);bar.add(setmuc);bar.add(help);setMenuBar(bar);nor.setEnabled(false);lb=new JLabel("推箱子",SwingConstants.CENTER);lb2=new JLabel("更换音乐",SwingConstants.CENTE
21、R); add(lb);add(lb2);lb.setBounds(100,20,400,20); Ib.setForeground(Color.white); lb2.setBounds(625,500,55,20); lb2.setForeground(Color.white); btnrenew=new JButton("重来"); btnback=new JButton("悔一步"); btnlast=new JButton("上一关"); btnnext=new JButton("下一关"); btnch
22、oose=new JButton("选关"); btnfirst=new JButton("第1关"); btnover=new JButton("最终关"); btnmuc=new JButton("音乐关"); add(btnrenew);add(btnlast); add(btnnext); add(btnchoose); add(btnfirst); add(btnover); add(btnmuc); add(btnback);btnrenew.setBounds(625,100,80,30); btnr
23、enew.addActionListener(this);btnback.setBounds(625,150,80,30); btnback.addActionListener(this); btnfirst.setBounds(625,200,80,30); btnfirst.addActionListener(this);btnlast.setBounds(625,250,80,30); btnlast.addActionListener(this);btnnext.setBounds(625,300,80,30); btnnext.addActionListener(this);btno
24、ver.setBounds(625,350,80,30); btnover.addActionListener(this);btnchoose.setBounds(625,400,80,30); btnchoose.addActionListener(this); btnmuc.setBounds(625,450,80,30); btnmuc.addActionListener(this);jc.setBounds(625,530,80,20);jc.addItem("默认) jc.addItem("琴萧合奏"); jc.addItem("泡泡堂&quo
25、t;);-* jc.addItem("灌篮高手"); jc.addItem("eyes on me"); jc.addltemListener(this); cont.add(jc);sound=new Sound();sound.loadSound();panel=new mainpanel();add(panel);panel.Tuixiangzi(panel.level);panel.requestFocus();validate。;(2)音乐调用代码如下:class SoundString path=new String("musics
26、");String file=new String("nor.mid");Sequence seq;Sequencer midi;boolean sign;void loadSound()try seq=MidiSystem.getSequence(new File(path+file);midi=MidiSystem.getSequencer();midi.open();midi.setSequence(seq);midi.start();midi.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);catch (Exceptio
27、n ex) ex.printStackTrace();sign=true;void mystop()midi.stop();midi.close();sign=false;boolean isplay()return sign;void setMusic(String e)file=e;(3)规则代码如下:public void createWall() for (int i = 5; i < 12; i+) Node walls = new Node(i, 5);wallList.add(walls);for (int i = 11; i < 14; i+) Node walls
28、 = new Node(i, 6);wallList.add(walls);wallList.add(new Node(13, 7);wallList.add(new Node(13, 8);wallList.add(new Node(13, 9);wallList.add(new Node(12, 9);wallList.add(new Node(12, 10);for (int i = 12; i > 4; i-) Node walls = new Node(i, 11);wallList.add(walls);wallList.add(new Node(5, 10);wallLis
29、t.add(new Node(4, 10);wallList.add(new Node(4, 9);wallList.add(new Node(4, 8);wallList.add(new Node(4, 8);wallList.add(new Node(4, 7);wallList.add(new Node(5, 7);wallList.add(new Node(5, 6);wallList.add(new Node(7, 7);wallList.add(new Node(8, 7);wallList.add(new Node(9, 7);wallList.add(new Node(8, 9
30、);wallList.add(new Node(8, 10);/将墙壁的对象置为truefor (int i = 0; i < wallList.size(); i+) Node n = (Node) wallList.get(i);an.xn.y = true;public void moveDisable(Node n, int d1, int d2) switch (direction) case 4:n.x -= d1;break;case 1:n.y -= d2;break;case 2:n.x -= d1;break;case 3:n.y -= d2;break;/publi
31、c void moveDisable(Node n1, Node n2, int d1, int d2) switch (direction) case 4:n1.x -= d1;n2.x -= d1;break;case 1:n1.y -= d2;n2.y -= d2;break;case 2:n1.x -= d1;n2.x -= d1;break;case 3:n1.y -= d2;n2.y -= d2;break;(4)物移动代码:void moveup()if(mapmanY-1manX=2|mapmanY-1manX=4)if(maptmpmanYmanX=4|maptmpmanYm
32、anX=9) mapmanYmanX=4;elsemapmanYmanX=2;mapmanY-1manX=8;repaint();manY-;mystack.push(10);else if(mapmanY-1manX=3)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9) mapmanYmanX=4;elsemapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=9;repaint();manY-;mystack.push(ll);else if(mapmanY-2manX=2)if(maptmpm
33、anYmanX=4|maptmpmanYmanX=9) mapmanYmanX=4;elsemapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=3;repaint();manY-;mystack.push(ll);elsemapmanYmanX=8;repaint();else if(mapmanY-1manX=9)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9) mapmanYmanX=4;elsemapmanYmanX=2;mapmanY-1manX=8; mapmanY-2manX=9;
34、repaint();manY-;mystack.push(ll);else if(mapmanY-2manX=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9) mapmanYmanX=4;elsemapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=3; repaint();manY-;mystack.push(ll); else mapmanYmanX=8; repaint();if(mapmanY-1manX=1)mapmanYmanX=8;repaint();else if(e.getSource()=btnback|e.g
35、etSource()=back)if(panel.isMystackEmpty()JOptionPane.showMessageDialog(this,"您还未移动! ! !"); else switch(panel.back()case 10:panel.backup(10);break;case 11:panel.backup(11);break;case 20:panel.backdown(20); break;case 21:panel.backdown(21); break;case 30:panel.backleft(30); break;case 31:panel.backleft(31); break;case 40:panel.backright(40); break;case 41:panel.backright(41); break;panel.requestFocus();else if(e.getSource()=no
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 住建局官方合同范例
- 科普教育器材租赁与科技馆展览内容更新与技术支持与培训服务合同
- 先进半导体光刻胶研发与供应战略协议
- 区块链智能合约代码审查与合规性验证合同
- 网红咖啡品牌省级区域代理权授予合同
- 非洲黄金矿开采项目管理与技术支持合同
- 研学旅行专用智能教育机器人演示平台租赁协议
- 线路杆塔电气安装与线路维护合同
- 大数据存储服务器集群租赁与数据安全培训合同
- 抖音短视频营销效果评估合同
- 棋牌室运营方案策划书
- 更换岩棉彩钢板施工方案
- MOOC 大学摄影-河南理工大学 中国大学慕课答案
- 劲椎病预防保健
- 2024年上海高职院校学生技能大赛短视频创作与运营赛项样题
- 四害消杀报告
- 天车隐患排查分析报告
- 光伏安装施工危险源辨识、风险评价及控制措施
- 民营二级综合医院项目可行性研究报告
- 浙江省宁波三锋教研联盟2023-2024学年高二上学期期中联考英语试题 (解析版)
- JGJT301-2013 大型塔式起重机混凝土基础工程技术规程
评论
0/150
提交评论