java推箱子实验报告
推箱子项目实训报告

一、项目背景推箱子游戏是一款经典的益智游戏,起源于日本。
玩家需要在狭小的仓库中,通过移动人物,将箱子推到指定的位置。
这款游戏不仅考验玩家的逻辑思维和空间想象力,还锻炼玩家的耐心和策略。
为了提高自身的编程能力,我们选择推箱子游戏作为实训项目。
二、实训目的1. 学习和掌握Java编程语言的基本语法和常用库;2. 熟悉图形用户界面(GUI)编程;3. 提高逻辑思维和编程能力;4. 实现一个具有良好用户体验的推箱子游戏。
三、项目设计1. 系统架构推箱子游戏采用MVC(模型-视图-控制器)架构,将游戏逻辑、界面展示和用户交互分离,提高代码的可读性和可维护性。
2. 关卡设计游戏共包含10个关卡,每个关卡都有不同的地图和目标。
关卡难度逐渐增加,以满足不同玩家的需求。
3. 游戏功能(1)基本功能1)地图展示:游戏开始时,展示当前关卡的地图,包括人物、箱子、目的地和墙壁;2)人物移动:玩家可以通过键盘或鼠标控制人物上下左右移动;3)箱子移动:当人物站在箱子旁边时,按空格键将箱子推到目标位置;4)胜利判断:所有箱子都推到目标位置,游戏胜利;5)失败判断:人物无法移动或通道被堵住,游戏失败。
(2)扩展功能1)悔棋功能:玩家可以撤销上一步操作,回到之前的状态;2)重置关卡:玩家可以重新开始当前关卡;3)关卡选择:玩家可以选择不同的关卡进行游戏;4)音乐和音效:游戏过程中,播放背景音乐和音效,增强游戏氛围。
四、关键技术1. Java编程语言:使用Java编程语言实现游戏逻辑、界面展示和用户交互;2. Swing库:使用Swing库实现图形用户界面;3. 图像处理:使用ImageIO类加载和显示游戏地图、人物、箱子等图片;4. 事件监听:使用ActionListener、KeyListener等监听器处理用户操作。
五、项目实现1. 创建项目:使用Eclipse创建Java项目,导入Swing库和ImageIO类;2. 设计界面:创建JFrame作为主窗口,添加JPanel作为游戏区域,添加JButton作为按钮控件;3. 游戏逻辑:定义游戏地图、人物、箱子等数据结构,实现人物移动、箱子移动、胜利判断和失败判断等功能;4. 图像处理:加载游戏地图、人物、箱子等图片,使用ImageIO类进行显示;5. 事件监听:为按钮控件添加ActionListener和KeyListener,处理用户操作。
推箱子游戏实践报告

