基于java的推箱子游戏

更新时间:2024-05-03 01:08:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

四川师范大学成都学院专科毕业设计

基于JAVA的推箱子游戏

前言

在这个充满竞争的社会里,随着生活节奏的不断加快,人们的生活水平越来越繁忙,因此,越来越多人感到无比的烦躁与巨大的压力,这些压力也带给人们诸多烦恼。所以如何解除现代人的生活压力,释放心中苦闷已经成为现代人的共同心愿。而本次的这个基于JAVA的推箱子小游戏正是使用JAVA语言并且结合于EditPlus编译器,为大家开发了一款适合的、休闲娱乐的游戏,在娱乐的同时也给忙碌的上班族们开拓了另一个思考问题的空间。

基于JAVA的推箱子小游戏主要分为初始化模块,画图模块,移动小人模块,移动箱子模块以及功能控制模块。玩家是通过控制小人的移动来推动箱子,需要避过障碍物与死角才能将其推放到指定位置从而达到过关的目的。每关的难易程度各异,不仅适合人们休闲娱乐,还有助于开发智力,提高人们思考问题能力与想象能力,改善思考方式,拓展思维。

关键词:JAVA;解压;推箱子;休闲娱乐

I

四川师范大学成都学院专科毕业设计

Abstract

In 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

II

四川师范大学成都学院专科毕业设计

目 录

前言 ............................................................................................................................................. 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

III

四川师范大学成都学院专科毕业设计

致 谢 .................................................................................................................................. 23

IV

四川师范大学成都学院专科毕业设计

引 言

在人类的社会生活当中,游戏占有很大的比重,并且随着社会的发展而不断发展。而且游戏本身具有激发人类潜在行为的特质,是一种能够吸引人们参与其中的活动,其本身具有强烈的吸引力使游戏者卷入其中;再者适当的游戏、合理的时间安排,能够让玩家在娱乐的同时还可以锻炼其反应速度及灵敏程度,学习到一些在学校里、课堂上学不到的知识与技能,亦可让玩家从压力中释放出来。因此游戏逐渐成为人们生活中不可缺少的一部分,游戏产业也正逐步发展成熟。

经典的推箱子游戏是一个来自日本的古老游戏,目的是在训练你的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙的利用有限的空间和通道,合理安排移动的次序和位置,才能顺利的完成任务。而且在如今科学技术不断发展的时代,推箱子小游戏的样式也趋于完美步调,当然这个世界上并没有绝对完美的东西,但就相对推箱子小游戏而言,如此巨大的发展也令人感叹。精美的画面,丰富的效果,以及方便的操作体现了推箱子小游戏的不断创新。

1

四川师范大学成都学院专科毕业设计

3.概要设计

3.1游戏设计分析

从面向对象的观念出发,本程序可分为以下几个对象:

? 地图文件的引用 ? 小人与箱子的移动 ? 程序运算逻辑 ? 绘图

? 显示平台

分析对象的技巧在于它的重复利用及维护效率。如果要把设计出来的程序在不同的显示平台上执行,就要作大幅度的更动甚至重写,这样就失去了面向对象属性,所以在本程序分析时将不变与易变的因素分别做成对象,如地图文件、小人与箱子的移动以及程序的运算逻辑就是不变的项目,而绘图及显示平台会因为环境而有所不同属于易变的项目。

3.3.1.地图文件的引用

在设计游戏程序时,通常都是把游戏的画面布局数据存放在一个地图文件中。程序通过读取地图文件中的数据来获取画面的布局安排。

地图文件是20*20的变量数组文件,在地图不同的数字代表不同的意义。把这组数据保存到一个文件中,这个文件就是地图文件了。

3.3.2.程序运逻辑

程序中逻辑运算包含小人与箱子的移动、键盘事件的响应、保存数据以实现悔步以及重新开始的操作等等。

3.3.3.绘图

