推箱子java课程设计.doc

上传人:夺命阿水 文档编号:16641 上传时间:2022-06-30 格式:DOC 页数:21 大小:352.31KB
返回 下载 相关 举报
推箱子java课程设计.doc_第1页
第1页 / 共21页
推箱子java课程设计.doc_第2页
第2页 / 共21页
推箱子java课程设计.doc_第3页
第3页 / 共21页
推箱子java课程设计.doc_第4页
第4页 / 共21页
推箱子java课程设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《推箱子java课程设计.doc》由会员分享,可在线阅读,更多相关《推箱子java课程设计.doc(21页珍藏版)》请在课桌文档上搜索。

1、推箱子趣味游戏1. 课程设计的目的随着科技水平的开展,人们的生活,工作节奏越来越快,同时人们的各方面的压力也越来越大。在社会的条件下,压力给人们带来很多烦恼,所以合理的解压,但又不会浪费很多时间的方式成为现代人的共同心愿。游戏随之产生,他的娱乐性和有趣性也越来越被大家所认可,小游戏可以安装在手机里,让人们无论何时何地都能玩到游戏。基于这样的目的, 我们在本次课程设计中为大家开发了一款适合休闲娱乐的小游戏推箱子趣味游戏。他不仅可以帮助人们消磨时间,还可以在一定程度上开发智力, 此游戏的挑战性更加激发大家玩此游戏的热情。此课设计是配合 JAVA 程序设计课程,深入学习掌握 JAVA 语言,熟练运用

2、 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音乐关(开) :默认为开,点击自动关

5、闭音乐和开启音乐; 9更换音乐:从不同的音乐中选取适合玩家的音乐。 3.2程序中主要方法说明 1界面框架与按钮设计界面设计中包括了,所有你所直观见到的图形界面,窗体的大小,下拉菜单中的功能菜单。使得玩家能够很直观的见到所有游戏中的功能,界面中有菜单, 包括:“选项“设置音乐“帮助,按钮包括:“重来“悔一步“第一关“上一关“下一关“最终关“选关“音乐。 局部代码如下:Menu setmuc=new Menu(设置音乐);setmuc.add(nor);setmuc.add(qin);setmuc.add(po); 音乐调用代码如下:void mystop()midi.stop();midi.cl

6、ose();sign=false;boolean isplay()return sign; 2地图的绘制形成地图以二维数组的形式进展存储的,不同的数字有着不同的含义。在地图当中不同的数字代表不同的含义我当时是将 09 解读成为不同的图形与图像。0代表地图以内的空位;1代表地图中的边缘;2代表地图以内的空位非点位;3代表地图中的箱子;4代表点位;5代表小人面部朝下;6代表小人面部朝左;7代表小人面部朝右;8代表小人面部朝上;9代表箱子已经到达点位。 3推箱子游戏的游戏性其主要功能是给用户一个友好的游戏界面,游戏中包括 50 关的地图,推箱 子这个游戏的50 个地图是事先完成的,将所有地图上面的信

7、息以数字的形式储 存在一个 20*20 的二维数组当中;然后,每一关都按照数组重新绘制地图,这样就拥有了50 X地图。 4游戏规如此的设置在游戏中要保证箱子不能重叠,箱子不能碰到墙壁,在设置过程中一定要将移动一次箱子的位置后位置的布尔值要设置为 true,不然移动一次箱子后不能再移动。 5小人与箱子移动的算法 移动中包括正移动,与悔一步的负移动。正移动:小人上下左右的移动是,归结起来上下左右是一个判断的算法,判断都是通过判断小人前面是否是空位箱子或者是墙,如果没有,就移动;有的话,据判断箱子是否可以移动,最后讨论箱子推过的,小人移动,以与被遮挡住点的图形变化,重新绘制地图,算法判断完毕.传出数

8、据记录在一个栈当中,以备“悔一步使用。负移动:通过记录在栈中的数据判断,前一步是的移动方向以与移动使用过的算法,逆向将代码重新运行,同时绘制地图以达到前一步的状态。 6移动的代码 在本游戏系统中,给人的视觉感受应该是能感受都动作的变化,逼真的人物 动作会使系统更有效。通过控制人物,箱子,空地,障碍物在数组中的位置的改变来控制移动动作。 7的应用 推箱子中的数据存储是很重要的,不然无法进展“悔一步的操作本系统。采用栈的存储方式来存储并控制人物,箱子的移动和地图的变换,悔一步操作让 玩家有了反悔的一步,这节省玩家的时间,防止因错位导致重新开始。4. 设计结果与分析4.1 程序运行结果程序编译无错误

