盒子世界怎么玩推箱子游戏,以前在手机上玩过类...

(原创)控制台小游戏之《推箱子》及关卡地图编辑器 - 下载频道
- CSDN.NET
&&&&(原创)控制台小游戏之《推箱子》及关卡地图编辑器
(原创)控制台小游戏之《推箱子》及关卡地图编辑器
压缩包包含控制台版本的《推箱子》游戏及关卡地图编辑器的源代码及可执行程序;你没有看错,它是基于控制台的,画面是“字符模式”的,如果你是画面党就要慎重下载了;尽管它是个控制台程序,相比你以前可能玩过的是有些不一样的,它的“画面”并不差也不抽象,操作也不需要输入任何命令行等繁杂步骤,与其他2D游戏一样,有组成完整游戏的各个子画面;除此之外,提供了一个地图编辑器,可提供玩家自行设计关卡。
若举报审核通过,可奖励20下载分
被举报人:
hwenycocodq520
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
开发技术下载排行亚当夏娃吃禁果
非玩不可的推箱子游戏
登录7k7k发现更多乐趣
7K7K网页游戏
7K7K儿童游戏
法律顾问:北京市诺恒律师事务所
京公网安备
游戏作品版权归原作者享有,如无意之中侵犯了您的版权,请您按照来信告知,本网站将应您的要求删除。
7k7k小游戏温馨提示:适度游戏娱乐,沉迷游戏伤身,合理安排时间,享受快乐生活……13117人阅读
这类游戏大家肯定都玩过,一个很有趣味性的小游戏。操作简单,具有一定的逻辑性。很适合无聊的时候消遣时间。:)
首先简单介绍下手机游戏的一般性开发过程。首先需要策划出一个游戏方案,也就是要给出一个游戏的整体形象。当然是想象中的。比如:游
戏题材,背景,操作方法,人物,与奖励机制。然后对这个策划方案进行可行性分析,包括技术,市场,可用资源等。下一步就是编码阶段,
一般编码和制作资源可以同步进行。 等程序和资源都弄好了,一个游戏的雏形就大致出来了。后面就是测试与移植等等工作。
我们要做的是让一只小松鼠推箱子,操作方法就是通过四方向键对松鼠进行上,下,左,右的移动。在移动过程中可以把碰到的箱子推到任意
一个方向。当然在游戏中需要设置一些障碍物,让游戏具备可玩性。游戏采用过关制,当松鼠把所有箱子推到指定的位置就算过关。所以每关
的场景要不同。这需要对每关的地图进行编排。好了,我们的游戏策划就算完成,嘿嘿!简单吧,想象是多么美好啊。
下面就没这么轻松了,我们要进行技术分析。就是具体的代码如何来实现的。首先我们来确定一下开发难点。对松鼠的操作很简单,就是四方
向移动,松鼠移动,箱子也移动,所以对按键处理也比较简单些。当箱子到达某个位置时,就会产生游戏过关事件。需要一个逻辑判断。那么
我们仔细想一下,这些所有的事件都发生在一张地图中。这张地图就包括了 箱子的初始化位置,箱子最终放置的位置,和障碍等。每一关地图
都要更换。这些位置也要变。所以我们发现每关的地图数据是最关键的。它决定了每关的不同场景和物体位置。好。那么我们就重点分析一下
我们把地图想象成一个网格,每个格子就是松鼠每次移动的步长,也是箱子移动的距离,这样问题就简化多了。首先我们设计一个8*8的数据结
构。按照这样的框架来思考。 每个格子都会有哪些属性呢?首先就是格子的坐标,包括X,Y两个数值,还有一些地图的属性,比如这个格子是
否为障碍,是否为初始化的箱子位置,是否为箱子终点的位置。由于我们的数据结构是二维的,但是还有一维表示不出来,所以我们设计一个
三维数据:如下:
private static int[][][] map_data = new int[8][8][5];&//第一维& -& [8] 表示地图的高,由8个格子组成&&&&&&&&&&&&&&&//第二维 -& [8] 表示地图的宽,由8个格子组成&&&&&&&&&&&&&&&&
//第三维& - [0] 每个格子的X坐标&&&&&&&&&&&&&&&//&&&&&&& - [1] 每个格子的Y坐标&&&&&&&&&&&&&&&//&&&&&&& - [2] 是否为障碍 0表示空地 1表示障碍&&&&&&&&&&&&&&&//&&&&&&& - [3] 箱子的终点坐标,0不是终点坐标 1绿箱子 2 红箱子&&&&&&&&&&&&&&&//&&&&&&& - [4] 箱子的初始化位置 [0]不是初始化坐标& [1]绿箱子 2红箱子
地图大致就是这样的数据结构,我们设计两种颜色的箱子,这样增加一下游戏的难度。
好了,有了地图,我们的逻辑就可以实现了。利用一点时间,我把游戏的图片画好了,好在我是美术专业毕业,画这些小像素图还挺顺利。
我们先把游戏的界面部分处理一下。界面就是菜单,进度条,还有游戏中的绘制。 菜单和进度条略过,因为这些可以自己设计的。
下面是画地图和松鼠.箱子以及指示终点位置的方法。
//画地图private void drawMap(Graphics g){&&
&for(int m = 0 ; m & map_data. m ++ )&// Y坐标&{&&for(int n = 0 ; n & map_data[m]. n++)&// X坐标&&{&&&&&&&&&&&if(map_data[n][m][2] == 1)&//如果是空地&&&{&&&&g.drawImage(map[0],map_data[n][m][0],map_data[n][m][1],0);&&&&&&
&&&}else if(map_data[n][m][2] == 0)&//如果是障碍&&&{&&&&g.drawImage(map[1],map_data[n][m][0],map_data[n][m][1],0);&&&&&
&&&&&&&&&&}
&&&&&}&&&&}
map数组是只有两个元素的图片数组,里面有两幅图,分别为空地和障碍。
//画松鼠private void drawSqu(Graphics g){&g.drawImage(squirrel[sdir],map_data[( splace[1] )][( splace[0] )][0],map_data[( splace[1] )][( splace[0] )][1],0);}
这里的splace[] 是松鼠的初始化位置,这个随每关的不同,也会有变化。sdir 表示松鼠的方向,对应着squirre[] 数组中的松鼠图片
//画箱子private void drawBoxs(Graphics g){&for(int i = 0; i & nplace. i++)&{&&g.drawImage(nut[(nplace[i][2]-1)],map_data[(nplace[i][1])][(nplace[i][0])][0],map_data[(nplace[i][1])]
[(nplace[i][0])][1],0);&&&}}
nplace[][]& 是箱子的初始化位置坐标,第一维表示有几个箱子,第二维表示 X,Y坐标 和 颜色 属性nut[] 是箱子图片数组
//画箱子终点位置的指示private void drawNutDest(Graphics g){&for(int i = 0; i & ndplace. i++)&{&&g.drawImage(nut[(ndplace[i][2]+1)],map_data[(ndplace[i][1])][(ndplace[i][0])][0],map_data[(ndplace[i][1])]
[(ndplace[i][0])][1],0);&}}
我们对箱子重点的指示也采用图片,这样使画面效果更美观一些。同样 ndplace[][]& 和 nplace[][]& 的属性都一样。 只不过表示终点坐标nut[]数组的另外元素表示 指示重点坐标的图片。
以上就是我们的游戏主界面。看着挺简单的吧。呵呵。下面要实现操作控制方法与判断输赢的逻辑了。嘿嘿,要有耐心。
前面我们提到,当移动松鼠时,箱子就跟着动,那么我们就分别写两个方法,来移动他们。
/*移动松鼠*/private static final void moveSqu(){&&
&/*表示在松鼠的移动方向是否有箱子*/&boolean hit = &&&/*指示一个箱子可以被移动*/&boolean mf = &&&/*当为向上移动时*/&if( moveS[0] )&{&&&&&/*当向上移动时,调整图片为第二张松鼠图*/&&sdir = 2 ;&&&&&&&/*将可移动表示设置为假*/&&moveS[0] =&&&&&&&&/*查找是否有箱子在松鼠傍边*/&&for(int r=0; r & nplace. r++)&&&{&&&/*如果有箱子*/&&&if( ((splace[1] - 1) == nplace[r][1]) && (splace[0]& == nplace[r][0] )){&&&&&&&&&/*移动箱子,并返回一个判断,表示是否可以继续被移动*/&&&&mf = moveBoxs(0,r);&&&&&&&&&&&&&/*设置碰撞标志*/&&&&hit = &&&}&&&&&&}&&&&/*如果傍边没箱子,是空地*/&&if(& (map_data[(splace[1] - 1)][(splace[0])][2] == 0 ) && (!hit ) )& &&{&&&&&&/*移动松鼠*/&&&&splace[1] -= 1 ;&&&&&&&}&&/*如果碰到箱子*/&&if(hit) &&{&&&/*并且这个箱子可以被推动*/&&&if(mf){&&&&/*移动松鼠*/&&&&splace[1] -= 1 ;&&&&/*设置碰撞为否*/&&&&hit =&&&}&&}&&&&}&/*向下方向*/&if( moveS[1] )&{&&//debug(&down&);&&sdir = 3;&&moveS[1] =&&& &&for(int r=0; r & nplace. r++)&&{&&&if( ((splace[1] + 1) == nplace[r][1] ) && ( splace[0]& == nplace[r][0] )){&&&&mf = moveBoxs(1,r);&&&&hit = &&&&&&&&}&&&&&&}&&if( (map_data[(splace[1] + 1)][(splace[0])][2] == 0 ) && (!hit))&&{&&&splace[1] += 1 ;&&&&&&&}&&if(hit)&&{&&&if(mf)&&&{&&&&splace[1]+=1;&&&&hit = &&&}&&}&&&&&&&&&&&&&}&/*向左方向*/&if( moveS[2] )&{&&//debug(&left&);&&sdir = 0;&&moveS[2] =&&&&&for(int r=0; r & nplace. r++)&&{&&&if( ((splace[0] - 1) == nplace[r][0]) && ( splace[1] == nplace[r][1] )){&&&&mf = moveBoxs(2,r);&&&&hit = &&&&&&&&}&&&&&&&&&&}&&if( (map_data[(splace[1])][(splace[0] - 1)][2] == 0 ) && (!hit)){&&&splace[0] -= 1 ;&&&&&&}&&if(hit)&&{&&&if(mf)&&&{&&&&splace[0] -= 1 ;&&&&hit =&&&}&&}&&&&&&&}&/*向右方向*/&if( moveS[3] )&{&&//debug(&right&);&&sdir = 1 ;&&moveS[3] =&&for(int r=0; r & nplace. r++)&&{&&&if( ((splace[0] + 1) == nplace[r][0] ) && ( splace[1] == nplace[r][1] )){&&&&mf = moveBoxs(3,r);&&&&hit = &&&}&&&&&&}&&if( (map_data[(splace[1])][(splace[0] + 1)][2] == 0) && (!hit)) {&&&splace[0] += 1 ;&&&&&&}&&if(hit)&&{&&&if(mf)&&&{&&&&splace[0] += 1 ;&&&&hit = &&&}&&}&&&&&&}
上面这个方法看起来比较长,其实逻辑比较简单,就是分别对应四个方向的移动来判断。可以看向上方向移动的注释。moveS[]是个blooean数
组,用来表示松鼠的移动方向,这个数组会在keyPressed()被赋值,当某方向键按下时对应方向的标志就设置为真。下面的moveBoxs() 方法,是
判断某个箱子在被推动的方向上是否还有其它箱子阻碍,如果有就返回true.否则false.并且移动这个箱子。
/***方法功能:移动箱子**参数: dir:被推动的方向 . nm: 表示哪个箱子**返回值: 该箱子是否可以被推动*/private static final boolean moveNuts(int dir,int nm){&/*指示另外的箱子在该箱子傍边*/&boolean hit =&&&/*临时变量*/&boolean mf = &&switch(dir)&{&&case 0: //'up'
&&&/*对所有箱子坐标遍历*/&&&for(int i = 0 ; i & nplace. i++)&&&{&&&&/*使用坐标判断,如果当前箱子要移动的方向上有其他箱子那么就标志上*/&&&&if( ((nplace[nm][1] - 1) == nplace[i][1] ) && ( nplace[nm][0] == nplace[i][0]))&&&&&hit =
&&&}&&&/*如果为空地*/&&&if( (map_data[(nplace[nm][1] - 1)][(nplace[nm][0])][2] == 0 ) && (!hit) )&&&{&&&&/*移动这个箱子,并且将返回值设置为可以移动*/&&&&nplace[nm][1] -= 1 ;&&&&mf = &&&}&&&&&&&&&case 1:&//'down'&&&for(int i = 0 ; i & nplace. i++)&&&{&&&&if( ((nplace[nm][1] + 1) == nplace[i][1] ) && ( nplace[nm][0] == nplace[i][0]))&&&&&hit =
&&&}&&&if( (map_data[(nplace[nm][1] + 1)][(nplace[nm][0])][2] == 0) && (!hit) )&&&{&&&&nplace[nm][1] += 1 ;&&&&&&&&&&mf =&&&}&&&&case 2: //'left'&&&for(int i = 0 ; i & nplace. i++)&&&{&&&&if( ((nplace[nm][1]) == nplace[i][1] ) && ( (nplace[nm][0] - 1) == nplace[i][0]))&&&&&hit = &&&}&&&if( (map_data[(nplace[nm][1])][(nplace[nm][0] - 1)][2] == 0) && (!hit))&&&{&&&&&nplace[nm][0] -= 1 ;&&&&&mf =&&&}&&&&case 3: //'right'&&&for(int i = 0 ; i & nplace. i++)&&&{&&&&if( ((nplace[nm][1]) == nplace[i][1] ) && ( (nplace[nm][0] + 1) == nplace[i][0]))&&&&&hit =
&&&}&&&&&&&&if( (map_data[(nplace[nm][1])][(nplace[nm][0] + 1)][2] == 0) && (!hit) )&&&{&&&&nplace[nm][0] += 1 ;&&&&&&&&&&mf =&&&}&&&}
这个方法跟判断松鼠是否可以移动原理一样,其实完全可以和移动松鼠的方法结合一起来处理,而且可以优化很多东西,但为了逻辑更清晰,
就分开来做。
/*判断过关*/private static final boolean isWin(){&boolean temp =&int nn = 0;&for(int r = 0 ; r & nplace. r++)&{&&for(int m = 0 ; m & ndplace. m++)&&{&&&if( (nplace[r][0] == ndplace[m][0] ) && (nplace[r][1] == ndplace[m][1]))&&&&nn++;&&}&}
&if(nn == nplace.length)&&temp =&else&&temp =
判断过关的逻辑很简单,就是对目的地坐标与当前箱子坐标一一对照,如果所有箱子都已经被正确推到目的地,就算过关。
到现在,我们的游戏界面,和游戏逻辑实现就都完成了,感觉是不是很简单。呵呵,当然要完成整个游戏,还要写一些固定的方法。比如
keyPressed();获得按键值& paint() 来画图& 线程run() 来实现刷屏幕等等。由于篇幅有限就不一一介绍了。下面附上一幅游戏完成的截图。
看看效果吧。
代码与图片下载:&
《松鼠推箱子》游戏截图
程序设计与图片制作:关文柏&&&&&& Email:k7sem_
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:336442次
积分:2250
积分:2250
排名:第7699名
原创:28篇
评论:159条
(1)(2)(1)(1)(1)(1)(1)(1)(3)(3)(5)(1)(1)(2)(1)(2)(1)老鼠与奶酪推箱子 Mouse an...有趣的游戏
老鼠与奶酪推箱子 Mouse an...
更新时间:
下载:216次
平台:Android
台电G17有趣的游戏老鼠与奶酪推箱子 Mouse an...
是一款非常有趣好玩的游戏,很多玩家都很喜欢。这款游戏制作精良,无论是画面、音效还是内容都非常出色,没玩过的话不妨试一下,一定让你爱不释手。
请选择品牌
请选择机型G17
小贴士:建议您想先设置机型,设置后您就直接浏览全部适合您手机的游戏,下载使用更放心。
九游()是手机游戏下载第一门户,提供最新台电台电G17下载、礼包、激活码,最好玩的老鼠与奶酪推箱子 Mouse an...攻略,欢迎访问与玩家交流。
推箱子系列游戏,很简单,小老鼠在野外找到了奶酪,你来帮助它把东西搬回家吧,关卡越到后面越难哦。
点击查看更多
您可能还想关注:
看了老鼠与奶酪推箱子 Mouse an...有趣的游戏的用户还看了:
关于台电G17
台电科技是一家享誉全球的知名IT资讯企业。 台电科技始终坚持品质至上的原则,精益求精,不断创造应用需求的同时坚持提升产品性能及技术含量。多年来,台电科技通过严格的技术和品质把关,使产品下线良品率达到99.8%,常规情况下用户故障率低于千分之五。同时,台电科技一直与国际一流生产厂保持着良好的技术交流和合作关系。 专区提供最新手机游戏免费下载。
G17的分辨率为800*1280,是台电生产的一款触屏手机。台电G17手机用户可通过九游下载。盒子世界网游视频&第1集&盒子世界-昆塔传奇3D动画电影预告片
您所在的位置:&&&&&&&
播放:35,378次
盒子世界网游视频剧集列表
盒子世界网游视频相关动画片
盒子世界网游视频相关小游戏
盒子世界网游视频相关图片
大家都在看
动画片大全
动画片大全

我要回帖

更多关于 盒子世界怎么玩 的文章

 

随机推荐