通過制作前面的游戲,我個人認為,利用矩陣來輔助制作游戲地圖是很方便的,也很適合初學(xué)者掌握,因此特意將思想和方法總結(jié)一下,希
望對大家有所幫助:
首先,應(yīng)用矩陣的基礎(chǔ)是將屏幕分割,例如應(yīng)用這段程序:
#include
#include
int main()
{
int gd=VGA,gm=VGAHI,x,y;
initgraph(&gd,&gm,'');
setcolor(2);
for(x=19;x<600;x=x+40)
for(y=19;y<440;y=y+40)
rectangle(x,y,x+40,y+40);
getch();
closegraph();
return(0);
}
這樣就將屏幕內(nèi)的(19,19,600,440)內(nèi)分割成了11行、15列的方格,則可以建立如下矩陣:
map[11][15]=
{ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
這樣建立好了對應(yīng)的矩陣,矩陣建立好了就要使之與屏幕建立對應(yīng)
for(my=0;my<11;my++)
for(mx=0;mx<15;mx++)
if(map[my][mx]==1) tree(19+40*mx,19+40*my);/*這只是例子,具體畫什么你自己決定*/
這樣就和前面建立的分割好的屏幕聯(lián)系起來了,要注意,在這里屏幕的縱坐標要放在矩陣前面的括號里,而橫坐標要放在后面的括號里,這樣
才是真正正確的對應(yīng)關(guān)系。
至此,矩陣和屏幕地圖對應(yīng)起來了,如果以后要加新的繪圖元素,以后只要在開始修改矩陣的數(shù)字,再在上面的循環(huán)內(nèi)加上
if(map[my][mx]==N) picture(19+40*mx,19+40*my);
就可以方便的修改和制作地圖了。
以上只是個示范,相信在實際制作地圖的時候以上的分割數(shù)量遠達不到精度要求,因而實際要分割到多精細你要自己從新設(shè)計,有一點, 割的越精細則矩陣越大,所以不要過于貪求精細而分割太小,否則到時候成千上萬的矩陣元素定義就有的你忙了。
望對大家有所幫助:
首先,應(yīng)用矩陣的基礎(chǔ)是將屏幕分割,例如應(yīng)用這段程序:
#include
#include
int main()
{
int gd=VGA,gm=VGAHI,x,y;
initgraph(&gd,&gm,'');
setcolor(2);
for(x=19;x<600;x=x+40)
for(y=19;y<440;y=y+40)
rectangle(x,y,x+40,y+40);
getch();
closegraph();
return(0);
}
這樣就將屏幕內(nèi)的(19,19,600,440)內(nèi)分割成了11行、15列的方格,則可以建立如下矩陣:
map[11][15]=
{ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
這樣建立好了對應(yīng)的矩陣,矩陣建立好了就要使之與屏幕建立對應(yīng)
for(my=0;my<11;my++)
for(mx=0;mx<15;mx++)
if(map[my][mx]==1) tree(19+40*mx,19+40*my);/*這只是例子,具體畫什么你自己決定*/
這樣就和前面建立的分割好的屏幕聯(lián)系起來了,要注意,在這里屏幕的縱坐標要放在矩陣前面的括號里,而橫坐標要放在后面的括號里,這樣
才是真正正確的對應(yīng)關(guān)系。
至此,矩陣和屏幕地圖對應(yīng)起來了,如果以后要加新的繪圖元素,以后只要在開始修改矩陣的數(shù)字,再在上面的循環(huán)內(nèi)加上
if(map[my][mx]==N) picture(19+40*mx,19+40*my);
就可以方便的修改和制作地圖了。
以上只是個示范,相信在實際制作地圖的時候以上的分割數(shù)量遠達不到精度要求,因而實際要分割到多精細你要自己從新設(shè)計,有一點, 割的越精細則矩陣越大,所以不要過于貪求精細而分割太小,否則到時候成千上萬的矩陣元素定義就有的你忙了。