当前位置:
文档之家› 第六章 地图布置与地图相关算法.
第六章 地图布置与地图相关算法.
2.5 常见的地图编码方式
非二维阵列地图的阵列化
事实证明,二维阵列是游戏地图非常简单、非常有用的编码与索引方式。如 果可能,应尽量采用阵列编码,以便获得阵列计算的简单性。例如九子游戏, 每个位置的编码不仅要起到互相区分的作用,还要能够以此判断棋子之间是 否同在一条连线上。如果仅是从上到下,从左到右对位置逐个编码,则难以 实现同线判断。但事实上,这个地图还是有规律可循的,可以将地图理解成 是一个二维阵列上分布的点。这样我们又可以使用二维数组来存储索引每个 位置单元了,此时同线与否就再明显不过了。
2.6 常见的地图编码方式
用图进行地图编码
图是一种数据结构,它指出了每个节点的信 息以及它的相邻点。 假如游戏中有如下的一张地图:
由于其连线的不规则性,不能采用简单的阵 列化编码。
2.6 常见的地图编码方式
方法是先对位置按顺 序编码,如下图所示:
节点编码 0 1 2 3 相邻节点 1,2,3 0,2,4,5 0,1,3,5 0,2,5,6 1,5,7 1,2,3,4,6,7 3,5,7 4,5,6
好的地图编码算法应该是既满足记录数据的需要,又 是最简的。
2.1 常见的地图编码方式
一维数组(队列,堆栈)
例如开心碎碎冰游戏
2.2 常见的地图编码方式
二维数组
例如炸方块游戏
2.3 常见的地图编码方式
变形的二维数组编码方式
例如蜂窝状地图,这样的地图每个格子有六 个方向的通路。也有可能是菱形或者六边形, 如下图所示:
2.8 常见的地图编码方式
小结
元件是游戏地图的展现,编码是游戏地图的 结构,算法是地图功能的实现。 地图编码以简单有效为设计准则。 不管使用何种编码方式开发游戏,最好都先 画好编码图,甚至打印出来放在电脑旁以便 随手翻阅。
3 扫雷游戏的编码与实现
内容包括:
编码与索引 布置雷区 随机分布地雷 计算单元格周围雷数 无雷区自动扩张的设计 判断地雷是否已经全部扫除 人机交互部分的设计 设置难度级别 游戏结束时显示所有地雷
2.7 常见的地图编码方式
使用这种编码方式的好处是计算相邻棋子非常 方便,例如下面的代码判断指定位置是否有指 定一方的棋子相邻:
function haveNeighbor(position:int,color:int):Boolean { for (var i = 0; i<path[position].length; i++) { if (p[path[position][i]] == color) { return true; } } return false; }
2 几种常用的地图编码方式
地图元件的制作采用角色设计思想进行设计即可。所 以地图设计的一个关键就是进行地图编码。 地图编码的作用:在地图元件与算法之间建立一个最 简的沟通桥梁。
基于编码方式设计算法,然后通过编码找到对应的元件; 从元件出发获取其编码值,然后用这个编码值参与算法过程。 例如:扫雷游戏,可以建立一个二维数组,每个数据项存储 一个方块的引用,这样二维数组就是游戏的编码方式。然后 基于二维数组索引(即数组的下标)找到每个方块,同时, 在每个方块中定义变量indexX和indexY,用于记录其索引 值,当点击了某个方块之后,可通过读取这个方块的索引值 来确定它在二维数组中的位置。
2.4 常见的地图编码方式
完全可以参考二维方阵的编码方法。上面两张图,可以分别编码 成4*8和7*7的方阵。 如下图所示:
于是我们又可以用一个二维数组保存地图信息了。基于不同的编 码规则,就要使用不同的算法规则。例如采用菱形边编码规则, 那么当考察第i行第j列位置的通路时,需要判断的六个位置的编 码如下图所示:
然后记录每个节点的 相邻节点,如右表所 示: 这样就可以既简单又 完全地表示这张地图。
4 5 6 7
2.7 常见的地图编码方式
可以用一个一维数组存储位置数据,用一个二 维数组表示位置之间的连线。 示例代码如下:
//棋子信息,0表示没有棋子,1表示白棋,2表示黑棋 var chesses=new Array(0,0,1,1,2,2,0,0); var path = new Array(8); path [0] = new Array(1,2,3); path [1] = new Array(0,2,4,5); path [2] = new Array(0,1,3,5); path [3] = new Array(0,2,5,6); path [4] = new Array(1,5,7); path [5] = new Array(1,2,3,4,6,7); path [6] = new Array(3,5,7); path [7] = new Array(4,5,6);
地图件 编码数据 基于编码的算法
右图是一款用 Flash制作的滚 方块游戏:
1.1 地图的组成
其地图(即游戏中的地板方块组合)的三个部分分为 为:
地图元件:
一个个的小地砖对象,他们都是同一个类的实例,只是一些属性 值(如位置,显示效果和编码值)不同而已。
编码数据:
显然这个地图应该采用二维数组进行编码。在一个M*N的二维 数组中,1表示有地砖,0表示没有地砖,就可以准确无误地表 示出这个地图的实际情况。
Flash游戏编程
肖 刚 闽江学院电子系计算机教研室
Email:fuzhou3721@
第六章 地图布置与地图相关算 法
教学提要
游戏地图的组成方式 几种常用的地图编码方式 扫雷游戏的编码与算法的实现
※掌握Flash游戏中的地图编码及其算法
1 游戏地图的组成方式
地图是许多游戏的重要组成。小游戏例如俄罗斯方块、 各种棋类游戏、搬运工游戏等,大型游戏例如英雄无 敌、魔兽争霸,无不与地图紧密关联。 地图的组成:
基于编码的算法:
根据编码数据创建地砖实例并平铺在舞台上就是一个算法,这是 具有整齐排列特征的地图常用的做法。 先获得方柱所在的位置编码,根据编码在地图编码数据中判断这 个位置的值是否都为1,如果是,就表示这个方柱是“稳固”的, 否则就是“不稳”的,这就是一个简单的基于编码的算法的描述, 它用来支持游戏的运行逻辑。