战争迷雾的实现——占用影响图

来源:互联网 发布:手机淘宝复制链接 编辑:程序博客网 时间:2024/05/01 01:33
 

战争迷雾的实现——占用影响图

 

 

       像魔兽争霸3这种游戏,一开始的时候呢,满地图都是黑的,只有你的基地和兵所在的地方可以看到东西。然后你控制你的兵进行探索,你的兵所到的位置烟雾就消失啦,可以看到很清晰的地图上的细节。但是当你的兵离开以后,地图就灰了,你看不到实时的细节,比如那个位置有没有敌兵或者怪物,但是还是可以看到灰色的地形细节。我把这种东西叫做战争迷雾。嗯,最近学了占用影响图,想到了一个战争迷雾的实现方法。

       这个方法就是用占用影响图。

       首先定义一个gameObj(游戏物件——暂且这么叫),这个可以代表你的兵和你的建筑。

       struct注册物件

       {

              gameObj游戏物件;

              int注册物件宽;

              int注册物件高;

              int注册物件类型;

              Vector3   注册物件上一次位置;(我们用一个三维向量表示物件位置,但是实际上我们的影响图的逻辑是2d的,所以只会用到注册物件位子的x,y两个坐标值)

              bool是否对占用影响图产生作用;

}

 

class 占用影响图

{

       初始化(每一格宽度,每一格高度,总的宽度,总的高度);

       获取某一格信息(x,y{return 地图信息[x][y];}

       注册游戏物件(注册物件X{将注册物件X添加到物件列表;}

       删除游戏物件(注册物件X{将注册物件X从物件列表删除;}

       设置地图信息与运算(int xint yint sizeX, int sizeY, 信息的值)

       {

              根据位置坐标(xy)和物件大小(sizexsizey)推算出注册物件占用的地图的格子数:从X1X2,Y1Y2

              forint i = X1;i <= X2; i++

              {

                     for (int j = Y1; j <=Y2; j++)

                     {

                            地图信息[i][j] &= 信息的值;

}

}

}

设置地图信息或运算(int xint yint sizeX, int sizeY, 信息的值)

       {

              根据位置坐标(xy)和物件大小(sizexsizey)推算出注册物件占用的地图的格子数:从X1X2,Y1Y2

              forint i = X1;i <= X2; i++

              {

                     for (int j = Y1; j <=Y2; j++)

                     {

                            地图信息[i][j] |= 信息的值;

}

}

}

 

       每帧逻辑更新()

       {

              遍历注册物件列表

              {

                     如果注册物件-》游戏物件-》当前位置 == 注册物件-》上一次位置

                     {

                            continue;

}

如果注册物件-》对占用图产生作用

{

       设置地图信息与运算(注册物件-)上一次位置的X,注册物件-》上次位置的Y,注册物件的宽,注册物件的高,~1<<1));//清空注册物件上一次影响图位置的第二位

       设置地图信息或运算(注册物件-)当前位置X,注册物件-》当前位置Y,注册物件的宽,注册物件的高,6);//将注册物件当前影响图位置的第二位和第三位置为1,只要游戏物件曾经到过某处,那么第三位永远为1

}

}

}

}

 

 

如何使用这个影响图呢?呵呵,想要知道地图的(x,y)处是完全可见,或者灰色,或者是完全不可见的黑色,只要调用:占用影响图-》获取某一格信息(x,y);获得的值如果第二位是1,那么完全可见,否则如果第三位是1,那么灰色,否则,是完全不可见的黑色。

 

现在因为我在设计坦克大战,所以又考虑了一下占用影响图对坦克大战的作用。

只要对占用影响图做一些更改,如果某处有一辆敌军坦克,那么他的控制范围的占用影响图的值全部+1;这样可以根据占用影响图判断地图某处的拥挤程度,可以让坦克选择冲向敌人最多的地方…………………………但是,这个ai判断似乎没有任何作用。呵呵。

原创粉丝点击