2010-11-24 37 views
1

我在如何連貫地將它寫成單詞方面掙扎了一番,所以我只是用一個例子,希望它能夠傳遞信息。有沒有辦法改變多個項目? [難以描述,內部示例]

以遊戲黑白棋(黑白棋)爲例。我可以對遊戲背後的邏輯進行編程,也就是說我可以確定哪些棋子在每次回合後都會改變顏色。

假設我在JFrame上有64個面板,每個面板都代表了Othello板上的一個位置。轉彎結束後,我確定面板5和6需要改變其顏色。

我希望能夠做的是通過一個數組傳遞5和6,讓我們說,並有一個循環遍歷數組。

for(int i=0; i < array.length; i++){ 
    change the image at array[i] 
} 

,因此,只檢查,並在2的變化,在這個例子中,我需要改變的地方。節省很多時間編寫代碼。

我現在要做的就是有一個for循環和內部的for循環我有64 if-else語句,說

if(panel == 5){ 
    change the image at 5 
} 
etc. 

我希望這個跨我試圖問順利拿到。如果沒有,我會很樂意澄清。

+0

您使用的是Swing組件嗎? – evilReiko 2010-11-24 13:05:10

+0

是的,我是。我正在使用NetBeans GUI編輯器來設計整個事情。 – Ryan 2010-11-25 04:47:35

回答

1

你是如何存儲64個子面板?如果你現有的代碼是指面板從0-63(或1 - 64)號,那麼你可以將它們存儲在一個一維數組,然後你的代碼yould是:

ImagePanel[] othelloPanels; 

void changeImages(int[] indicies) { 
    for (int i=0;i<indicies.length;i++) { 
     othelloPanels[indicies[i]].change(); 
    } 
} 

我本來認爲它們存儲因爲二維(8乘8)數組更有意義,但也許這只是我。

0

如何:

void changeImages(Image[] images, Set<Integer> positionsToChange) { 
    for (int i=0; i < array.length; i++){ 
     if (positionsToChange.contains(i)) { 
      // change the image at array[i] 
     } 
    } 
} 
0

在abhin4v的答案的基礎:

void changeImages(Image[] images, Set<Integer> positionsToChange) { 
    for (Integer index : positionsToChange) { 
     // change the image at images[index] 
    } 
} 

你可以把一些額外的檢查,在for循環,以確保你的指數在邊界你數組,但是如果你正確地設置了Set,沒有必要。

0

把你的板到地圖,以便這些面板可以很容易地解決:

Map<Integer, PanelClass> panelsMap; 

在哪裏,如果你使用的一維尋址整數關鍵是面板的地圖上的地址。當你的方法定義哪些面板來改變它應該返回整數數組或可迭代,然後執行以下操作:

for(Integer coord : getPanelIdsToChange()) { 
    panelsMap.get(coord).doWhatYouWant(); 
} 
相關問題