最新活动
云服务器
虚拟主机
裸金属
域名注册
SSL证书
产品
云计算
云服务器
负载均衡
云数据库 MySQL
云数据库 SQL Server
对象存储
网络内容分发
网站服务
云虚拟主机
域名注册
短信服务
百度智能建站
WordPress主机
IDC服务
服务器托管
裸金属
商标注册
代理加盟
安全服务
SSL证书
云监控
网站备案
更多产品
400企业电话
短视频推广
嗨团数字人
中国站
中国站
简体中文
备案
-
控制台
退出
备案
免费注册
登录
关于我们
质量为本、客户为根、勇于拼搏、务实创新
公司简介
新闻公告
联系我们
法律声明
友情链接
新闻公告
官方公告
业界新闻
产品资讯
< 返回新闻公共列表
HTML5 游戏开发实战 | 推箱子
发布时间:2023-06-26 09:57:38
经典的推箱子是一个来自日本的古老游戏,目的是在训练玩家的逻辑思考能力。在一个狭小的仓库中,要求把木箱放到指定的位置,稍不小心就会出现箱子无法移动或者通道被堵住的情况,所以需要巧妙地利用有限的空间和通道,合理安排移动的次序和位置,才能顺利地完成任务。 推箱子游戏功能如下: 游戏运行载入相应的地图,屏幕中出现一个推箱子的工人,其周围是围墙、人可以走的通道、几个可以移动的箱子和箱子放置的目的地。让玩家通过按上、下、左、右键控制工人推箱子,当箱子都推到了目的地后出现过关信息,并显示下一关。推错了玩家可以撤销移动或者重新玩这关,直到通过全部关卡。 推箱子游戏的运行界面如上图所示。 本游戏使用的图片元素的含义如图9-2所示。 01、箱子游戏设计的思路 先来确定一下开发难点。对工人的操作很简单,就是4个方向移动。注意在工人移动时箱子也移动,此效果对按键处理的要求也比较简单。当箱子到达目的地位置时,需会产生游戏过关事件,需要一个逻辑判断。那么仔细想一下,这些所有的事件都发生在一张地图中。这张地图包括了箱子的初始化位置、箱子最终放置的位置,以及围墙障碍等。每一关地图都要更换,这些位置也要变。所以每一关的地图数据是最关键的,它决定了每一关的不同场景和物体位置。那么下面就重点分析一下地图。 假设把地图想象成一个网格,每个格子就是工人每次移动的步长,也是箱子移动的距离,这样问题就简化多了。首先设计一个16×16的二维数组curMap。按照这样的框架来思考。对于格子的X,Y两个屏幕像素坐标,可以由二维列表下标换算。 每个格子状态值分别用值(0)代表通道Block,(1)代表墙Wall,(2)代表目的地Ball,(3)代表箱子Box,(4)代表工人CurMan,(5)代表放到目的地的箱子redBox。文件中存储的原始地图中格子的状态值采用相应的整数形式存放。 在玩家通过键盘控制工人推箱子的过程中,需要按游戏规则进行判断是否响应该按键指示。下面分析一下工人将会遇到什么情况,以便归纳出所有的规则和对应算法。为了描述方便,可以假设工人移动趋势方向为向右,其他方向原理是一致的。如图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] == 1return false; //如果是墙,不能通行(3) 前方P1是箱子,如图9-5所示。■ 图9-5工人前方是箱子 (3) 前方P1是箱子,如图9-5所示。 在前面的情况中,只要根据前方P1处的物体就可以判断出工人是否可以移动,而在第3种情况中,需要判断箱子前方P2处的物体才能判断出工人是否可以移动。此时有以下几种可能。 ① 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处为箱子,P2处为通道,工人可以进到P1方格,P2方格状态为箱子。修改相关位置格子的状态值。 ③ P1处为箱子或者放到目的地的箱子,P2处为目的地。 如果工人前方P1处为箱子,P2处为目的地,工人可以进到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、推箱子游戏设计的步骤游戏页面pushbox.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">