推箱子游戏设计实践报告一、游戏介绍在一定的范围里,要求人把木箱从开始位置推放到指定的位置。
由于箱子只能推不能拉,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
该游戏一共有三道关卡,按下F1和F2可以切换关卡,并且通过移动上下左右键来控制小人的移动,从而推动箱子。
当人把箱子全部推到指定的目的地时过关。
附图:二、设计思想程序关键的地方有两部分,一是加载地图,二是用方向键控人的移动。
画地图主要由两个函数来实现,首先用加载位图函数来画出单个图片,然后再用调用加载位图的函数来画出整体的地图。
用方向键控制人的移动时,要注意全面地考虑到各方面的问题,需要详细的分析各种情况。
三、游戏的部分实现(1)加载地图部分程序void drawmap(HWND hWnd,int map[][8])//画地图函数{ HDC hdc;hdc = GetDC(hWnd);RECT rt;GetClientRect(hWnd, &rt);for(int y=0; y<8; y++){ for(int x=0; x<8; x++){switch(mapIndex[y][x]){case 2:drawImage(hdc, "aim.bmp", x * 48,y* 48,48,48);break;case 1:drawImage(hdc,"ground.bmp", x * 48,y* 48,48,48);break;case 0:drawImage(hdc, "wall.bmp", x* 48,y* 48,48,48);break;case 4:drawImage(hdc, "man.bmp", x* 48,y* 48,48,48);break;case 6:case 3:drawImage(hdc, "box.bmp", x* 48,y* 48,48,48);break;}}}ReleaseDC(hWnd, hdc)}voiddrawImage( HDC hdc, char * fileName, int x, int y , int w, int h){HDC srcdc = CreateCompatibleDC(hdc);HBITMAP hbmp = (HBITMAP)LoadImage(NULL, fileName,IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);SelectObject(srcdc, hbmp);BitBlt(hdc, x,y, w,h, srcdc, 0,0, SRCCOPY );DeleteObject(hbmp);DeleteDC(srcdc);}(2)方向键移动部分程序voidkeydown_down(HWND hWnd){switch (mapIndex[humans.y+1][humans.x]){case 0:break;case 1:case 2:humans.y+=1;break;case 3://人的下面为箱子switch (mapIndex[humans.y+2][humans.x]){case 0:case 6:case 3:break;case 1:MoveResult();mapIndex[humans.y+2][humans.x]=3;mapIndex[humans.y+1][humans.x]=1;humans.y+=1;break;case 2:MoveResult();mapIndex[humans.y+2][humans.x]=6;mapIndex[humans.y+1][humans.x]=1;humans.y+=1;break;}break;case 6://箱子在目标上switch (mapIndex[humans.y+2][humans.x]){case 0:break;case 6:break;case 3:break;case 1:MoveResult();mapIndex[humans.y+2][humans.x]=3;mapIndex[humans.y+1][humans.x]=2;humans.y+=1;break;case 2:MoveResult();mapIndex[humans.y+2][humans.x]=6;mapIndex[humans.y+1][humans.x]=2;humans.y+=1;break;}break;}}voidMoveResult(){if(mapIndex[humans.y][humans.x]!=2) {mapIndex[humans.y][humans.x]=1;}else if(mapIndex[humans.y][humans.x]==2){mapIndex[humans.y][humans.x]=2;} }四、测试结果五、设计心得体会在设计这个程序中我主要学会了如何运用以下有关C语言的知识1)函数定义是要做到顾名思义是很重要的,它对读程序的人正确认识程序十分重要,在修改这个程序的过程中也能很快找到程序各模块的作用,大大增加了程序的可读性。
推箱子程序设计与报告.doc

推箱子程序设计与报告.doc推箱子是一款经典的益智游戏,我们本次设计的推箱子程序主要基于Java语言实现,通过使用IDEA开发环境以及JavaFX图形界面库,提供用户友好的交互界面,使得用户可以愉快地通过游戏锻炼自己的智力。
1. 总体设计推箱子需要先定义一些基本的数据结构,包括地图、箱子和人物。
对于地图而言,我们采用一个二维数组来表示,每个元素用数字来表示:0代表空位,1代表墙,2代表目的地。
对于箱子和人物的位置,我们同样采用二维数组表示。
其中0代表箱子或人物当前位置为空,1代表箱子或人物在该位置。
通过这三个数组,可以完整地表示游戏的基本状态。
2. 游戏规则游戏的基本规则如下:1)箱子、人物、目的地都是由矩形表示。
2)人物可以沿着地图上的通路走动,但不能与障碍物墙相交。
3)人物可以对着箱子推动箱子,但只能向前推,并且不能推到障碍物墙。
4)箱子只能单向推动,即只能向人物朝向的方向推动,并且只能顺着通路推动。
5)每一个箱子必须都推到一个目的地上,游戏才算成功过关。
3. 程序实现在代码实现上,我们采用Model-View-Controller架构,将游戏分为Model(模型)、View(视图)和Controller(控制器)三个部分。
Model主要处理游戏数据,包括游戏地图、箱子和人物的位置。
View则主要负责游戏界面的展示,包括游戏地图、箱子和人物的图形展示、以及用户交互界面的设计等。
Controller则主要负责调度Model和View之间的数据通信和相互交互。
4. 用户界面我们提供了以下用户交互界面:1)菜单:在菜单中,用户可以选择开始新游戏,或者退出程序。
2)选关界面:在选关界面中,用户可以选择所需的关卡。
3)游戏界面:在游戏界面中,实现了地图的显示、箱子和人物的移动、关卡完成情况的判断等功能。
5. 应用技术本次推箱子程序的开发采用了以下技术:1)Java语言编写2)JavaFX图形界面库3)MVC软件设计模式4)Git版本控制5)IntelliJ IDEA开发IDE6. 结论本次推箱子程序的开发成功实现了一款经典益智游戏的主要功能,同时也提供了用户友好的交互界面。
推箱子游戏-需求分析

