Tomorrow – 地形生成(1)
原理很簡單,請不要噴。
效果展示
種子輸入框
種子為12345的地形
種子為23456的地形
代碼展示
globalvar map
random_set_seed(real(get_string("Seed: ","")))//獲取種子
for(i=0;i<=room_width/32;i+=1)
{
for(j=0;j<=room_height/32;j+=1)
{
map[i,j]=0;//初始化數組
}
}
for(i=0;i<=room_width/32;i+=1)
{
for(j=0;j<=room_height/32;j+=1)
{
if(random_range(0,100)>=65) map[i,j]=1;//按概率填充房間
}
}
for(n=1;n<=room_height/32;n+=1)
{
for(i=0;i<=room_width/32;i+=1)
{
for(j=0;j<=room_height/32-1;j+=1)
{
if(map[i,j+1]==0&&map[i,j]==1)
{
map[i,j+1]=map[i,j];
map[i,j]=0;//方塊重力處理
}
}
}
}
for(i=0;i<=room_width/32;i+=1)
{
for(j=0;j<=room_height/32;j+=1)
{
if(map[i,j]==1) instance_create(i*32,j*32,obj_block)//在房間中按地圖創建物體
}
}
代碼講解
使用的坐標系
0 1 2 3 4 5 6 7 8 9 ...
1
2
3
4
5
6
7
8
9
...
隨機數
random_set_seed()
:置隨機數種子random_range
:生產隨機數
方塊重力處理
map[i,j]==1
是確保正在處理的位置有方塊map[i,j+1]==0
是確保正在處理的位置下面一格沒有方塊
如果符合條件的話
map[i,j+1]=map[i,j]//清空當前格
map[i,j]=0;//填充下面格
(即當前方塊下落)
注意一下,這裡沒有用map[i,j+1]=1
,讓日後二次開發有更多方塊。
放置方塊
其實它的本質就是創建對象。
instance_create(x,y,obj)
的用法自己看F1.
結語
這是我做的第一個記錄,希望我的沙盒遊戲也能堅持做下去!
說明
本文原作者Tesla,首發於Tesla-173的個人博客。
Tesla本人轉載至Gamemaker開發者之家。
未經授權禁止轉載。
如需轉載請聯繫[email protected]。
PS:剛才在Gamemaker開發者之家(//gamemake.org/thread-2148.htm)發了,看到一個回帖: