基于RPGMakerMV的JavaScript基础-6

第六章        动态操作事件

第一节        扫雷游戏

扫雷游戏是一种比较简单而有趣的游戏,实现起来也简单。
据说有纯事件的实现,然而我们这次再装一个小逼,要实现通过脚本动态的对事件进行操作。
首先是我们的思路:
由js脚本完成逻辑层,即整个扫雷的实现完全由js脚本实现,而地图上的事件仅仅用来做显示和交互(点击)用。
并且,对于地图上的事件变化的控制,也应当由脚本来决定,包括动态生成事件(即根据设定来动态决定格子的数量和雷的数量)。
先准备一张图再说,我们要用行走图的不同方向来表示不同的数字?或者小旗子,然后通过控制事件的方向来改变显示的数字,如图6-1所示。


 
图6-1

研究Game_Event可知,其显示的图片由_direction和_originalPattern两个属性决定,关系如下表:

→_originalPattern
↓_direction
0 1 2
2 空地 旗子 地雷
4 0(空地) 1 2
6 3 4 5
8 6 7 8


第二节        系统设计

首先还是老套路,来个命名空间MineSweeping,接下来我们再多添加一个debug用的标志Debug,方便我们区分调试和正式的内容。


接下来是区域的宽度和高度,以及地雷的数量。还有记录地雷分布的数组MineMap(这个数值将在后面被变成二维数组,后面几个也一样),记录玩家清扫过的地雷的记录(即显示在屏幕上的数据的记录)的数组FoundMap,还有将动态生成的事件引用过来保存起来的数组EventMap。
记录游戏状态,方便交互的State,还有左上角第一个事件,也是copy的原型事件的位置。
这些都可以在游戏中用事件里面的脚本控制。如图6-2。


游戏状态的改变我们用Start,Lost,Win三个方法封装起来。如图6-3。



游戏开始后,首先初始化地雷分布,由Math.Random()函数来确定出随机生成的地雷的位置。
接下来,需要写好点击一下(或者叫扫雷一下,对着空白的格子点一下)的方法,即Click(原谅我起名字捉急)。如果点中了雷,那么直接游戏失败,否则,统计一下周围一圈的雷的数量,然后把这个数字记录到FoundMap里面。
这里需要注意的是,如果周围都没有雷,那么我们需要把四周都自动点击(Click)一遍,这是一个递归用法。
然后,是标记(画小旗子,记录一下这里有雷)的方法,即Sign。这个方法比较简单,只需要对于白方块改变状态为被标记状态就好,当然还需要把小旗子标志取消后恢复为白方块。
之后,是扫过一圈,通常用在这个数字旁边插够了小旗子,然后程序帮助你把这个数字周围都点击一遍,即Sweep。以上这几个方法如同6-4。


 
图6-2
 
图6-3
 
图6-4

最后是将扫雷的逻辑操作跟MV的事件绑定在一起,让游戏的图形界面发挥功能。如图6-5,我们用Binding,Recheck和Refresh来完成。
Binding方法将根据设定好的地图大小(扫雷区域的宽和高)复制那个样板事件,并且移动到对应的位置,这里复制事件用的函数来自汪神的思路(我只是大自然的搬运工,以及感谢汪神)。另外还要将生成的事件引用存到我们的EventMap数组里面,方便我们的使用。
之后就是对事件的显示的图像进行操作了,这就是Recheck方法的功能,检测i,j位置处的FoundMap的值,即游戏中地块的状态。然后将对应的EventMap中的事件的_direction和_originalPattern两个属性做出相应的改变。
最终就是Refresh方法,要使得事件的图像跟FoundMap的值一一对应起来,关键在于不断的进行同步,即不断的执行Recheck方法,这就是Refresh方法的功能,显然这需要异步方法进行实现,这里为了方便,就将这个方法放到了MV的并行事件中去执行了。如图6-6。


 
图6-5
 
图6-6

这就是整个游戏程序的思路,当然具体实现还要看具体的代码。



第三节        事件调用

插件的代码部分设计好后,我们就要在MV的事件里面调用它了。
由于模仿单击,右击还有左右键同时按比较困难,我们就用一个MV变量来决定到底用什么击。


 
图6-7

像这样,旁边放三个事件,分别使得MV变量0001的值变为0,1,2,分别用作单击,标记,还有扫一大片。如图6-7


然后是设置好地块事件,在运行时会复制此地块,如图6-8。在此事件中,由确定键触发,即点击鼠标触发,触发后,先获取玩家的位置x,y,然后将其依据操作类型进行处理,并将玩家的位置MV地图的x,y值转化为扫雷数组的x,y,再调用对应的操作的方法。


然后是游戏的初始化,即设置好地图的起始点,地图的宽高,雷的数量,复制地块等操作,如图6-9。


最后是游戏的重新开始,如图6-10。


至此,一个简单的扫雷小游戏就完成了。



图6-8

 
图6-9


 
图6-10
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
【实例教程1】怎样编写一个插件? 1. 插件的注释与定义参数 2. 读取插件参数 3. 插件指令的实现 【实例教程2】制作一个启动画面 1. 从哪里开始? 2. 创建启动画面的场景类 【实例教程3】玩转菜单初级篇 1. 给各个菜单界面添加背景 2. 让背景滚动起来 3. 在主菜单界面增加自定义菜单:改名 4. 在主菜单界面移除菜单命令 5. 在主菜单界面增加一个自定义窗口 【实例教程4】玩转标题画面 1. 美化游戏标题 2. 让背景动起来 3. 自定义标题菜单 4. 美化菜单 【实例教程5】制作小游戏:坦克大战(上) 1. 游戏结构及流程介绍 2. 相关素材资源的下载和使用 3. 基础知识:音效的播放 4. 基础知识:精灵表的切帧 5. 基础知识:使用MV中的动画 6. Scene_TankWarTitle类解析 7. Sprite_Bullet类解析 8. Sprite_Explode类解析 9. Sprite_Tank类解析 10. Sprite_Enemy类解析 11. Scene_TankWar类解析 12. Scene_TankWarGameOver类解析 【实例教程6】存档的加密解密与保护 1. 找出MV存档和读档的方式 2. 制作MV存档的修改器 3. 如何保护存档? 4. 制作一个存档保护插件 【实例教程7】制作一个传送插件 1. 传送插件的主要功能 2. 将自定义数据保存到存档中 3. meta数据的使用 4. 使用地图备注登记传送点 5. 在插件中解析并记录传送点 6. 使用地图备注登记多个传送点并在插件中记录 7. 制作传送点选取窗口显示传送点数据 8. 将物品或技能标记为传送物品、传送技能 9. 显示传送动画实现传送功能 10. 禁止使用传送道具或传送技能 11. 实现插件命令
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值