推箱子需求分析报告报告名称:推箱子需求分析报告组长座号:05组长姓名:林艺芬组员的座号及姓名:02-林丽萍19-陈飞滨一、引言1.1.项目名称推箱子游戏1.2.项目目标从推箱子游戏的需求及现有技术等方面研究该推箱子游戏项目的可行性,嵌入大型游戏中1.3.项目背景(1)开发软件的名称:JAVA(2)项目提出者:福建工程学院(3)项目开发者:福建工程学院开发小组(4)本游戏可作为大型游戏系统中的一部分1.4.参考资料清华大学出版社《软件工程》二、需求分析2.1.项目概述经典的推箱子是一个来自日本的古老游戏,目的是在训练玩家的逻辑思考能力。
在一个狭小的仓库中,要求把木箱放在指定的位置,稍不小心就会出现箱子无法移动或则通道被堵住的情况,所以需要巧妙地利用有限的空间和通道,合理安排移动的次序和未知,才能顺利地完成任务2.2.系统的功能描述2.2.1能够显示主菜单和功能游戏需要提供主菜单让玩家进行游戏设置,同时能能够把地图文件中的信息转换成为图像显示到祝游戏界面上能够接收到键盘输入的方向键信息,并根据不同的方向键把游戏任务移动到响应的位置,例如,当玩家单击方向键“上”时,如果向上的未知是可移动的,那么就当把游戏人物向上移动一个方格当玩家把箱子推到指定位置的格子时,需要把这个箱子进行变色。
这样就能明确地显示出该箱子已经放置到指定位置上玩家可以自己扩展原游戏地图文件,从而生成新的游戏地图在游戏中,当玩家把全部的箱子都推到箱子放置点时,玩家胜利通过当前游戏关口,进行下一关口的游戏,如果玩家无法将指定的箱子全部推到放置点时,玩家失败。
玩家可以选择重新进行当前关口的游戏,还是退出游戏玩家在哟西中可自行选择需要挑战的关口通过主菜单,在游戏开始后,可以选择播放或者禁止播放背景音乐。
默认为禁止播放在游戏菜单中,提供一个使用说明项,以方便对本游戏不了解的玩家对游戏进行操作和使用1)顶层数据流图2)0层数据流图3)1层数据流图2.5.系统状态转换图2.6.数据字典3.4.1 外部实体。
基于java的推箱子游戏解析

