Java实现推箱子游戏 摘 要社会在进步,人们生活质量也在日益提高。高强度的压力也接踵而来。社会中急需出现新的有效方式来缓解人们的压力。此次设计符合了社会需求,java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。具有操作简单,易于上手的特点。推箱子游戏的玩法十分简单——控制人物绕过障碍物,到达目的地。此次试验基于java语言。将游戏做成通用的关卡设计,关卡用文本实现在文本文件里设置好关卡,用迭代一个计算人是否能到达某一个格子 一个是计算箱子是否能到达相邻的某一个格子Java implementation of the Sokoban game AbstractSocial progress, quality of life is also increasing. High-intensity pressure also follow. The emergence of new social urgently needed an effective way to relieve people's stress. This is designed to meet the needs of the community, java Sokoban game allows people in her spare time, experience the fun of the game. With simple operation, easy to use features.Sokoban game play is very simple - control the character around obstacles to reach the destination. The test is based on java language. The game map made generic level design, checkpoints set up checkpoints to achieve with a text in a text file, the game core module uses a randomly generated digital images and pictures binding, using a random array of functions and algorithms exchange to achieve a game pictures initialization state, effectively solve the problem of picture arrangement, the program is simple. Make full use of the storage characteristics of the stack to achieve undo function. Mobile computing and boxes of iterative villain, a calculation whether one can reach a certain grid is to calculate whether a case can reach a neighboring lattice. Soothing music with interesting step, which will hopefully lead to a lot of people's interest. As a game with a long history, but also can cause people to miss and resonance.Key Words Pressure; games; java; multifunction目 录摘 要iAbstractii引 言11 系统分析21.1 技术可行性分析21.1.1 可行性目的21.1.2 可行性研究前提21.1.3 算法可行性分析21.1.4 平台选择41.2 需求分析81.2.1 引言81.2.2 游戏需求81.2.3 软硬件需求91.2.4 接口控制91.3 方案论证91.3.1 C++语言的优点91.3.2 Java语言的优点101.3.3 C语言的优点111.3.4 方案选择132 概要设计152.1 游戏设计分析152.1.1 地图文件的引用152.1.2 程序运逻辑152.1.3 绘图152.1.4 显示平台152.2 注意事项152.3 游戏流程图162.4 函数模型163 详细设计203.1 游戏总体结构与代码203.2 选关模块213.3 地图的绘制形成223.4 小人与箱子移动的算法243.5 小人上下移动模块263.6 悔棋模块273.7 音乐控制284 游戏测试304.1 软件测试304.1.1 软件测试简介304.1.2 测试方法304.1.3 测试步骤314.2 游戏系统性能分析31结 论32参考文献33致 谢34原 文35翻 译42 引 言策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手,在节奏越来越快的生活中,游戏如清风般扑来,丰富了人们的生活,随着时代的进步,游戏产业逐渐壮大,成为人们生活中不可或缺的一部分。
推箱子游戏起源于日本,在游戏中人们可以提高逻辑思维能力。它的玩法也非常简单。控制人物不停的移动将箱子推到目的位置。难点在于移动的位置,以及箱子到达指定位置的顺序,只有多加思考才能获得游戏的胜利。反复推敲,锻炼了人们的耐性。本次的开发尽量多的设置了关卡数目,增强游戏的耐玩性,同时在画面上有所提高,借鉴了许多达人的经验和技术,引发了我对游戏的热爱,丰富了个人生活,相信推箱子游戏在今后的社会总会越来越引人注目。1 系统分析1.1 技术可行性分析1.1.1 可行性目的通过推箱子游戏中使用的java技术,让我能够更加熟练的使用myeclipe。同时了解相关运行环境的配置。将理论知识和实际操作结合起来。达到学以致用的目的。网上资料的查询极大的提高了我的自学能力。希望经过此次设计,锻炼自己的思考,解决问题的能力。对系统开发的流程有更深层次的理解,检验学习成果和实际动手能力,对底层知识有更深的了解。为今后的工作打好基础。1.1.2 可行性基本需求:。。主要开发目标:。条件假定和限制:。可行性研究所采用的方法和步骤:通过研究分析所的及实现的方法、确定主体结构。利用,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。
评价尺度:。可行性分析管理可行性:。经济可行性:。技术可行性:本游戏可用VB,Java推箱子游戏设计,Delphi等编程语言,考虑到编写程序的难度对语言的了解程度,选择JAVA作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化然后进入游戏处理游戏过程中的各种操作。社会可行性:。这实际上是一个寻路问题,最简单的用一个广度优先搜索就可以找到最短路径。从角色当前位置开始,每次向所有可能方向展开一层,如下图直到扩展到目标位置。根据节点的父子关系能反推出移动步骤。如下图 图1-1推箱子地图演示输出结果很简单,从当前栈底到栈顶,每个元素代表一步移动。由于移动步骤只记录了主角推动箱子的位置,可以根据上一个问题的解决办法,能得到当前主角位置到主角推动位置的路径。要判断当前局面是否在之前的移动步骤上出现过,这个问题到现在我还没有想出特别好的方法。容易想到最笨的方法的是从上到下访问当前栈内所有元素,恢复出之前的所有状态逐一比较,包括主角是否在同一封闭空间。聪明一点的话可以根据关卡状态计算出某种唯一的特征值记录在压栈数据中,只要比较该特征值就可以了。仍然使用问题1的广度优先扩展技能特效,容易找出所有和主角所在空间相邻的箱子,判断箱子是否可以从主角所在空间推动也不难,先看是哪一面相邻,再看箱子另一面是否为空。
windows–>perferences–>general–>validation->editors->Text 。Editors->spelling。第三步:取消myeclipse的启动项。myeclipse会有很多的启动项,而其中很多我们都用不着,或者只用一两个,取消前面不用的就可以windows–>perferences–>general–>startup and shutdown。第四步:更改jsp默认打开的方式。安装了myeclipse后,编辑jsp页面,会打开他的编辑页面,同时也有预览页面,速度很慢,不适合开发。所以更改之。windows–>perferences–>general–>editors->file associations。第五步:更改代码提示快捷键。现在的代码提示快捷键,默认为ctrl+space,而我们输入法切换也是,所以会有冲突。谁叫myeclipse是外国人做的呢。根本不需要切换输入法。windows–>perferences–>general–>Keys更改 content assist 为 alt+/同时由于alt+/已经被word completion占用,所以得同时修改word completion的快捷键值2. 有时点击myeclipse里的struts的xml配置文件,会报错:Error opening the editorUnable to open the editor ,unknow the editor id…..把这个窗口关闭后才出正确的xml文件显示,这个我们这样改:windows–>perferences–>general–>editors->file associations选择*.xml,选择myeclipse xml editor点default,ok。
3. js中有alert"中文";可以ctrl+shift+f,但是这样以后只有运行才知道alert的是什么,而且js中如果有英文注释也还是保存不了,点击右键“properties”在text file encoding中点oth-er 选择GBK。4.如果是myeclipse5以下的版本,有时会出现这样的问题:在断点调试的时候没有绿色的条显示,断点走到另外一个文件的时候视图里也不自动跳转到那个页面,这样调试起来很麻烦,需要手动的点击跟到断点位置看变量的值!解决办法:在eclipse Window--Preferences-- Tomcat--Source Path中左侧,中要跟踪的工程后Apply,ok。然后重启 Tomcat;这项在myeclipse6中是没有的,貌似myeclipse6中没出过这样的问题; 今天又碰到一个问题,补充一下:修改了一个文件,比如添加了一句打印: System.out.println,执行时发现不打印,把class反编译,发现这句确实已经添加上了,重启tomcat,这句没问题了,但是再做修改还是不生效,最终发现是在Window--Preferences-- MyEclipse--InterNet Tools--cache中取消了勾选disable caching,重新勾选就好用了。
5.设定breakpoints查找代码中空指针是哪一行产生的,并调试:在Debug视图中,选择 Breakpoints 在其下一行有 Add Java Exception Breakpoint图标在Choose an exception中输入 NullPointerException 即可,不用的时候我们可以把那个断点点掉不要删除。1.2 需求分析对软件需求分析特别重要。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中的一个简单步骤,但在过去十多年中越来越多的人认识到它是整个过程中最关键的一个过程。只有通过软件需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。许多大型应用系统的失败,最后均归结到需求分析的失败:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。游戏功能如下:游戏界面需求:的用户界面,。游戏需求:键盘处理事件:,可通过键盘方向键(上、下、左、右键)对移动。
显示需求:C++语言的优点 1.3.2 Java语言的优点Java语言的流行除了因为它能够编制嵌入HTML文件中的Applet外,还在于Java语言本身的面向对象、简单、平台无关性、安全性、多线程等特点。Java语言的结构与编写方式,与c++语言类似,因此学习Java语言,不仅要了解Java语言独有的编程特点,同时还要有程序设计基础和面向对象的概念。
Java语言的主要特点如下:?1.简单、高效Java语言与C++类似,如果用户了解C++和面向对象的概念,就可以很快编写出Java程序;此外,Java又不同于诸如C++语言提供的各种各样的方法,它只提供了基本的方法,这样就减少了编程的复杂性,例如去掉了头文件、指针变量、结构、运算符重载、多重继承等复杂特性。Java语言虽然简单,却很高效,它可以用面向对象的方法来描述用户的每一个动作。?2.面向对象Java语言是一种新的面向对象的程序设计语言,它除了几种基本的数据类型外,大都是类似c++中的对象和方法,程序代码大多体现了类机制,以类的形式组织推箱子游戏设计,由类来定义对象的各种行为。Java同样支持类继承,这样也减少了程序设计的复杂性。?3.平台无关性 Java语言经编译后生成与计算机硬件结构无关的字节代码(Bytecode),这些字节代码被定义为不依赖任何硬件平台和操作系统。当Java程序在运行时,需要由一个解释程序对生成的字节代码解释执行。这体现了Java语言的与平台无关性,使得Java程序可以在任何平台上运行,如MS-DOS, Windows,Unix等,因此具有很强的移植性。?4.交互式特性Java是面向对象的网络编程语言,由于它支持TCP/IP协议,使得用户可以通过浏览器访问到Internet上的各种动态对象。并且在网络上用户可以交互式地进行各种动作,而多线程技术的引入使得这种交互式操作更为容易。?5.多线程机制Java语言支持多线程机制,多线程机制使得Java程序能够并行处理多项任务。Java程序可以设计成具有多个线程,例如让一个线程负责数据的检索、查寻,另一个线程与用户进行交互,这样,两个线程得以并行执行。多线程机制可以很容易地实现网络上的交互式操作。?6.动态的内存管理机制Java语言采用了自动垃圾回收机制进行内存的管理。在C++语言中,程序员在编写程序时要仔细地处理内存的使用,例如当某个内存快使用完毕时,要及时释放,以供其它程序使用,一旦内存管理不当,就有可能造成内存空间浪费或程序运行故障。
在Java系统中包括了一个自动垃圾回收程序,它可以自动、安全地回收不再使用的内存块,这样,程序员在编程时就无需担心内存的管理问题,从而使Java程序的编写变得简单,同时也减少了内存管理方面出错的可能性。?7.安全性在类似Internet的这种分布式网络环境中,安全性是个不容忽视的问题。Java语言在安全性方面引入了实时内存分配及布局来防止程序员直接修改物理内存布局;通过字节代码验证器对字节代码的检验,以防止网络病毒及其它非法代码侵入。此外,Java语言还采用了许多面向对象的异常处理机制,负责对一些异常事件进行处理,如内存空间不够,程序异常中止等的处理。
以上介绍了Java语言的一些主要特点,除此之外它还具有动态性、类库丰富、高性能等特点,这些都使得Java语言在各个方面得以成熟和完善,成为大众日益青睐的程序设计语言之一。的优点1.3.4 方案选择面向对象是一种认识世界的方法,是一种程序设计方法。面向对象的观点认为,客观世界是由各种各样的实体,即对象组成的。每种对象都有自己的内部状态和运动规律,不同对象间的相互联系和相互作用就构成了各种不同的系统,并进而构成整个客观世界。按照这样的思想设计程序,就是面向对象的程序设计。面向对象的程序设计吸取了结构化程序设计的先进思想,并把它们同几个支持用户用新方法进行程序设计的有力概念结合在一起。所有面向对象的程序设计语言一般都包含三个概念:封装、多态性和继承性。这种方法要求语言必须具备抽象、封装、继承和多态性这几个关键要素。面向对象的程序设计,是通过数据和代码建立分块的内存区域,以便提供对程序进行模块化的一种程序设计方法,这些模块可以被用作样板,在需要时再建立其副本。Java语言特有的沙箱机制是其安全性的保障,同时它去除了C++中易造成的错误指针,增加了自动内存管理等措施,保证了Java程序运行的可靠性。
图1-2 编程语言使用热度排行2 概要设计游戏设计分析从面向对象的观念出发,本程序可分为以下几个: 3.程序运算逻辑绘图5.显示平台分析对象的技巧在于它的重复利用及维护效率。要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如及程序运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。程序运逻辑程序中逻辑运算移动、响应等。绘图移动2.1.4 显示平台可移植性高是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。游戏在设计时))))图3-1小游戏界面(1)界面框架与按钮设计本游戏界面简单清晰,操作界面优美,有很强的带入性,游戏操作模块分为:“悔一步”,“重来”游戏运营,“上一关”,“下一关”,“第1关”,“最终关”,“选关”“音乐关”并且各个按钮的名称与相关功能为:“悔一步”:返回上一移动状态(可以连续返回多步);“重来”:重新开始当前关;“上一关”:返回到当前关的上一关;“下一关”:跳转到当前关的下一关;“第1关”:游戏系统默认开始关为第一关,此按钮让玩家可以方便从其它关卡直接跳转到第一关;“最终关”:可以跳转到最后一关,即游戏系统默认的最后一个关。
mainFramesuper"推箱子v2.0";setSize720,720;setVisibletrue;setResizablefalse;setLocation300,20;setDefaultCloseOperationJFrame.EXIT_ON_CLOSE;Container contgetContentPane;cont.setLayoutnull;cont.setBackgroundColor.black;Menu choicenew Menu" 选项";choice.addrenew;choice.addlast;choice.addnext;choice.addchoose;choice.addback;choice.addSeparator;choice.addexit;renew.addActionListenerthis;last.addActionListenerthis;next.addActionListenerthis;choose.addActionListenerthis;exit.addActionListenerthis;back.addActionListenerthis;Menu setmucnew Menu" 设置音乐"setmuc.addnor;setmuc.addqin;setmuc.addpo;setmuc.addguang;setmuc.addeye;nor.addActionListenerthis;qin.addActionListenerthis;po.addActionListenerthis;guang.addActionListenerthis;eye.addActionListenerthis;Menu helpnew Menu" 帮助";help.addabout;about.addActionListenerthis;MenuBar barnew MenuBar;bar.addchoice;bar.addsetmuc;bar.addhelp;setMenuBarbar;3.2 选关模块“选关”:选择想要挑战的关卡。
当游戏玩家想要自主选择关卡时,可以随意输入想要跳入的关卡,节约了时间,玩家同过选择的关卡可以有效地挑战自我,连接上次的游戏进度。其中,这个部分的部分代码为:void Tuixiangziint iLevelmapnew Readmapi;Levelmaptmpnew Readmapi;mapLevelmap.getmap;manXLevelmap.getmanX;manYLevelmap.getmanY;maptmpLevelmaptmp.getmap;repaint;int maxlevelreturn max;public void paintGraphics gforint i0; i