绘图主要是用于在小人与箱子的移动后,原位置由草地填补,以此来表示小人与箱子的移动以及其画面的连贯性。

3.3.4.显示平台

“可移植性高”是Java的属性之一,Java的应用涉及许多领域,如手机、单机程序及浏览器等,不同的平台对于它的设定不尽相同,若将显示平台独立为一个类,将有助于主程序的完整性及移植程序的快速性。

7

四川师范大学成都学院专科毕业设计

3.2 注意事项

小游戏在设计时要注意绘图部分的设计代码,还要注意通过输入流读取地图文件与图像文件部分的设计代码等等。 3.3 游戏流程图

系统功能模块 初始化模块绘图模块移动小人模块移动箱子模块功能控制模块 8

图1 系统功能模块

四川师范大学成都学院专科毕业设计

4.详细设计

4.1游戏总体结构与代码 推箱子的小游戏界面如图4.1所示:

图4.1 小游戏界面

由图4.1可以看出,本小游戏的界面简洁、直观,从界面中可以直接得到本小游戏的相关功能操作信息。

(1)界面框架与按钮设计

界面设计中包括了所有玩家可以直观见到的图形界面,窗体的大小,界面中的功能按钮,让玩家可以方便使用操作。界面中的按钮包括:“悔一步”,“重来”,“上一关”,“下一关”,“第1关”,“最终关”,“选关”。并且各个按钮的名称与相关功能为:

“悔一步”:返回上一移动状态(可以连续返回多步);

9

四川师范大学成都学院专科毕业设计

“重来”:重新开始当前关;

“上一关”:返回到当前关的上一关; “下一关”:跳转到当前关的下一关;

“第1关”:游戏系统默认开始关为第一关,此按钮让玩家可以方便从其它关卡直接跳转到第一关;

“最终关”:可以跳转到最后一关,即游戏系统默认的最后一个关。 “选关”:选择想要挑战的关卡。 其中,这个部分的部分代码为:

public class GameTxz {

public static void main(String[] args) {

new mainFrame(); } }