基于JAVA的推箱子游戏前言在这个充满竞争的社会里,随着生活节奏的不断加快,人们的生活水平越来越繁忙,因此,越来越多人感到无比的烦躁与巨大的压力,这些压力也带给人们诸多烦恼。
所以如何解除现代人的生活压力,释放心中苦闷已经成为现代人的共同心愿。
而本次的这个基于JAVA的推箱子小游戏正是使用JAVA语言并且结合于EditPlus编译器,为大家开发了一款适合的、休闲娱乐的游戏,在娱乐的同时也给忙碌的上班族们开拓了另一个思考问题的空间。
基于JAVA的推箱子小游戏主要分为初始化模块,画图模块,移动小人模块,移动箱子模块以及功能控制模块。
玩家是通过控制小人的移动来推动箱子,需要避过障碍物与死角才能将其推放到指定位置从而达到过关的目的。
每关的难易程度各异,不仅适合人们休闲娱乐,还有助于开发智力,提高人们思考问题能力与想象能力,改善思考方式,拓展思维。
关键词:JAVA;解压;推箱子;休闲娱乐AbstractIn this competitive society, along with the accelerating pace of life, people's living standard more and busier, therefore, more and more people feel very upset and enormous pressure, the pressure also gives people a lot of trouble. So how to relieve the pressure of modern life, release the pain has become the common aspiration of the people. But this time based on the JAVA Push Box Game is the use of JAVA language and the combination of EditPlus compiler; we developed a suitable, recreational game, in the entertainment but also for busy office workers to develop another thinking space.Based on the JAVA Push Box Game consists of initialization module, drawing module, mobile SIM module, mobile box module and control module. Game player is controlled through a small mobile drive box, need to avoid obstacles and dead angle can be pushed into the specified location so as to achieve the purpose of clearance. Each level of difficulty degree is different, not only for recreation, also contribute to the development of intelligence, improve people's thinking ability and imagination ability, improve the way of thinking, the development of thinking.Key Words:JAVA; Relieve pressure; Push box; Recreation and entertainment目录前言 (I)Abstract (II)1.可行性研究 (2)1.1设计目的 (2)1.2可行性研究前提 (2)1.3可行性分析 (2)1.4结论意见 (3)2.需求分析 (3)2.1引言 (3)2.2游戏需求 (3)2.3软硬件需求 (4)硬件环境需求: (4)软件环境: (4)2.4接口控制 (4)2.5方案论证 (4)2.5.1.C++语言的优点 (4)2.5.2.Java语言的优点 (5)2.5.3.方案选择 (6)3.概要设计 (7)3.1游戏设计分析 (7)3.3.1.地图文件的引用 (7)3.3.2.程序运逻辑 (7)3.3.3.绘图 (7)3.3.4.显示平台 (7)3.2 注意事项 (8)3.3 游戏流程图 (8)4.详细设计 (9)4.1游戏总体结构与代码 (9)结论 (21)参考文献 (22)致谢 (23)引言在人类的社会生活当中,游戏占有很大的比重,并且随着社会的发展而不断发展。
基于Java的推箱子游戏设计与实现【任务书+论文】

