编程论坛's Archiver

奔跑的鸟 发表于 2007-8-9 18:11

[原创]关于制作地图时矩阵的使用(适合新手)

<P>*/ --------------------------------------------------------------------------------------<BR>*/ 出自: 编程中国  http://www.bc-cn.net<BR>*/ 作者: 奔跑的鸟        <BR>*/ 时间: 2007-8-9  编程论坛首发<BR>*/ 声明: 尊重作者劳动,转载请保留本段文字<BR>*/ --------------------------------------------------------------------------------------<BR><BR><BR>  通过制作前面的游戏,我个人认为,利用矩阵来辅助制作游戏地图是很方便的,也很适合初学者掌握,因此特意将思想和方法总结一下,希</P>
<P>望对大家有所帮助:<BR>  首先,应用矩阵的基础是将屏幕分割,例如应用这段程序:<BR>#include&lt;graphics.h&gt;<BR>#include&lt;conio.h&gt;<BR>int main()<BR>{<BR> int gd=VGA,gm=VGAHI,x,y;<BR> initgraph(&amp;gd,&amp;gm,'');<BR> setcolor(2);<BR> for(x=19;x&lt;600;x=x+40)<BR>  for(y=19;y&lt;440;y=y+40)<BR>   rectangle(x,y,x+40,y+40);<BR> getch();<BR> closegraph();<BR> return(0);<BR> }</P>
<P>这样就将屏幕内的(19,19,600,440)内分割成了11行、15列的方格,则可以建立如下矩阵:<BR> map[11][15]=<BR>  { {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},<BR>    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},<BR>    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},<BR>    {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1},<BR>    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},<BR>    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},<BR>    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},<BR>    {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1},<BR>    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},<BR>    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},<BR>    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},<BR>  };<BR>这样建立好了对应的矩阵,矩阵建立好了就要使之与屏幕建立对应</P>
<P>for(my=0;my&lt;11;my++)<BR>           for(mx=0;mx&lt;15;mx++)<BR>       if(map[<FONT color=#ff0000>my</FONT>][<FONT color=#ffff00>mx</FONT>]==1) tree(19+40*mx,19+40*my);/*这只是例子,具体画什么你自己决定*/<BR>这样就和前面建立的分割好的屏幕联系起来了,要注意,在这里屏幕的纵坐标要放在矩阵前面的括号里,而横坐标要放在后面的括号里,这样</P>
<P>才是真正正确的对应关系。<BR>   至此,矩阵和屏幕地图对应起来了,如果以后要加新的绘图元素,以后只要在开始修改矩阵的数字,再在上面的循环内加上<BR>   if(map[my][mx]==N) picture(19+40*mx,19+40*my);<BR>就可以方便的修改和制作地图了。<BR>   以上只是个示范,相信在实际制作地图的时候以上的分割数量远达不到精度要求,因而实际要分割到多精细你要自己从新设计,有一点,分</P>
<P>割的越精细则矩阵越大,所以不要过于贪求精细而分割太小,否则到时候成千上万的矩阵元素定义就有的你忙了。[em01]<BR>                                                                                 高策<BR>                                                                              2007。8。9</P>

leopardxp 发表于 2007-8-9 18:19

好东西~~~~[em17]

奔跑的鸟 发表于 2007-8-9 19:10

分享经验,互相帮助,共同提高,哈哈

一笔苍穹 发表于 2007-8-10 08:33

哦,奔鸟叫高策啊?呵呵,写的不错,顶一个。

RockCarry 发表于 2007-8-10 19:50

这个就被称为TILE

anlogo 发表于 2007-8-11 14:01

学习了

奔跑的鸟 发表于 2007-8-11 14:34

请教RockCarry大侠什么叫TILE?

RockCarry 发表于 2007-8-11 19:24

<P>TILE就是一个图块,游戏地图有许多小图块拼接而成,使用用一个矩阵加图块的方式,就可以很好的来表示游戏地图。这种技术在2D游戏引擎中经常使用,又被称为TILE地图。</P>

奔跑的鸟 发表于 2007-8-11 19:27

多谢指教:)又长知识了,呵呵

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.