9、,单击运行按钮,运行通过,开始时弹出该游戏的页面,然后开始游戏。一般的会显示出第一关的游戏,玩家可以根据自己的实际水平去操作,而后选择适于自己水平的关卡来玩。一开始运行程序,显示该页面时,会在页面的正中央显示出该关为第一关,以提醒玩家。第一关如如下图3所示。图3. 推箱子游戏第一关界面 当玩家想选关时,可以根据自己的意愿去选关闯。选第50关,如如下图4所示。图4. 推箱子游戏第50关页面4.2 尚需解决的问题游戏的背景音乐比拟单一,可以通过在“选项模式中添加“背景音乐导入模块,导入玩家自己喜欢的音乐。在此次课程设计中,我遇到了一些问题,如:对于面向对象的方法了解不够透彻,运用到实际的软件开发中

10、存在着困难;对于Java语言,只学习到了一些最根本的知识,这导致编写程序时经常出现一些语法错误,而且要在短时间内用Java语言来设计一个具体的系统是一个较大的挑战;还有对于正规开发一个系统的流程不熟悉,适应起来比拟慢,编写各个模块相对应的操作时,自己感觉难以动手,这明确所学的知识不能灵活运用到实际中。 对于以上的问题,自己有清楚的认识,解决方法是需要大量阅读相关的,对于书上以与上下载的资料中的Java实例必须有清楚的理解,还有就是多跟精通此方面的教师和同学交流,取其精华。对于实际动手能力与系统开发的流程的适应,必须多进展实际的练习与操作,才能有大的进步。5. 设计体会通过这次课程设计我充分了解

11、了理论与课程设计相结合的重要性,理论根底上必须有实际上的应用,在实际的应用中才能发现个种问题,再灵活的应用理论知识去解决它们。在这一周的学习过程中,我不仅能够把以前所学知识联系起来,并且还学会了一些新的知识,在此期间通过对 JAVA 设计的系统训练,使我根本上达到了这周的课程设计目的,并且懂得了要想学好课,除了要有扎实的根底知识的功底深厚外,还需要有一定的实践动手能力,操作能力.我们要学习别人的长处,改掉自己的缺点, 要懂得用网络,现在的网络包括的知识很多,就是看你能不能把握住,有没有那个心在网络上要善于讨论,在论坛里向那些高人学习,学习他们学习的方法和思想.。虽然课程设计已经完事,可是我们觉

12、得应该继续努力,自己做点东西,增加自己的学习经历和学习经验,不断的深入,了解它的内部,借助它创造财富。课程设计之所以进展的如此顺利,得力于教师的信任和支持,得力于同学们的真诚配合和勤勉不断的努力!为此,我们深深地感恩!感谢教师谆谆教诲,感恩同学们间的互帮互助。6. 参考文献1 文杰书院.JAVA程序设计完全自学手册M.:机械工业,20102 X永常.JAVA2程序设计实用教程M.:电子工业,20103 朱仲杰.JAVA2全方位学习M.:机械工业,20084 X永常等.JAVA程序设计实践教程M.:清华大学,20105 梁勇.Java语言程序设计M.:机械工业,20116 X莉.Java程序设计

13、M. :清华大学,20117 X广彬.Java课程设计M.:清华大学,20118 狄祥义. Java面向对象程序设计M. :清华大学,2010附录程序具体代码:(1)主界面设置代码如下:class mainFrame extends JFrame implements ActionListener,ItemListenerprivate static final long serialVersionUID = 1L;JLabel lb;JLabel lb2;utton btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnb

14、ack;mainpanel panel;Sound sound;oBox jc=new oBox();MenuItem renew=new MenuItem(重新开始);MenuItem back=new MenuItem(悔一步);MenuItem last=new MenuItem(上一关);MenuItem next=new MenuItem(下一关);MenuItem choose=new MenuItem(选关);MenuItem exit=new MenuItem(退出);MenuItem qin=new MenuItem(琴萧合奏);MenuItem po=new MenuIte

15、m(泡泡堂);MenuItem guang=new MenuItem(灌篮高手);MenuItem nor=new MenuItem(默认);MenuItem eye=new MenuItem( eyes 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);Contain