class mainFrame extends JFrame implements ActionListener {

JButton btnrenew,btnlast,btnnext,btnchoose,btnfirst,btnover,btnback; mainpanel panel; mainFrame() {

super(\推箱子小游戏\

setBounds(150,20,700,690); setVisible(true); setResizable(false);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container cont=getContentPane(); cont.setLayout(null);

cont.setBackground(Color.black); btnback=new JButton(\悔一步\btnrenew=new JButton(\重来\btnlast=new JButton(\上一关\btnnext=new JButton(\下一关\

10

四川师范大学成都学院专科毕业设计

btnfirst=new JButton(\第1关\btnover=new JButton(\最终关\ btnchoose=new JButton(\选关\add(btnrenew); add(btnlast); add(btnnext) ; add(btnchoose); add(btnfirst); add(btnover); add(btnback);

btnback.setBounds(20,15,80,30); btnrenew.addActionListener(this); btnrenew.setBounds(120,15,80,30); btnback.addActionListener(this); btnlast.setBounds(220,15,80,30); btnfirst.addActionListener(this); btnnext.setBounds(320,15,80,30); btnlast.addActionListener(this); btnfirst.setBounds(420,15,75,30); btnnext.addActionListener(this); btnover.setBounds(510,15,75,30); btnover.addActionListener(this); btnchoose.setBounds(600,15,75,30); btnchoose.addActionListener(this); panel=new mainpanel(); add(panel);

panel.GameTxz(panel.level); panel.requestFocus(); validate();

}

}

(2)地图的绘制形成

地图以二维数组的形式进行存储,不同的数家代表了不同的含义。在本小游戏的地图文件中,0~9这十个数字的定义如下所示:

编号0:代表未定义的区域;

11

四川师范大学成都学院专科毕业设计

}

if(n==20)

{ if(maptmp[manY][manX]==4||maptmp[manY][manX]==9) {map[manY][manX]=4;} else map[manY][manX]=2; }

else if(n==21)

{ if(maptmp[manY][manX]==4||maptmp[manY][manX]==9) {map[manY][manX]=9;} else map[manY][manX]=3;

if(maptmp[manY+1][manX]==4||maptmp[manY+1][manX]==9) {map[manY+1][manX]=4;} else map[manY+1][manX]=2; }

map[manY-1][manX]=5;repaint();manY--;

(5)移动的代码

在本小游戏系统中,小人与箱子的移动应该是能带给玩家较为逼真的视觉感受,这样才能体现系统的有效性与娱乐性。玩家通过控制小人,推动箱子在草地上避过障碍物与边界死角来到达指定的终点位置。

其中,这个部分的部分代码为:

void moveright() {

if(map[manY][manX+1]==2||map[manY][manX+1]==4) {

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9) map[manY][manX]=4; else map[manY][manX]=2; map[manY][manX+1]=7; repaint();manX++;mystack.push(40); }

else if(map[manY][manX+1]==3) {

if(map[manY][manX+2]==4)

17

四川师范大学成都学院专科毕业设计

}

{ if(maptmp[manY][manX]==4){map[manY][manX]=4;} else map[manY][manX]=2; map[manY][manX+1]=7;map[manY][manX+2]=9; repaint();manX++;mystack.push(41); } else if(map[manY][manX+2]==2) { if(maptmp[manY][manX]==4){map[manY][manX]=4;} else map[manY][manX]=2; map[manY][manX+1]=7;map[manY][manX+2]=3; repaint();manX++;mystack.push(41); } else {map[manY][manX]=7;repaint();} }

else if(map[manY][manX+1]==9) {

if(map[manY][manX+2]==4) {

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9) map[manY][manX]=4; else map[manY][manX]=2; map[manY][manX+1]=7;map[manY][manX+2]=9; repaint();manX++;mystack.push(41); } else if(map[manY][manX+2]==2) {

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9) map[manY][manX]=4; else map[manY][manX]=2; map[manY][manX+1]=7;map[manY][manX+2]=3; repaint();manX++;mystack.push(41); } else {map[manY][manX]=7;repaint();} }

else if(map[manY][manX+1]==1) {map[manY][manX]=7;repaint();}

18

四川师范大学成都学院专科毕业设计

void backright(int t) { int n=t; if(n==40)

{ if(maptmp[manY][manX]==4||maptmp[manY][manX]==9) {

map[manY][manX]=4; }

else map[manY][manX]=2; }

else if(n==41) {

if(maptmp[manY][manX]==4||maptmp[manY][manX]==9) {map[manY][manX]=9;} else map[manY][manX]=3; if(maptmp[manY][manX+1]==4||maptmp[manY][manX+1]==9) {map[manY][manX+1]=4;} else map[manY][manX+1]=2; }

map[manY][manX-1]=7;repaint();manX--; }

(6)堆栈的应用

在推箱子小游戏中,数据的存储是非常重要的,不然就无法进行“悔一步”的操作。本小游戏系统受用了堆栈的存储方式来存储并且控制小人与箱子的移动以及地图文件的变换。而“悔一步”的操作让玩家可以进行反悔这一步操作,可避免因一时失手走错而导致的阻塞书面,可以节省玩家重新开始的时间。

其中,这个部分的部分代码为: else if(e.getSource()==btnback) { if(panel.isMystackEmpty())

JOptionPane.showMessageDialog(this,\您还未移动!\else {

switch(panel.back()) {

case 10:panel.backup(10);break; case 11:panel.backup(11);break;

19

四川师范大学成都学院专科毕业设计

}

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();

20

四川师范大学成都学院专科毕业设计

结 论

通过编写本次毕业设计程序,我完成了基于JAVA的推箱子小游戏的软件开发任务。在些其间,我遇到了许多问题,如地图文件的制作与读取、游戏界面过大或者过小、游戏图形的大小问题、小人与箱子的移动算法、堆栈算法的编写、悔步等操作的处理等等。不过,最终我都一一解决了相关问题,对其中比较主要的几点体会总结如下:

第一,为了熟悉推箱子小游戏的相关运作,我经常在电脑游戏上运用推箱子游戏,一步步地发现它所有的功能,然后再思考与查阅资料进行分析,最后经过逐步的设计与反复的修改论证,才完成了整个小游戏的开发。

第二,完成了从“小到全”,从“全到精”的转变。在设计的过程中,我经常会遇到一些困难,我也借此机会学会如何通过反复思考和测试找出自己的错误并加以改正,再进行下一个步骤的设计。本程序就是这样一点一点的完成的,在这之后再来优化整个程序。

第三,本次设计也让我得到一个不断学习新鲜事物的机会,从设计初的诸多不懂到最后能够顺利完成,期间我体会到在实践中学习的重要性,这对于将来我走上工作岗位具有重要意义。

第四,通过毕业设计使我对Java这门课程加深了解,也对我今后的就业之路奠定了一定的基础。

经过这些日子的不断努力,本次的毕业设计程序基本上完成了。回顾整个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,不仅使我受益匪浅,同时也体验到了开发软件开发的难度与不断更新自己的重要性。由于我是初次涉及这类开发软件,因此这其中或许还有很多的不足之处,界面的设计及整体的布局还比较简单,没有特别突出的特色,这也是我今后所要充实之处,在这里也恳请各位老师能够对我的作品指明不足并加以改正。

总体来说,这次毕业设计还是比较成功的,这也是我在大学四年来完成的一个比较全面的实际例子。在这次设计的过程,我也查阅了大量的资料,对Java有了更加全面的认识,对于软件工程这些辅助性的教材也巩固了不少,也为我这次的毕业设计提供了很大的帮助,同时锻炼并且增强了我这方面的能力。

21

四川师范大学成都学院专科毕业设计

参 考 文 献

[1] 张思民.JAVA开发技术与工程实践[M].北京:清华大学出版社,2010. [2] 耿祥义.JAVA2实用教程[M].北京:机械工业出版社,2006. [3] 汤一平.JAVA语言程序设计[M].北京:科学出版社,2006. [4] 张思民.JAVA程序设计实践教程[M].北京:清华大学出版社,2006. [5] 王薇.JAVA程序设计习题精编[M].北京:清华大学出版社,2011. [6] 朱仲杰.JAVA2全方位学习[M].北京:机械工业出版社,2006. [7] 毕广吉.JAVA程序设计实例教程[M].北京:冶金工业出版社,2007. [8] 刘腾红,孙细明.信息系统分析与设计[M].北京:科学出版社,2003. [9] Sharon Zakhour.JAVA教程[M].北京:人民邮电出版社,2007. [10] 王保罗.JAVA面向对象程序设计[M].北京:清华大学出版社,2003.

22

四川师范大学成都学院专科毕业设计

致 谢

在编写与实现本次毕业设计的过程中,我十分感谢同学们与老师给予我的关心和指导。因为我自身的基础相对较弱,许多的相关内容和知识都不是十分了解,多亏有同学们与老师的帮助与指导,我才能如此迅速地完成本次毕业设计,在此,我再次向帮助过我的同学们与老师表示真诚的感谢!多谢学校给我提供了舒适的工作、学习环境,使得开发过程得以顺利地进行!老师认真负责的工作态度、严谨的治学风格,使我深受启发;期间,与同学们之间的相互探讨也使我获益匪浅。毕业设计期间,我在学会用JAVA语言开发游戏之外,更重要的是学到了坚持不懈,奋发向上的精神,这种精神将会成为我今后人生前进道路上的一种动力。

23

本文来源:https://www.bwwdw.com/article/91mg.html

Top