2013-05-08 46 views
1

我正在爲CS課程開發一款棋盤遊戲,我已經開始使用引擎 - 它的骨幹 - 並且已經完善了它,但我仍然停留在GUI部分。在引擎中,我有一個雙精度數組來初始化棋子,並且它有一個getWinner和移動方法。在GUI部分,我創建了我的JFrame並將其佈局設置爲gridlayout,並且我有另一個雙數組,它檢查引擎的陣列並相應地打印棋盤上的棋子。但是,每當我移動時,引擎的陣列寄存器此舉,但它不會顯示在我的JFrame ..我已經將如何做到這一點不知道.. 這裏是我的GUI包主類:如何讓我的JFrame顯示一個JPanel數組來更新自己?

package eg.edu.guc.loa.gui; 

import java.awt.*; 
import java.util.ArrayList; 

import javax.swing.*; 

import eg.edu.guc.loa.engine.*; 
import eg.edu.guc.loa.engine.Point; 

@SuppressWarnings("serial") 
public class LOA extends JFrame{ 

    static Tiles[][] Jboard; 
    static Board b = new Board(); 
    static Color temp; 
    static Color col1 = Color.DARK_GRAY; 
    static Color col2 = Color.LIGHT_GRAY; 
    static JFrame LOA = new JFrame(); 
    JButton b1, b2; 

    public LOA(){ 
     Jboard = new Tiles[8][8]; 
     LOA.setLayout(new GridLayout(8, 8)); 
     initBoard(); 
     LOA.setSize(600, 600); 
     LOA.setVisible(true); 
     LOA.setLocationRelativeTo(null); 
     LOA.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     b.printBoard(); 
    } 

    public static void initBoard(){ 
     remove(); 
     b.printBoard(); 

     for(int i = 0; i<8; i++){ 
      if (i%2 == 0){ 
       temp = col1; 
      } 
      else{ 
       temp = col2; 
      } 
      for(int j = 0; j<8; j++){ 
       Jboard[i][j] = new Tiles(temp, i, j); 
       LOA.getContentPane().add(Jboard[i][j]); 
       if (temp.equals(col1)){ 
        temp = col2; 
       } 
       else{ 
        temp = col1; 
       } 

       if(b.getPiece(new Point(j, i)).getPlayer() == BoardCell.PLAYER_1_PIECE){ 
        Jboard[i][j].hasChecker(true); 
        Jboard[i][j].setWhite(true); 
        Jboard[i][j] = new Tiles(temp, i, j); 

       } 
       if(b.getPiece(new Point(j, i)).getPlayer() == BoardCell.PLAYER_2_PIECE){ 
        Jboard[i][j].hasChecker(true); 
        Jboard[i][j].setWhite(false); 
        Jboard[i][j] = new Tiles(temp, i, j); 
       } 

      } 
     } 
    } 

    public static void remove(){ 
     for(int i = 0; i<8;i++){ 
      for(int j = 0; j<8; j++){ 
       if(Jboard[i][j] != null) 
        LOA.remove(Jboard[i][j]); 
      } 
     } 
    } 



    public static void main (String [] args){ 
     new LOA(); 

     } 

} 

任何幫助將非常感激。 。 提前致謝。 ()是我在刪除舊框架和建立一個基於新的更新陣列(與移動片段)的新的嘗試,這顯然失敗了。

回答

1

如在這個簡單得多的MVCGame中所示,您可以使用observer pattern安排您的視圖註冊爲模型的偵聽器。用戶手勢應該更新模型;當通過模型通知時,視圖應該簡單地呈現模型的當前狀態。模型中不應該繪製圖形,視圖中也不應該有遊戲邏輯。