二游戏编程起步1.一个简单的游戏-贪吃蛇1.游戏剖析

发布时间:2021-11-18 04:10 点击:

游戏编程的开始

1.一条简单的贪吃蛇

1.贪吃蛇游戏分析

1)比赛的目标。在不被击杀的前提下,吃掉奖品增加你的长度来完成升级。

2)游戏中的对象。蛇,墙壁,奖品。

3)动作。蛇移动,蛇得奖,蛇的长度增加。

2.数据结构与算法分析

1)数据结构。为简单起见,所有对象都用正方形缝合在一起。

那么蛇就可以用一维数组来描述了。数组的每个元素描述了snake block的状态,比如方向;二维数组可用于描述地面条件。不可通过的地方为墙设置为1,可通过的地方设置为0;奖品是一个特殊的正方形。

2) 算法。

二游戏编程起步1.一个简单的游戏-贪吃蛇1.游戏剖析

注意蛇的特性。如果你将蛇肢解成方格,你会发现每个方格的移动取决于它前面方格的前一次移动(第一个方格由玩家控制)。

如图,1为蛇头,4为蛇尾,蓝色箭头为原移动方向,红色箭头为玩家控制方向(按下下键)。移动方向从1到4。(a)->(b)下,右,右,(b)->(c),下,右,右。

根据这个定律,我们可以总结出一个基本的算法:用一个数组来存储snake,每个snake节点包含的信息都有当前的运动方向,然后在更新snake的状态时,从尾部到尾部进行处理头。

for i=n-1 to 1
{
dir(i) = dir(i-1)
pos(i) += dir(i)
}
if dirKeyDown
{
dir(0) = k
}
pos(0) += dir(0)

这样,最复杂的部分就解决了。当然,这不是最好的算法。如果我们仔细观察,就会发现这种模式。每次蛇移动,只有头部和尾部发生变化。那么,每次更新snake时,我们只需要将尾部的snake块移动到头部的对应位置,岂不是更容易?答案是肯定的。这就是算法的魅力!只要我们勤于动脑,总能找到更好的解决办法。

pos(n-1) = pos(0)+dir
insert(n-1) before pos(0)

算法的复杂度立马从O(n)变成了O(1)!而且我们会发现只需要记录一个方向,空间复杂度就降低了。

3)地图。描述地面信息。

我们贪吃蛇游戏的地图信息很简单。地上有 3 种物体:墙壁、蛇和奖品。在每次更新时,我们将 3 类对象的信息按类别填充到地图中。比如墙的位置填1,奖品的位置填2,蛇的位置填3(每个蛇块填),没有的地方填0。然后,将这个填充了 0、1、2、3 的二维数组交给渲染系统。

至此,就算我们的幕后操作基本完成了,剩下的就是细节了简单的桌游,在编码的时候会详细处理。

3. 渲染图数据说明

渲染蛇游戏其实很简单。将地图中的第 1 部分涂为蓝色二游戏编程起步1.一个简单的游戏-贪吃蛇1.游戏剖析,将第 2 部分涂为红色,将第 3 部分涂为绿色。这会产生什么样的效果?看下图:

怎么样简单的桌游,有没有想吃蛇游戏的感觉?看下图:

这是完美的!

-宝乐互娱