推箱子游戏设计与实现.docx
- 文档编号:10414898
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:29
- 大小:706.15KB
推箱子游戏设计与实现.docx
《推箱子游戏设计与实现.docx》由会员分享,可在线阅读,更多相关《推箱子游戏设计与实现.docx(29页珍藏版)》请在冰豆网上搜索。
推箱子游戏设计与实现
师大学学院本科毕业设计
推箱子游戏设计与实现
学生
起明
学号
2012101087
所在系
通信工程系
专业名称
通信工程
班级
2012级宽带一班
指导教师
陆园
师大学学院
二○一六年五月
推箱子游戏的设计与实现
前言
于如今竞争激烈的快节奏时代中,人们的生活水平越来越繁忙,因为此,愈来愈多的人感到心的空虚与压力带来的烦躁,这些也带给人们许许多多心理上和身体上的困惑。
所以如何缓解当代人们的生活压力,已成为人们的共同夙愿。
这一次的这个基于JAVA的推箱子小游戏正是使用JAVA语言并且结合于Eclipses编译器,开发出了这样一款适合用于休闲的小游戏,在放松的同时也给忙碌的人们打开另一个思考的空间。
这一款基于JAVA开发的推箱子主要分为初始化、画图、移动小人、移动箱子以及功能控制共五个模块。
玩家可以通过控制游戏中的小人的移动来实现推动箱子,同时需要避开障碍物和死角方能将箱子推放到正确位置从而过关。
每关的难易程度各不相同,不仅可以供人们用以娱乐,还有助于开发智力,提高人们思考问题与想象的能力,改善人们的思维方式,拓展思维。
关键词:
JAVA解压推箱子游戏
Abstract
Intoday'scompetitiveeraoffast-paced,people'slivinglevelisbecomingmoreandmorebusy,becauseofthis,anincreasingnumberofpeoplehavefeltirritabilityofemptinessandpressure,thesealsobringpeoplemanypsychologicalandphysicalpuzzles.Sohowtoalleviatethepressureofcontemporarylife,hasbecomethecommonaspirationofthepeople.ThistimethebasedonJavaSokobangameisusingtheJavalanguageandthecombinationoftheeclipsesofthecompilerdevelopedsuchasuitableforleisuregame,inarelaxedbutalsotothebusypeopletoopenanotherthinkingspace.ThisisbasedontheJAVAdevelopmentofthepushboxisdividedintoinitialization,drawing,movingpeople,movingboxesandatotaloffivefunctionalcontrolmodule.Playerscancontrolthegamethroughthevillain'smobiletoachievethepromotionofthebox,whiletheneedtoavoidobstaclesanddeadsidetopushtheboxtothecorrectpositionsothat.Eachlevelofdifficultyisdifferent,notonlycanbeusedforpeopletoentertain,butalsohelpstodevelopintelligence,improvepeople'sabilitytothinkaboutproblemsandimagination,improvepeople'swayofthinking,expandthinking.
KeyWords:
JAVARelievepressurePushboxGame
1.可行性研究
1.1设计目的
灵活运用自己在学校学习期间所学到的理论知识和实际动手技能,并结合自己于课外查找到的资料,该推箱子游戏设计并开发基于JAVA,使自己能够熟悉和熟练应用开发过程及相关技能,培养独立思考能力,测试学习结果,实践和提高编程能力,并为今后的工作打下坚实基础的实际能力。
1.2可行性研究前提
基本需求:
系统开发的总体任务是综合体现游戏本身的可操作性、美观性和及时性。
在游戏的开发过程中谨遵软件工程规,可采用结构化或面向对象分析的设计方法。
主要是实现Windows的GUI程序开发,对游戏中的图形图像通过键盘进行控制。
玩家可通过控制键盘上的上下左右方向按键来对游戏中的人物进行移动操作。
主要开发目标:
采用结构化的设计方法,开发出一个操作简单、界面简洁且美观、适合人们用以休闲娱乐的小游戏,实现Windows的GUI程序开发,并期望能够通过此次游戏开发过程全面提高个人自身的综合素质。
条件假定和限制:
由于对编程语言的学习以及理解还不是很到位,因此本游戏可能会在诸多方面存在一些问题以及不足之处。
可行性研究所采用的方法和步骤:
通过研究分析推箱子小游戏所需要的具体功能以及这些功能实现的方法、确定主体结构。
利用所学到的知识,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。
评价尺度:
由于本软件是一个初级产品,因此对其要求并不是太苛刻,所以只需要能够达到推箱子小游戏的一般功能即可。
1.3可行性分析
管理可行性:
这款推箱子游戏软件的设计目的是为了提高自身素质以及检查自己在校期间所学习JAVA的相关知识的成果,运用JAVA语言编写后,在EditPlus编译器中运行简单明了,所有功能全部根据基本需求所做,从而得以便于管理,所以在这方面是可以实现的。
经济可行性:
由于本游戏的主要背景是毕业设计,不注重其直接可能产生的经济效益和其后的发展方向,其关键在于注重个人自身独立编写JAVA程序的水平以及其能力的提高,对自身的经济要求也不高,只要有一台能运行JAVA软件和EditPlus编译器的电脑即可,所以可以不用考虑经济方面的相关问题。
技术可行性:
对于本游戏,可以使用如VB,Java,Delphi等诸多相关的编程语言进行编写,但是考虑到编写程序的难易程度、个人自身对编译语言的了解程度以及完成的便利性等方面因素,故本游戏选择了以JAVA程序语言作为编程语言。
需要对变量定义、变量初始化、界面初始化、游戏初始化等,然后就可以进入游戏,处理游戏过程中的各种操作。
社会可行性:
本游戏的开发仅作为毕业课程设计使用,仅用来巩固先前所学的知识,是以个人为单位的,可供个人或他人平常娱乐解压所用,无需考虑该游戏有可能造成的社会影响,因此可以不用考虑到法律、等多方面的社会因素,所以在这方面也是完全可行的。
1.4结论意见
综上所述,本游戏软件程序的技术基本成熟。
经过出于管理可行性、经济可行性、技术可行性和社会可行性这四大方面的分析,在这些方面上均无重大问题,因此能够达到此次设计所预期的目的,所以可开始着手编写本次游戏程序。
2.需求分析
2.1引言
对软件需求的透彻理解,对于软件开发工作能否成功是起着至关重要的作用,需求说明的任务是发现、规的过程,这有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,有助于采用工程方法开发软件,提高软件的质量,还有利于开发人员、维护人员、管理人员之间的交流以及协作,并且可以作为工作成果的原始依据;再者,亦可在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相符合。
2.2游戏需求
玩家是通过对小人的移动操作来控制推动箱子的,并且玩家需要避过障碍物以及死角,才能将其推放到指定位置从而达到过关的目的。
如果玩家将箱子推入死角导致箱子无法移动或不能移动到指定位置则闯关失败,可以通过悔步或重新开始等操作来重新挑战本关。
游戏功能需求如下所示:
游戏界面需求:
简洁美观的用户界面,可以带给用户自然清晰的画面。
游戏容需求:
良好的小人与箱子设计,可以给玩家带来更真实的感觉。
小人需要前、后、左、右四图片,移动中的箱子与终点上的箱子要所有区别,因此需要两不同的图片以示区别。
键盘处理事件:
控制小人与箱子的移动,可通过键盘方向键(上、下、左、右键)对小人进行上、下、左、右的移动,并且能够推动箱子。
显示需求:
当所有箱子都到达指定位置后即可过关,若进入死角则无法过关,需要进行悔步或重新开始的操作。
可以由玩家喜欢选择关卡进行游戏。
2.3软硬件需求
硬件环境需求:
CPU:
PentiumIII600以上;
存要求:
2GB以上;
存剩余资源:
128MB以上;
软件环境:
JDK1.5及其以上的版本。
2.4接口控制
本小游戏需要通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右方向按键控制小人的行动来推动箱子,要使用键盘的接口实现。
2.5方案论证
学校开设的关于学习编程语言的课程有C++语言、Java程序语言等,皆可用于编写推箱子小游戏的程序。
2.5.1C++语言的优点
C++语言是对C语言的扩充,扩充的绝大部分来自著名语言中的最佳特性:
从SIMULA67中吸取了类,从ALGOL68中吸取了运算符一名多用、引用和在分程序中任何地方说明变量,综合了Ada的类属和Clu的模块特点,从BCPL中吸取异常处理,从BCPL中吸取了用//表示注释。
C++语言保持了C语言的紧凑、灵活、高效和易移植强的优点,它对数据抽象的支持主要在于类概念和机制,对面向对象风的支持主要通过虚拟函数。
C++语言既有数据抽象和面向对象能力,语言运行性能高多,加上C语言的普及,而从C语言至C++语言的过渡较为平滑,以及C++语言与C语言的兼容程度可使数据巨大的C语言程序能方便地在C++语言环境中重用。
尽管C++语言当初的设计本意是帮助管理大型程序,但其用途并不仅限于此。
C++语言的面向对象的特性可有效地用于实际的程序设计工作。
C++语言常常用于设计编辑器、数据库、个人文件系统以及通讯程序等。
而且,由于C++语言共享C语言的效率,所以用C++语言可以构成很多高性能的系统软件。
2.5.2.Java语言的优点
Java是定义位于网络计算的计算机语言,其技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动和互联网,同时拥有全球最大的开发者专业社群。
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
这些特点使得Java语言特别适用于用来开发网络上的应用程序;另外,作为一种面世较晚的语言,Java语言也集中体现和充分利用了若干当代软件技术新成果,例如C++语言、面向对象、多线程等等,它们所拥有的优点都让Java语言收入其中。
开台无关性。
如前所述,Java语言独特的运行机制使得它具有良好的二进制级的可移植性,利用Java语言,开发人员可以编写出与具体平台无关、普遍适用的应用程序,大大降低了开发、维护和管理的开销。
Java是面向对象的编程语言。
面向对象技术较好地适应了当今软件开发过程中新出现的种种传统面向过程语言所不能处理的问题,包括软件开发的规模扩大、升级加快、维护量增大经及开发分工日趋细化、专业化和标准化等,是一种迅速成熟、推广的软件开发方法。
面向对象技术的核心是以更接近人类思维的方式建立计算机逻辑模型,它利用类和对象的机制将数据与其上的操作封装在一起,并通过统一的接口与外界交互,使反映现实世界实体的各个类在程序中能够独立、自治、继承;这种方法非常有利于提高程序的可维护性和可重用性,大大提高了开发效率和程序的可管理性,使得面向过程语言难于操纵的大规模软件可以很方便的创建、使用和维护。
安全稳定可靠。
对网络上应用程序的另一个需较高的安全可靠性。
用户通过网络获取并在本地运行的应用程序必须是可依赖的,不会充当病毒或其他恶意操作的传播者而攻击用户的本地资源;同时它还应该是稳定的,轻易不会产生死机等错误,使得用户乐于使用。
可以支持多线程。
多线程是当今软件技术的又一重要成果,已成功应用在操作系统、应用开发等多个领域。
多程序技术允许同一个程序有两个执行线索,即同时做两件事情,满足了一些复杂软件的需求。
Java不但置多线程功能,而且提供语言级的多线程支持,即定义了一些用于建立、管理多线程的类和方法,使得开发具有多线程功能的程序变得简单、容易和有效。
综合先前所述,衍生自C++的Java语言,出于安全稳定性的考虑,去除了C++中不容不得易理解和掌握的部分,如最典型的指针操作等,降低了学习的难度;同时,Java还有一个十分特殊的特点,这就是它的基本语法部分与C语言几乎一模一样。
这样,无论是学习过Java语言再学习C语言,还是已经掌握了C语言再学习Java语言,都会感到轻松不已。
2.5.3.方案选择
面向对象是一种认识世界的方法,是一种程序设计方法。
面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。
每种对象都有自己的部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。
按照这样的思想设计程序,就是面向对象的程序设计。
面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。
所有面向对象的程序设计语言一般都包含三个概念:
封装、多态性和继承性。
这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。
面向对象的程序设计,是通过数据和代码建立分块的存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。
C++语言和Java语言在面向对象这方面都比较强,C++语言为了与C语言兼容,其是包含了些面向过程的成分;Java语言除了C++语言中非面向过程的部分,其程序编写过程就是设计、实现类,定义其属性、行为的过程。
还有Java语言特有的“沙箱”机制是其安全性的保障,同时它去除了C++语言中易造成的错误指针,增加了自动存管理等措施,保证了Java程序运行的可靠性。
因此,经过再三比较两种语言之后,采用了Java语言来编写推箱子小游戏的程序代码。
3.概要设计
3.1游戏设计分析
从面向对象的观念出发,本程序可分为以下几个对象:
●地图文件的引用
●小人与箱子的移动
●程序运算逻辑
●绘图
●显示平台
分析对象的技巧在于它的重复利用及维护效率。
如果要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如地图文件、小人与箱子的移动以及程序的运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。
3.3.1.地图文件的引用
在设计游戏程序时,通常都是把游戏的画面布局数据存放在一个地图文件中。
程序通过读取地图文件中的数据来获取画面的布局安排。
地图文件是20*20的变量数组文件,在地图不同的数字代表不同的意义。
把这组数据保存到一个文件中,这个文件就是地图文件了。
3.3.2.程序运逻辑
程序中逻辑运算包含小人与箱子的移动、键盘事件的响应、保存数据以实现悔步以及重新开始的操作等等。
3.3.3.绘图
绘图主要是用于在小人与箱子的移动后,原位置由草地填补,以此来表示小人与箱子的移动以及其画面的连贯性。
3.3.4.显示平台
“可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。
3.2注意事项
小游戏在设计时要注意绘图部分的设计代码,还要注意通过输入流读取地图文件与图像文件部分的设计代码等等。
3.3游戏流程图
图1系统功能模块
4.详细设计
4.1游戏总体结构与代码
推箱子的小游戏界面如图4.1所示:
图4.1小游戏界面
由图4.1可以看出,本小游戏的界面简洁、直观,从界面中可以直接得到本小游戏的相关功能操作信息。
(1)界面框架与按钮设计
界面设计中包括了所有玩家可以直观见到的图形界面,窗体的大小,界面中的功能按钮,让玩家可以方便使用操作。
界面中的按钮包括:
“悔一步”,“重来”,“上一关”,“下一关”,“第1关”,“最终关”,“选关”。
并且各个按钮的名称与相关功能为:
“悔一步”:
返回上一移动状态(可以连续返回多步);
“重来”:
重新开始当前关;
“上一关”:
返回到当前关的上一关;
“下一关”:
跳转到当前关的下一关;
“第1关”:
游戏系统默认开始关为第一关,此按钮让玩家可以方便从其它关卡直接跳转到第一关;
“最终关”:
可以跳转到最后一关,即游戏系统默认的最后一个关。
“选关”:
选择想要挑战的关卡。
其中,这个部分的部分代码为:
publicclassTuixiangzi
{
publicstaticvoidmain(String[]args)
{
newmainFrame();
}
}
classmainFrameextendsJFrameimplementsActionListener,ItemListener
{
JLabellb;
JLabellb2;
JButtonbtnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback;
mainpanelpanel;
Soundsound;
JComboBoxjc=newJComboBox();
MenuItemrenew=newMenuItem("重新开始");
MenuItemback=newMenuItem("悔一步");
MenuItemlast=newMenuItem("上一关");
MenuItemnext=newMenuItem("下一关");
MenuItemchoose=newMenuItem("选关");
MenuItemexit=newMenuItem("退出");
MenuItemqin=newMenuItem("琴萧合奏");
MenuItempo=newMenuItem("泡泡堂");
MenuItemguang=newMenuItem("灌篮高手");
MenuItemnor=newMenuItem("默认");
MenuItemeye=newMenuItem("eyesonme");
MenuItemabout=newMenuItem("关于推箱子...");
mainFrame()
{
super("推箱子v1.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推箱子游戏v1.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("重来");
btnback=newJButton("悔一步");
btnlast=newJButton("上一关");
btnnext=newJButton("下一关");
btnchoose=newJButton("选关");
btnfirst=newJButton("第1关");
btnover=newJButton("最终关");
btnmuc=newJButton("音乐关");
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);
btnfir
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 箱子 游戏 设计 实现