2013-03-25 106 views
1

我正在爲Android的html/javascript遊戲工作。這是一個棋盤遊戲,它執行以下操作。 它有不同顏色的瓷磚,用戶可以在電路板上放置一塊瓷磚(以編程方式選擇)。如果我們得到4個或更多相同顏色/形狀的瓷磚,我們會得到一些點數,這些瓷磚會消失。被移除的瓷磚上方的瓷磚將替換它們,新的瓷磚將被添加到空的地方。下面示出了它的工作原理的圖像(這只是一個例子,真實板可具有不同的尺寸):JavaScript棋盤遊戲:尋找優化

enter image description here

瓦片<img>元件與它們的ID存儲在數組中,我使用的檢查比賽和替換。

這一切都工作得很好,但一旦新的瓷磚添加到董事會我需要檢查整個董事會,以檢查是否有新的匹配可用。我想在這裏提供一些建議,因爲檢查整個董事會可能會非常緩慢。有沒有辦法可以有效地做到這一點? 這就是我想過做: enter image description here

鑑於前面的例子中,我想到了檢查紅色區域唯一的元素,即只有已被移動或添加的元素。它可以是有效的,如果瓷磚垂直移動,因爲我只需要檢查移動/添加的瓷磚,它會給我新的匹配。但是如果水平移除瓷磚,可能會產生問題,因爲如果這些瓷磚位於底部,我將不得不檢查整個電路板,並面臨同樣的問題。

任何意見或建議,將不勝感激。

注意:我沒有添加任何代碼,因爲它只是檢查給定圖塊的行和列並查找匹配項。但如果需要,我可以提供。

編輯:之前任何人都可以反對我想告訴我,我剛剛添加這個問題到遊戲開發部分,因爲我沒有收到任何答案:)。

編輯:添加我的代碼

function initializeBoard(){ 
    //items is an array which contains tiles/images names 
    for(var i=0; i < totalItems; i++) 
     board[i+1] = Math.floor(Math.random() * (items.length - 1)) + 1; 
    for(var i=0; i < totalItems; i++) 
    { 
     if(!(i % numberShapesXAxis)) 
      document.write("<BR>"); 

     document.write("<img src=\"images/"+ items[board[i+1]]+ ".gif\" style = \"border:0; height:"+ itemSize+ "px; width:"+ itemSize+ "px;\" name=\"t", i+1,"\" onclick = \"replaceAndCheck(", i+1, ")\"><\/a>"); 
    } 
} 
//so basically board contains image ids. 
+0

我希望你存儲的行和列不僅僅作爲圖像的參考?我想是的,你必須提供你的代碼(至少那些初始化你的數據結構的部分,以及你當前的移動邏輯)。 – Bergi 2013-03-27 14:14:50

+0

@Bergi我已經添加了我的董事會初始化代碼 – Anila 2013-03-27 15:46:29

回答

0

如何檢查是否有新的比賽,當你搬石頭砸。所以當石頭x向下移動時,檢查X的新位置是否創建匹配。這樣你可以創建一個遞歸類型的方法。

+0

首先感謝您的答案。如果我使用你的方法,我會看到東西,我會水平移除瓷磚,我會檢查一個瓷磚的匹配,然後根據這個瓷磚所做的更改(如果它有匹配的話),我會檢查另一個新的瓷磚。而一旦沒有匹配的新瓦片,我會開始回來一個級別,並檢查第二個瓷磚,並重新開始整個過程​​。如果那就是我必須要做的事情,那不是很慢嗎? – Anila 2013-03-27 14:10:45

+0

對於你添加的每一塊石頭,你只需要檢查水平和垂直。所以這不是很多的處理。假設你移動1塊。你只需要檢查塊下面的石頭,看看它是否可以創建一個新的行。因爲石頭上面的石頭仍然是相同的(如果它不是上排)。不時要檢查整個領域需要更長的時間。 – 2013-03-27 14:28:30

+0

我完全同意你的看法,但是我想說的是我要垂直和水平地檢查一塊石頭,如果有匹配的線條或柱子將被移除,它們上面的瓷磚將向下移動,並且新的瓷磚將採取他們的地方。有可能新的比賽將可用。你同意檢查是否有新的比賽存在,我將不得不檢查所有新的比賽嗎? – Anila 2013-03-27 14:32:23