您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > java推箱子实验报告
Java设计报告1.1设计背景:经典的推箱子游戏是一个来自日本的古老游戏,目的是在训练逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。一想起这款小游戏,就想起了我的童年,它陪我们这一代度过了一段美好且愉快的时光。所以想到自己也写一个推箱子游戏,既可以享受过去的美好回忆,又可以锻炼自己的Java设计能力。1.2设计目的:综合运用在校期间所学到的理论知识和技能,并且结合课外参考资料,设计开发基于JAVA的推箱子小游戏,让自己能够熟悉并熟练应用系统的开发过程,培养独立思考能力,检验学习成果和实际动手能力,以及提高工程实践能力,为今后的工作打下坚实的基础。1.3游戏需求:玩家是通过对小人的移动操作来控制推动箱子的,并且玩家需要避过障碍物以及死角,才能将其推放到指定位置从而达到过关的目的。如果玩家将箱子推入死角导致箱子无法移动或不能移动到指定位置则闯关失败,可以通过悔步或重新开始等操作来重新挑战本关。游戏功能需求如下所示:游戏界面需求:简洁美观的用户界面,可以带给用户自然清晰的画面。游戏内容需求::小人需要前、后、左、右四张图片,移动中的箱子与终点上的箱子要所有区别,因此需要两不同的图片以示区别。键盘处理事件:控制小人与箱子的移动,可通过键盘方向键(上、下、左、右键)对小人进行上、下、左、右的移动,并且能够推动箱子。显示需求:当所有箱子都到达指定位置后即可过关,若进入死角则无法过关,需要进行悔步或重新开始的操作。可以由玩家喜欢选择关卡进行游戏。2.1游戏设计分析从面向对象的观念出发,本程序可分为以下几个对象:地图文件的引用小人与箱子的移动程序运算逻辑绘图显示平台分析对象的技巧在于它的重复利用及维护效率。如果要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如地图文件、小人与箱子的移动以及程序的运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。2.2.1.地图文件的引用在设计游戏程序时,通常都是把游戏的画面布局数据存放在一个地图文件中。程序通过读取地图文件中的数据来获取画面的布局安排。地图文件是20*20的变量数组文件,在地图不同的数字代表不同的意义。把这组数据保存到一个文件中,这个文件就是地图文件了。2.2.2.程序运逻辑程序中逻辑运算包含小人与箱子的移动、键盘事件的响应、保存数据以实现悔步以及重新开始的操作等等。2.2.3.绘图绘图主要是用于在小人与箱子的移动后,原位置由草地填补,以此来表示小人与箱子的移动以及其画面的连贯性。2.2.4.显示平台“可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。3.详细设计界面图如下:(1)界面框架与按钮设计界面设计中包括了所有玩家可以直观见到的图形界面,窗体的大小,界面中的功能按钮,让玩家可以方便使用操作。界面中的按钮包括:“Regretstep”,“Restart”,“Thelastlevel”,“Thenextlevel”,“Thefirstpass”,“Select”。并且各个按钮的名称与相关功能为:“Regretstep”:返回上一移动状态(可以连续返回多步);“Restart”:重新开始当前关;“Thelastlevel”:返回到当前关的上一关;“Thenextlevel”:跳转到当前关的下一关;“Thefirstpass”:游戏系统默认开始关为第一关,此按钮让玩家可以方便从其它关卡直接跳转到第一关;“Select”:选择想要挑战的关卡。publicclassTuixiangzi{publicstaticvoidmain(String[]args){newmainFrame();}}classmainFrameextendsJFrameimplementsActionListener,ItemListener{JLabellb;JLabellb2;JButtonbtnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback;mainpanelpanel;Soundsound;JComboBoxjc=newJComboBox();MenuItemrenew=newMenuItem(Restart);MenuItemback=newMenuItem(Regretstep);MenuItemlast=newMenuItem(Thelastlevel);MenuItemnext=newMenuItem(Thenextlevel);MenuItemchoose=newMenuItem(选关);MenuItemexit=newMenuItem(退出);MenuItemqin=newMenuItem(1);MenuItempo=newMenuItem(2);MenuItemguang=newMenuItem(3);MenuItemnor=newMenuItem(默认);MenuItemeye=newMenuItem(4);MenuItemabout=newMenuItem(关于推箱子...);mainFrame(){super(推箱子v2.0);setSize(720,720);setVisible(true);setResizable(false);setLocation(300,20);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Containercont=getContentPane();cont.setLayout(null);cont.setBackground(Color.black);Menuchoice=newMenu(选项);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.addActionListener(this);back.addActionListener(this);Menusetmuc=newMenu(设置音乐);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.addActionListener(this);Menuhelp=newMenu(帮助);help.add(about);about.addActionListener(this);MenuBarbar=newMenuBar();bar.add(choice);bar.add(setmuc);bar.add(help);setMenuBar(bar);nor.setEnabled(false);lb=newJLabel(JAVA推箱子v2.0版!!!,SwingConstants.CENTER);lb2=newJLabel(更换音乐,SwingConstants.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=newJButton(Restart);btnback=newJButton(Regretstep);btnlast=newJButton(Thelastlevel);btnnext=newJButton(Thenextlevel);btnchoose=newJButton(选关);btnfirst=newJButton(Thefirstpass);btnover=newJButton(Thefinalclosing);btnmuc=newJButton(Themusic);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,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.addActionListener(this);btnmuc.setBounds(625,450,80,30);btnmuc.addActionListener(this);jc.setBounds(625,530,80,20);jc.addItem(默认);jc.addItem(1);jc.addItem(2);jc.addItem(3);jc.addItem(4);jc.addItemListener(this);cont.add(jc);sound=newSound();sound.loadSound();panel=newmainpanel();add(panel);panel.Tuixiangzi(panel.level);panel.requestFocus();validate();}(2)地图的绘制形成地图以二维数组的形式进行存储,不同的数家代表了不同的含义。在本小游戏的地图文件中,0~9这十个数字的定义如下所示:编号0:代表未定义的区域;编号1:代表障碍物(或者边界);编号2:代表草地;编号3:代表箱子(未到指定位置);编号4:代表目的地;编号5:代表小人向下移动方向;编号6:代表小人向左移动方向;编号7:代表小人向右移动方向;编号8:代表小人向上移动方向;编号9:代表到达指定位置时的箱子。下图为数字对应的实际界面00000000000000000000(3)推箱子小游戏的游戏性其主要功能是给用户一个良好的游戏界面,游戏中包括50关的地图文件。地图文件是是先写好的,所有界面信息以数家的形式存放在一个20*20的二维数组当中并且把这些地图文件统一放在一个地图文件中,便于程序调用地图
本文标题:java推箱子实验报告
链接地址:https://www.777doc.com/doc-1886071 .html