网页功能: 加入收藏 设为首页 网站搜索  
Tile Based Engine 中的墙壁自动拼接处理
发表日期:2007-03-28作者:[转贴] 出处:  

   基于 Tile 的引擎中重复利用率最高的图素,除了地面就是墙壁了, 大家回想一下恺撒III 中的修筑城墙, 或是 Simcity2000 中拉扯电线, 道路,每种物体都只有十几种基本的图素来拼接,而交叉处理都是程序自动选择正确的图素. 假设我们做一个地图编辑器, 这个功能应该也不能少吧:-)

  实际上, 这个问题早在文本模式的程序就已经出现过. 那就是表格线的处理. 文本模式下, 不能绘制直线, 我们需要绘制表格时, 就需要利用 ASCII 字符来拼接出需要的图形. 成功的文本编辑器, 都具有绘制制表线的功能. 其中最需要解决的问题就是表格线交叉时, 如何正确的选择合适的 ASCII 码.

  如果采用多层条件判断是很愚蠢的方法. 最简洁的程序是将拼接用的图素按一定的次序 (序号的 2 进制形式可以反映周围的连接状态) 排列. 然后通过简单的公式计算出正确的元素. 具体就是说, 将上下左右的连接用 4 位 2 进制数表示出来. 通过读取当前图素的上下左右的图素是否有连接来生成一个数字, 查表得到正确的图素. :-)

  下面附有一个小程序, 可以完成上述的功能, 感兴趣的朋友可以读读 :-)


/*
墙壁交叉 Tile 的处理. 类似于文本方式的制表符处理,
我们需要针对制表线的交叉输出正确的 ASCII 码.如果
采用多层条件判断是很愚蠢的方法. 最简洁的程序是将
拼接用的图素按一定的次序 (序号的 2 进制形式可以
反映周围的连接状态) 排列. 然后通过简单的公式计算
出正确的元素.

如下程序演示了这一算法, 其输出结果如下

┏━━┳━━━┳━┓
┃  ┃   ┃ ┃
┃  ┃   ┗━┫
┃  ┃     ┃
┃ ┏┻━┓   ┃
┃ ┃  ┃   ┃
┃ ┗━━╋━━━┫
┃    ┃   ┃
┃    ┃   ┃
┗━━━━┻━━━┛

程序没有注释, 但应当很容易理解. 如有问题, 可以联系
作者 cloudwu@263.net
Homepage: http://member.netease.com/~cloudwu

云风作于 1999 年 9 月 20 日
*/

#include <stdio.h>
#define MAX 12

char wall[32]="·┃━┗┃┃┏┣━┛━┻┓┫┳╋";

char map[MAX][MAX]={
    "............",
   
".oooooooooo.",
    ".o..o...o.o.",
    ".o..o...ooo.",
    ".o..o.....o.",
    ".o.oooo...o.",
    ".o.o..o...o.",
    ".o.oooooooo.",
    ".o....o...o.",
    ".o....o...o.",
    ".oooooooooo.",
    "............"
};

int main()
{
    int i,j,id;
    for (i=1;i<MAX-1;i++) {
   
    for (j=1;j<MAX-1;j++)
       
    if (map[i][j]=='.') printf(" ");
       
    else {
           
    id=(map[i][j-1]=='o')<<3|(map[i+1][j]=='o')<<2|(map[i][j+1]=='o')<<1|(map[i-1][j]=='o');
           
    printf("%c%c",wall[id*2],wall[id*2+1]);
       
    }
       
    printf("\n");
   
    }

    return 0;
}
我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 Tile Based Engine 中的墙壁自动拼接处理
本类热点文章
  脚本系统的实现
  C++基本功和 Design Pattern系列(2) Ty..
  C++基本功和 Design Pattern系列(1) - ..
  斜45度游戏开发(提高篇)
  睱酵笴栏祘Α砞璸?? - [秈顶絞]
  斜45度游戏开发(二)
  第一次写技术文献。Collision AI
  斜视角游戏中遮挡的判断
  C语言基本功教程系列(5) - 文件, Socke..
  用rand()和srand()产生伪随机数的方法总..
  C++基本功和 Design Pattern系列(3) co..
  C语言基本功教程系列(1)
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00429