2013-06-01 57 views
0

我正在製作一款基於實際棋盤遊戲的名爲「Go」的棋盤遊戲。基本上,有2名球員(白人和黑人),他們輪流在棋盤格的交叉點上放置白色和黑色寶石。將二維數組繪製到網格上

到目前爲止,我已經能夠繪製石塊,玩家之間交替並改變我的二維數組中的值,其中0 =開放點,1 =白色,2 =黑色。

我想從二維數組中繪製相應的石頭到我的板上。我能夠畫出正確的石頭並使其跟隨我的鼠標,但是一旦我點擊了我想要放置在該位置的位置並留在那裏。

這是我用什麼來使石材跟着我的鼠標

if (turn == 1) { 
    g2d.drawImage(s.getBlackStone(), 
        s.getBlackX() - Frame.frameLocation.x - 15, 
        s.getBlackY() - Frame.frameLocation.y - 35, null); 
} else { 
    g2d.drawImage(s.getWhiteStone(), 
        s.getWhiteX() - Frame.frameLocation.x - 15, 
        s.getWhiteY() - Frame.frameLocation.y - 35, null); 
} 

我當時的想法是我有一個被稱爲每次我按下鼠標按鈕,該方法將得到的網格位置時間的方法在那裏點擊鼠標,輪到它並繪製圖像。你對這個有什麼想法?

+0

「Frame」是變量還是類?如果它是一個變量,它應該被稱爲「框架」。如果它是一個類,那麼(a)你不應該使用靜態變量來定位,(b)你不應該隱藏'java.awt.Frame'。此外,圖形上下文相對於組件繪製,而不是屏幕。 – wchargin

+0

這聽起來很合適。獲取網格位置,並在那裏放置/繪製石塊。不知道你還能做什麼 – greedybuddha

+0

也請看看枚舉:使用'public enum Player {WHITE,BLACK}'與'if(turn == Player.WHITE)'結合使用。 – wchargin

回答

2

我通常會創建一個Stone類,它具有類似狀態(黑色,白色或空白),自由度數量和陣列中的位置等變量。二維數組只是Stone類的一個實例數組。如果狀態變量不爲空,那麼我在與數組中的位置對應的單元格上繪製黑色或白色的石頭。

如果您只是使用包含代表石頭的數字的數組,那麼當您需要處理捕獲時會遇到問題。

在回答您的問題時,在網格上找到它們的單擊位置,更新陣列中所有受影響的Stones,然後重新繪製陣列。