毕业设计(论文)任务书第1页第2页第3页基于Java的推箱子游戏设计与实现摘要社会在进步,人们生活质量也在日益提高。
高强度的压力也接踵而来。
社会中急需出现新的有效方式来缓解人们的压力。
此次设计符合了社会需求,Java推箱子游戏可以让人们在闲暇之余,体验游戏的乐趣。
具有操作简单,易于上手的特点。
推箱子游戏的玩法十分简单——控制人物绕过障碍物,到达目的地。
此次毕业设计基于Java语言。
将游戏地图做成通用的关卡设计,关卡用二维数组实现,在二维数组中设置值域来表示不同对象,运用二维数组的遍历算法来加载对应图片实现了游戏图片初始化状态。
同时,通过初始化多个不同二维数组实现了游戏地图关卡的设计,方法巧妙且简单易行,有效的解决了图片排布问题。
充分运用类和方法的调用来实现游戏关卡的初始化。
用读取键值的方法判断游戏人物移动、停止、到达目的地。
舒缓的音乐配合有趣的步骤,相信能引起很多人的兴趣。
作为一个具有悠久历史的游戏,也能够引起人的怀念和共鸣。
关键词Java 游戏二维数组算法读取键值栈Sokoban based on JavaAbstractSocial progress, quality of life is also increasing. High-intensity pressure also follows. 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’s rule is very simple - control characters around obstructions, to arrive at the destination. The graduation project is based on Java language. Game map to make a generic level design, level with two-dimensional array implementation, set the domain in a two-dimensional array to represent different objects, using the two-dimensional array of times calendar calculation method is realized to load the corresponding picture game image initialized state. At the same time, through the initialization of several differenttwo-dimensional arrays realized the design of the game map level, a method is clever and simple, easy to effectively solve the problem of the picture arrangement. Make full use of calling classes and methods to implement the initialization of the game levels with reading the key value method to judge the characters move, stop, or reaching its destination. 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: Java game; two-dimensional arrays; algorithm; key value method; stack;目录摘要 (i)Abstract (ii)引言 (1)1 系统分析 (2)1.1 技术可行性分析 (2)1.1.1 可行性目的 (2)1.1.2 可行性研究前提 (2)1.1.3 算法可行性分析 (2)1.1.4 平台选择 (5)1.2 需求分析 (6)1.2.1 引言 (6)1.2.2 游戏需求 (6)1.2.3 软硬件需求 (9)1.2.4 接口控制 (10)1.3 方案论证 (10)1.3.1 C++语言的优点 (10)1.3.2 Java语言的优点 (11)1.3.3 C语言的优点 (12)1.3.4 方案选择 (14)2 概要设计 (15)2.1 游戏设计分析 (16)2.1.1 地图文件的引用 (18)2.1.2 程序运逻辑 (19)2.1.3 绘图 (19)2.1.4 显示平台 (21)2.2 注意事项 (23)2.3 游戏流程图 (23)2.4 函数模型 (24)3 详细设计 (27)3.1 游戏总体结构与代码 (27)3.2 选关模块 (28)3.3 地图的绘制形成 (29)3.4 小人与箱子移动的算法 (31)3.5 小人上下移动模块 (33)3.6 悔棋模块 (34)3.7 音乐控制 (35)4 游戏测试 (38)4.1 软件测试 (38)4.1.1 软件测试简介 (38)4.2 测试方法 (38)4.3 测试步骤 (38)4.4 游戏系统性能分析 (40)5 项目经验与总结 (41)6 参考文献 (43)7 致谢 (44)8 外文原文及中文翻译 (45)引言策略性游戏可以锻炼人的思维能力还能缓解人的压力,使人们暂时忘却生活当中的烦恼,增强人们的逻辑思维能力,游戏的艺术美也吸引着越来越多的玩家和厂商,寓教于乐,在放松人们心情的同时还可以活跃双手。
推箱子实验报告

引言概述推箱子是一种常见的游戏,也是计算机算法和研究中的经典问题,它涉及的算法和方法有助于提高问题解决能力和逻辑思维能力。
本文将对推箱子实验进行详细分析和讨论,包括推箱子游戏的定义、规则和目标,以及解决推箱子难题的算法和策略。
正文内容1.推箱子游戏的定义、规则和目标1.1定义:推箱子是一种益智类游戏,玩家需要将箱子推到指定位置,才能过关。
1.2规则:玩家通过控制一个游戏角色,推动箱子向指定位置移动,但箱子无法直接移动至目标位置。
1.3目标:玩家需要以最少的移动步数将所有箱子推至目标位置,即完成关卡。
2.解决推箱子难题的算法和策略2.1盲目搜索算法2.1.1深度优先搜索算法:从初始状态开始,一直沿着一个方向推动箱子,直到遇到障碍物为止。
2.1.2广度优先搜索算法:在每一步中,尝试所有可能的移动方向,并记录每个状态的移动路径,直到找到解决方案。
2.1.3双向搜索算法:从初始位置和目标位置同时开始搜索,直到两个搜索路径相交为止。
2.2启发式搜索算法2.2.1A算法:根据启发函数估计当前状态到目标状态的距离,选择距离最小的下一步移动方向。
2.2.2剪枝算法:通过预判某些状态的不可行性,提前排除无需尝试的移动方向。
2.2.3贪心算法:每次选择距离目标位置最近的箱子进行推动,以减少总体移动步数。
2.3知识表示与推理2.3.1逻辑推理:使用逻辑规则和推理算法进行箱子和角色的位置推理。
2.3.2状态空间搜索:将推箱子问题转化为状态空间搜索问题,通过搜索解空间来获得解法。
2.3.3约束满足问题:将箱子移动约束转化为约束满足问题,使用约束满足算法找到解决方案。
2.4强化学习方法2.4.1Q学习:使用状态动作奖励状态的马尔可夫决策过程进行学习和决策的强化学习方法。
2.4.2深度强化学习:基于深度神经网络的强化学习方法,通过大量样本数据进行模型训练和优化。
2.4.3遗传算法:通过基因编码和演化算子的操作,寻找最优的解决方案。
推箱子小游戏

