2013-10-02 55 views
0

我有一個迷宮繪圖功能,因爲我不喜歡。目前,它的工作方式是取一箇中點,然後找到它上下左右的位置並將它們放入數組中。然後檢查它們是否在迷宮網格之外,並將它們從數組中移除。然後檢查是否有任何已經被訪問過(這將是一個迷宮函數,但現在它只是繪製一條長虛線的擺動線)並從數組中刪除。JavaScript迷宮代碼失敗

然後,如果沒有選項,則退出或返回,否則將繪製彩色正方形並再次運行該函數。

You can see it here,目前我有網格很小擴增2個問題我越來越:

  1. 它往往認爲,負座標確定。這使我想到的東西是非常錯誤的線:

    if(options[i][0]<0 || options[i][1]<0 || options[i][0]>size-1 || options[i][1]>size-1){ 
        // ... let us know that you're removing them... 
        console.log("splicing: out of bounds "+options[i][0]+","+options[i][1]); 
        // ... then remove them 
        options.splice(i, 1); 
    
  2. 也常不能發現一個正方形已經被訪問,並寫了它們,這讓我覺得這條線不能按預期:

    if(options.length > 0){ 
    

如果你火起來的控制檯存在大量輸出,解釋一些正在發生的事情,如果它似乎工作好,剛打刷新了幾次,它會出錯 - 特別是如果它早期在右上角結束。

我當前的代碼是在這裏:http://djave.co.uk/hosted/maze/js/script.js但如果它可以幫助也有一切在http://djave.co.uk/hosted/maze/maze.zip

一個zip文件,如果你要我澄清那些僅僅發表評論。

NB此刻它應該跳過一個正方形,所以它不會是一條連續的線。

回答

4

問題是你拼接相同的數組,你正在迭代。因此,在循環的第二次迭代x=4, y=0當你具備以下條件:

i=1, options[[2,0],[6,0],[4,-2],[4,2]] 

後拼接第二個選項的排列會改變,你將有第三次迭代如下:

i=2, options[[2,0],[4,-2],[4,2]] 

請注意0​​被跳過。造成這種情況的最簡單的解決辦法是使用$.grep

options = $.grep(options, function(option, index) { 
    return option[0]>=0 && option[0]<size && option[1]>=0 && option[1]<size; 
}); 

這將遍歷數組並返回其中的grep返回true對象的數組。當你迭代已經訪問過的方格時,你也應該做同樣的事情。

+0

Ahhhh ......這很有道理!謝謝你的幫助。 – Djave

+0

另一種選擇是在for循環周圍交換以便從結尾開始並向後計數 - for(i = options.length-1; i> = 0; i - ){ – Djave