zoukankan      html  css  js  c++  java
  • 游戏编程笔记-起步(一)一个简单的游戏-贪吃蛇

    二 游戏编程起步


    1.一个简单的游戏-贪吃蛇


    1.贪吃蛇游戏剖析

    1)游戏的目标。在不被撞死的前提下,吃掉奖子增加自己的长度,来完成升级。

    2)游戏中的物体。蛇,墙壁,奖子。

    3)动作。蛇移动,蛇吃奖子,蛇增加长度。

    2.数据结构与算法分析

    1)数据结构。简单起见,所有物体都用方块拼接。

            则蛇可以使用一个一维数组描述,数组的每个单元描述了蛇块的状态,如方向;可使用一个二维数组来描述地面情况,不可通过的地方为墙壁设置为1,可通过的地方设置为0;奖子,就是一个特殊的方块。

    2)算法。

            注意观察蛇的特点。将蛇肢解为方块,则会发现每个方块的移动都依赖于它前面方块上一次的移动状态(第一个方块由玩家控制)。


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

            根据这个规律,我们可以总结出一个基本算法:用数组来存贮蛇块,每个蛇块结点包含的信息有当前的移动方向,那么更新蛇的状态时,从尾部到头部进行处理。


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


            这样,最复杂的部分就解决了。当然这不是最好的算法,如果我们再仔细观察下,就会发现这样的规律,蛇每次移动的时候,都只是头和尾发生了变化,那么,每次更新蛇的时候,我们只需要将尾部的蛇块移到头部相应的位置,不就更简单吗?答案是肯定的。这就是算法的魅力!只要我们勤于动脑筋,总会发现一些更好的解决办法。

    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的部分涂成蓝色,2的部分涂成红色,3的部分涂成绿色,这将会是一个什么样的效果呢?看下图:


            怎么样,有贪吃蛇游戏的感觉吗?再看看下图:


            简直是完美!

  • 相关阅读:
    R dataframe 筛选
    R dataframe 统计每行中大于某个值的列的数量
    参考基因组
    C++/CLI入门系列 第二篇:封装C++ dll库,提供接口给C#调用
    C++/CLI入门系列 第一篇:HelloWorld
    用C++/CLI搭建C++和C#之间的桥梁
    C++ CLI简介(什么是C++ CLI)
    GB28181协议RTP传输
    gsoap使用总结
    C++ (使用gsoap)调用 WCF服务
  • 原文地址:https://www.cnblogs.com/ygxsk/p/7694017.html
Copyright © 2011-2022 走看看