2011-07-24 72 views
3

我想爲我愚蠢的遊戲生成一個隨機等級。遊戲包括激光/探測器在可能的鏡子的方形場周圍。像這樣:如何在Javascript中爲激光遊戲生成關卡?

/* 

LLLLLLLLLL 
LmmmmmmmmL 
LmmmmmmmmL 
LmmmmmmmmL 
LLLLLLLLLL 

*/ 

現在,我有一個算法,通過依賴隨機放置和拒絕壞位置來產生一個級別,相當糟糕。這不是很快,並且不會真正生成我想要的字段。請隨時嘗試在http://cmouse.desteem.org/laser/

歡迎任何建議。

目前的算法看起來是這樣的:

function createLevel: 
    for i=0 to mirrors: 
    mirrorLocation = pickRandomPosition 
    mirrorType = pickRandomType 

    if (verifyPosition(mirrorLocation, mirrorType)): 
     i = i - 1 
     next 
    else: 
     storeMirror(mirrorLocation, mirrorType) 

在verifyPosition,我們測試它達到在所有四個方向的激光器,避免undetectedable鏡子的希望鏡子。這有點無聊的代碼,所以我在這裏忽略它。

+1

什麼問題 - 你的算法工作 –

+0

它是如此該死的慢:(我要限制它的重試次數,否則會採取年齡來生成場 – cmouse

回答

2

確保它不是多次嘗試多個字段的一種方法是遍歷字段並根據某種概率放置鏡像或不放置鏡像。放置鏡像的概率應該是#mirros/#fields,這樣鏡子的期望數量是#mirrors。

+0

Yey,現在似乎產生它們。對,謝謝! – cmouse