16、er cont=getContentPane();cont.setLayout(null);cont.setBackground(Color.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.addAct

17、ionListener(this);choose.addActionListener(this);exit.addActionListener(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);gu

18、ang.addActionListener(this);eye.addActionListener(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(更换音乐,Swi

19、ngConstants.CENTER);add(lb);add(lb2);lb.setBounds(100,20,400,20);lb.setForeground(Color.white);lb2.setBounds(625,500,55,20);lb2.setForeground(Color.white);btnrenew=new utton(重来);btnback=new utton(悔一步);btnlast=new utton(上一关);btnnext=new utton(下一关);btnchoose=new utton(选关);btnfirst=new utton(第关);btnove

20、r=new utton(最终关);btnmuc=new utton(音乐关);add(btnrenew);add(btnlast);add(btnnext);add(btnchoose);add(btnfirst);add(btnover);add(btnmuc);add(btnback);btnrenew.setBounds(625,100,80,30);btnrenew.addActionListener(this);btnback.setBounds(625,150,80,30);btnback.addActionListener(this);btnfirst.setBounds(625

21、,200,80,30);btnfirst.addActionListener(this);btnlast.setBounds(625,250,80,30);btnlast.addActionListener(this);btnnext.setBounds(625,300,80,30);btnnext.addActionListener(this);btnover.setBounds(625,350,80,30);btnover.addActionListener(this);btnchoose.setBounds(625,400,80,30);btnchoose.addActionListen

22、er(this);btnmuc.setBounds(625,450,80,30);btnmuc.addActionListener(this);jc.setBounds(625,530,80,20);jc.addItem(默认);jc.addItem(琴萧合奏);jc.addItem(泡泡堂);-*jc.addItem(灌篮高手);jc.addItem(eyes on me);jc.addItemListener(this);cont.add(jc);sound=new Sound();sound.loadSound();panel=new mainpanel();add(panel);pan

23、el.Tuixiangzi(panel.level);panel.requestFocus();validate();(2)音乐调用代码如下:class SoundString path=new String(musics);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

24、.setSequence(seq);midi.start();midi.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);catch (Exception 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+) N

25、ode walls = new Node(i, 5); wallList.add(walls); for (int i = 11; i 4; i-) Node walls = new Node(i, 11); wallList.add(walls); wallList.add(new Node(5, 10); wallList.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)

26、; 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); wallList.add(new Node(8, 10); / 将墙壁的对象置为true for (int i = 0; i wallList.size(); i+) Node n = (Node) wallList.get(i); an.xn.y

27、 = 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; / public void moveDisable(Node n1, Node n2, int d1, int d2) switch (direction) case 4: n1.x -= d1; n2.x -= d1; break; ca

28、se 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|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;repaint();manY-;mystack.push(10);else if(map

29、manY-1manX=3)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=9;repaint();manY-;mystack.push(11);else if(mapmanY-2manX=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=3;repaint

30、();manY-;mystack.push(11);else mapmanYmanX=8;repaint();else if(mapmanY-1manX=9)if(mapmanY-2manX=4)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapmanYmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=9;repaint();manY-;mystack.push(11);else if(mapmanY-2manX=2)if(maptmpmanYmanX=4|maptmpmanYmanX=9)mapman

31、YmanX=4;else mapmanYmanX=2;mapmanY-1manX=8;mapmanY-2manX=3;repaint();manY-;mystack.push(11);else mapmanYmanX=8;repaint();if(mapmanY-1manX=1)mapmanYmanX=8;repaint();else if(e.getSource()=btnback|e.getSource()=back)if(panel.isMystackEmpty()JOptionPane.showMessageDialog(this, 您还未移动!);elseswitch(panel.b

32、ack()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.ge

33、tSource()=nor)jc.setSelectedIndex(0);else if(e.getSource()=qin)jc.setSelectedIndex(1);else if(e.getSource()=guang)jc.setSelectedIndex(3);else if(e.getSource()=eye)jc.setSelectedIndex(4);else if(e.getSource()=po)jc.setSelectedIndex(2);boolean isMystackEmpty()return mystack.isEmpty();int back()return

34、(Integer)mystack.pop();void remove()mystack.removeAllElements();(4)栈的代码如下所示:else if(e.getSource()=btnback|e.getSource()=back)if(panel.isMystackEmpty()JOptionPane.showMessageDialog(this, 您还未移动!);elseswitch(panel.back()case 10:panel.backup(10);break;case 11:panel.backup(11);break;case 20:panel.backdow

35、n(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()=nor)jc.setSelectedIndex(0);else if(e.getSource()=qin)jc.setSelectedIndex(1);else if(e.getSource()=guang)jc.setSelectedIndex(3);else if(e.getSource()=eye)jc.setSelectedIndex(4);else if(e.getSource()=po)jc.setSelectedIndex(2);boolean isMystackEmpty()return mystack.isEmpty();int back()return (Integer)mystack.pop();void remove()mystack.removeAllElements();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号