2011-10-15 58 views
0

我想製作一個遊戲,玩家可以四處移動。當我點擊一塊棋子時,它顯示所有可用棋子都是這樣的: enter image description here如何顯示合法移動

紅色代表合法棋步,深灰色代表牆。

我已經創造了一個網格和按鈕。當我點擊一個按鈕時,我將可用的步數減去或添加到網格中的按鈕索引處。例如,如果我的作品可以移動3個位置,我從按鈕索引中減去3,並獲得作品左側的可用位置。然後我對其他所有方向也一樣。它看起來是這樣的:

For each i as button in grid 
Select case grid.indexof(i) 
    Case grid.getindex(currentPlayingPiece) - 3 'Left 
    i.background = brushes.red 
    Case grid.getindex(currentPlayingPiece) + 3 'Right 
    i.background = brushes.red 
    Case grid.getindex(currentPlayingPiece) - grid.columndefinitions.count 'Top 
    i.background = brushes.red 
    ... 
Next 

使用這種方法是非常緩慢和繁瑣得到所有可用的移動,而不是直觀的讓頂部和底部移動。此外,如果有一堵牆在後面有一個可用的位置,它表明我可以移動到它。所以我的問題是:有沒有更好的方法來完成這個?

回答

0

總重量如果你不喜歡使用涉及圖表或類似的解決方案是「先進」的算法開始,就有一個幾個簡單的事情,你可以嘗試。

首先,創造,而不是調用getIndex變量()一堆時間可能會節省幾個週期。

其次,我會嘗試使用每個位置來評估的絕對值,所以計算距離,而不必爲每個方向檢查一次(+或 - );也許是這樣的:

dim currentButtonIndex as Integer = grid.getIndex(currentPlayingPiece) 
For each i as button in grid 
    dim indexToEvaluate as Integer = grid.indexOf(i) 
    If (Math.Abs(indexToEvaluate - currentButtonIndex) = 3) Then 
     i.background = brushes.red 
    End If 
Next 
0

您可以從您的網格圖,其中在網格中的每個單元格將毗鄰其附近(上下,左右),那麼你應該爲每個頂點(例如1的值如果被佔用和0不)。當用戶在您的網格點擊一個特定的細胞,你找出所有可能的路徑,從那裏爲0