推箱子小游戏实训课题:推箱子小游戏姓名:学号:专业班级:指导教师:设计时间:推箱子小游戏一、实训任务与要求1.用JAVA设计应用程序《推箱子小游戏》。
2.应用程序的基本结构包括:主流程控制、小人物移动、箱子移动、小人物与箱子合理碰撞时同时移动,重置关卡等。
3.推箱子小游戏是一款智益的小游戏,目的是训练人的逻辑思维能力。
在一个狭小的空间里,要求把小箱子从起始位置推到指定位置,在空间中有地方限制,稍不小心就会出现箱子无法移动或者通道被堵住的情况,而且箱子只能推不能拉,所以需要玩家利用有效的空间和通道,合理的移动次序和位置,才能完成任务。
本游戏一共五关,由易到难,每一关都随着关数的增加来增加难度,从而达到吸引玩家玩耍的目的。
本次实训是配合 JAVA 程序设计课程,深入学习掌握JAVA 语言,熟练运用 Java 工具对系统的编写. 通过综合训练,培养学生实际分析问题,编程和动手能力,提高学生的综合素质。
二、实训过程从这周开始,在顾巍老师的指导下开始了我们的实训之旅,实训开始后小组内讨论做什么科目,后来我们发现随着科学技术的发展,人们的生活水平越来越繁忙,在充满竞争的社会条件下,压力往往带给人们很多烦恼,所以合理的解压方式称为现代人的共同心愿. 为了给大家提供一个合理的解压平台, 我们在本次实训中为大家开发了一款适合休闲娱乐的小游戏,即推箱子小游戏。
推箱子小游戏既有简单易学的特性,为人民群众所喜闻乐见,又有深奥的技巧和高水平的国际性比赛;它的文化源渊流长,具有东方的神秘和西方的直观;既有场的概念,亦有点的连接。
它是中西文化的交流点,是古今哲理的结晶。
本游戏软件设计的目的是增强思维,有助于修身养性;简单易学,大家所喜闻乐见,文化历史悠久;操作简单,规则简单,适合人群广。
我们先在网上查阅了一些相关的资料,仔细分析了推箱子小游戏中需要用到的算法,功能模块,并且从现实情况出发,抽象出了这款游戏中需要用到的对象,背景,以及箱子移动的各种请款,例如,小人物与墙壁发生碰撞时怎么处理,与箱子发生合理碰撞时怎么处理,小人物和箱子的位移究竟怎么实现等,我们认真的完成了需求分析报告、概要设计报告、以及详细设计报告、并且在完成测试后我们认真总结了程序设计中存在的问题,并做了认真的记录。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java设计报告1.1设计背景:经典的推箱子游戏是一个来自日本的古老游戏,目的是在训练逻辑思考能力。
在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。
一想起这款小游戏,就想起了我的童年,它陪我们这一代度过了一段美好且愉快的时光。
所以想到自己也写一个推箱子游戏,既可以享受过去的美好回忆,又可以锻炼自己的Java设计能力。
1.2设计目的:综合运用在校期间所学到的理论知识和技能,并且结合课外参考资料,设计开发基于JA V A 的推箱子小游戏,让自己能够熟悉并熟练应用系统的开发过程,培养独立思考能力,检验学习成果和实际动手能力,以及提高工程实践能力,为今后的工作打下坚实的基础。
1.3游戏需求:玩家是通过对小人的移动操作来控制推动箱子的,并且玩家需要避过障碍物以及死角,才能将其推放到指定位置从而达到过关的目的。
如果玩家将箱子推入死角导致箱子无法移动或不能移动到指定位置则闯关失败,可以通过悔步或重新开始等操作来重新挑战本关。
游戏功能需求如下所示:游戏界面需求:简洁美观的用户界面,可以带给用户自然清晰的画面。
游戏内容需求::小人需要前、后、左、右四张图片,移动中的箱子与终点上的箱子要所有区别,因此需要两不同的图片以示区别。
键盘处理事件:控制小人与箱子的移动,可通过键盘方向键(上、下、左、右键)对小人进行上、下、左、右的移动,并且能够推动箱子。
显示需求:当所有箱子都到达指定位置后即可过关,若进入死角则无法过关,需要进行悔步或重新开始的操作。
可以由玩家喜欢选择关卡进行游戏。
2.1游戏设计分析从面向对象的观念出发,本程序可分为以下几个对象:地图文件的引用小人与箱子的移动程序运算逻辑绘图显示平台分析对象的技巧在于它的重复利用及维护效率。
如果要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如地图文件、小人与箱子的移动以及程序的运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。
2.2.1.地图文件的引用在设计游戏程序时,通常都是把游戏的画面布局数据存放在一个地图文件中。
程序通过读取地图文件中的数据来获取画面的布局安排。
地图文件是20*20的变量数组文件,在地图不同的数字代表不同的意义。
把这组数据保存到一个文件中,这个文件就是地图文件了。
2.2.2.程序运逻辑程序中逻辑运算包含小人与箱子的移动、键盘事件的响应、保存数据以实现悔步以及重新开始的操作等等。
2.2.3.绘图绘图主要是用于在小人与箱子的移动后,原位置由草地填补,以此来表示小人与箱子的移动以及其画面的连贯性。
2.2.4.显示平台“可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。
3.详细设计界面图如下:(1)界面框架与按钮设计界面设计中包括了所有玩家可以直观见到的图形界面,窗体的大小,界面中的功能按钮,让玩家可以方便使用操作。
界面中的按钮包括:“Regret step”,“Restart”,“The last level”,“The next level”,“The first pass”,“Select”。
并且各个按钮的名称与相关功能为:“Regret step”:返回上一移动状态(可以连续返回多步);“Restart”:重新开始当前关;“The last level”:返回到当前关的上一关;“The next level”:跳转到当前关的下一关;“The first pass”:游戏系统默认开始关为第一关,此按钮让玩家可以方便从其它关卡直接跳转到第一关;“Select”:选择想要挑战的关卡。
public class Tuixiangzi{public static void main(String[] args){new mainFrame();}}class mainFrame extends JFrame implements ActionListener,ItemListener{JLabel lb;JLabel lb2;JButton btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnmuc,btnback;mainpanel panel;Sound sound;JComboBox jc=new JComboBox();MenuItem renew=new MenuItem(" Restart");MenuItem back=new MenuItem(" Regret step");MenuItem last=new MenuItem(" The last level");MenuItem next=new MenuItem(" The next level");MenuItem choose=new MenuItem(" 选关");MenuItem exit=new MenuItem(" 退出");MenuItem qin=new MenuItem(" 1");MenuItem po=new MenuItem(" 2");MenuItem guang=new MenuItem(" 3");MenuItem nor=new MenuItem(" 默认");MenuItem eye=new MenuItem(" 4");MenuItem about=new MenuItem(" 关于推箱子...");mainFrame(){super("推箱子v2.0");setSize(720,720);setVisible(true);setResizable(false);setLocation(300,20);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container 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.addActionListener(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);guang.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("JAVA推箱子v2.0版!!!",SwingConstants.CENTER);lb2=new JLabel("更换音乐",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=new JButton("Restart");btnback=new JButton("Regret step");btnlast=new JButton("The last level");btnnext=new JButton("The next level");btnchoose=new JButton("选关");btnfirst=new JButton("The first pass");btnover=new JButton("The final closing");btnmuc=new JButton("The music");add(btnrenew);add(btnlast);add(btnnext);add(btnchoose);add(btnfirst);add(btnover);add(b tnmuc);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=new Sound();sound.loadSound();panel=new mainpanel();add(panel);panel.Tuixiangzi(panel.level);panel.requestFocus();validate();}(2)地图的绘制形成地图以二维数组的形式进行存储,不同的数家代表了不同的含义。