经典推箱子游戏:训练逻辑思考能力的日本古老游戏解析与玩法指南
Classic Push Box是日本的古老游戏,旨在训练玩家的逻辑思维技能。在一个小仓库中,有必要将木箱放在指定的位置。如果您不小心,将不会移动盒子,否则将被阻塞。因此,您需要巧妙地使用有限的空间和渠道,并合理地安排行动顺序。仅通过成功完成任务才能通过定位完成。
盒子推游戏功能如下:
游戏运行并加载相应的地图。一个推盒的工人出现在屏幕上,周围是墙壁,人们可以走路,几个可移动的盒子和盒子,以放置盒子。让玩家控制工人通过按下向上,向下,左右按钮来推动盒子。将框推到目的地时,将出现通行信息,并将显示下一个级别。如果玩家推了错误的方式,他可以撤消运动或再次发挥水平,直到所有级别通过。
盒子游戏的运行接口如上图所示。
该游戏中使用的图片元素的含义如图9-2所示。
01。盒子游戏的想法
让我们首先确定发展困难。工人的操作非常简单,只需向4个方向移动即可。请注意,当工人移动时,盒子也会移动,此效果也需要简单的密钥处理。当盒子到达目的地位置时,将生成游戏通行证事件,这需要逻辑判断。然后仔细考虑一下,所有这些事件都发生在一个地图中。该地图包括盒子的初始化位置,盒子的最后放置以及墙壁屏障。每个级别的地图都必须更改,也必须更改这些位置。因此,每个级别的地图数据是最关键的,它决定了每个级别的不同场景和对象位置。然后,让我们专注于分析下面的地图。
假设您将地图视为网格,每个网格是工人和盒子移动的距离的每个移动的步长,因此问题将得到大大简化。首先,设计一个16×16的二维阵列curmap。根据此框架考虑一下。对于网格的X和Y,可以从二维列表下标转换两个屏幕像素坐标。
每个网格状态值使用值(0)表示通道块,(1)表示墙,(2)表示目标球,(3)表示框盒,(4)代表工人库尔曼,(5)表示位置。目标盒红框。存储在文件中的原始映射中的网格的状态值以相应的整数形式存储。
当玩家控制工人以通过键盘推动盒子时,他需要判断是否对关键说明进行了响应。以下是对工人对所有规则和相应算法进行总结的分析。为了方便描述,可以假定工人的运动趋势方向是正确的,而其他方向原则是一致的。如图9-4所示,P1和P2代表了工人运动趋势方向的前两个网格。
图9-4工人移动趋势(右边)
游戏规则被判断为如下。
(1)确定P1是否超出边界。如果它超出了范围,它将退出规则判断,并且布局不会更改。
if(p1.x< 0) return false;
if(pl.y< 0) return false;
if(pl.y>= curMap.length) return false;
if(p1.x>= curMap[0].length) return false;
(2)前方的P1是一堵墙。
如果工人前面有墙(即,阻止工人的路线)
退出规则判断,也没有对布局进行任何更改;
if(curMap[p1.y][p1.x] == 1
return false; //如果是墙,不能通行
(3)前面的P1是盒子,如图9-5所示。
图9-5工人前面有一个盒子
(3)前面的P1是盒子,如图9-5所示。
在上一种情况下,可以确定工人是否可以根据框前的P1对象移动。在第三种情况下,有必要确定工人是否可以移动。目前有几种可能性。
p1处的盒子是放在目的地的盒子或盒子,P2处的墙壁或盒子是墙壁。
如果工人在P1的前面,将一个盒子或盒子放在目的地,P2是墙壁或盒子,请退出规则判断,并且没有对布局进行更改。
if(curMap[pl.y][p1.x]== 3 curMap[p1.y][p1.x]== 5)
//如果是箱子,继续判断前一格
if(curMap[p2.y][p2.x] == 1 curMap[ p2.y][p2.x]== 3
curMap[p2.y][p2.x]== 5)
return false;
//前一格如果是墙或箱子,则不能前进
p1处的盒子是一个盒子或盒子放在目的地,P2处的通道是通道。
如果工人在P1的前面,并且工人在频道中,则工人可以进入P1网格,并且P2网格状态在框中。修改相关位置网格的状态值。
③PlaceP1是放置在目的地中的盒子或盒子,而P2是目的地。
如果工人在P1的前面,并且工人在目的地,则工人可以输入P1网格,并且P2网格状态在放置的框中。修改相关位置网格的状态值。
//如果是箱子,继续判断前一格
if(curMap[pl.y][p1.x]== 3 curMap[p1.y][p1.x]== 5)if(curMap[p2.y][p2.x]==0 curMap[p2.y][p2.x]== 2) //如果 P2 为通道或者目的地
//记录现在的地图
oldMap = copyArray(curMap);//箱子前进一格
curMap[p2.y][ p2.x]= 3;//如果原始地图是目的地或者是放到目的地的箱子if(CurLevel[p2.y][p2.x] == 2 CurLevel[p2.y][p2.x] == 5)curMap[p2.y][p2.x] = 5;
canReDo = true;//工人前进一格
curMap[ p1.y][p1.x] = 4; //4 代表工人
//处理工人原来位置是显示目的地还是通道平地//获取工人原来位置原始地图信息var v= CurLevel[per position.y][per position.x];if(v== 2 v== 5)[ //如果原来位置是目的地或者放到目的地的箱子curMap[per_position.y][per position.x]=2;
//显示目的地
else
//显示通道平地
curMap[per position.y][per position.x]=0;
根据先前的分析,我们可以设计整个游戏的实现过程。
02。设计盒子游戏的步骤
游戏页面推箱。 html
< head >
推箱子游戏
< meta http - equiv = content - type content = "text/html; charset = utf - 8">
< img id ="wall"src ="img/wall.gif"style = "display:none;">< img id= "redbox”src ="img/redbox.gif"style ="display:none;">< img id="pleft"src = "img/left.png"style ="display:none;'< img id="pdown”src ="img/down.pngstyle ="display:none;">< input type ="button"value ="下一关"onclick ="NextLevel(1)">
< input type="button"value ="撤销移动”onclick ="Redo()">
< input type="button"value ="游戏说明”onclick ="DoHelp()">< script type = "text/javascript"src = "mapdata100.js">