2012-04-03 56 views
0

基本上在我的紙牌遊戲中,我在操作監聽器和控制器和查看器類之間的通信/內聚方面遇到了問題。我不太瞭解如何連接它們。因爲我超越了java的實際學習,所以我真的很想了解java的結構以及如何有效地和專業地製作諸如遊戲等程序。在MVC範例中,是控制器中的View init還是View中的Controller init?

以下是我的代碼到目前爲止。我正在進行階段10.

public class Game { 

private ArrayList<Player> players; 
private Deck playDeck; 
private ArrayList<Set> table; 
private View view; 


/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) { 
    Game game = new Game(); 
    game.run(); 
} 

public void run() { 
    initPlayers(1); 
    initView(); 
    createDeck(); 
     for(Player player: players){ 
      player.setDrawn(false); 
      while(!player.hasDrawn()){ 
       if(*player clicks deck to draw card*){ 
        Card topCard = playDeck.getTopCard(); 
        player.addCard(topCard); 
        view.createCardComponent(); 
        player.setDrawn(true); 
       } 


public class View implements MouseListener{ 
    JFrame frame; 
    JPanel handPanel; 
    JPanel deckPanel; 
    public View() 
    { 
    } 

    public void makeFrame() 
    { 
     frame = new JFrame("Phase 10"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setLayout(new BorderLayout()); 
     handPanel = new JPanel(); 
     deckPanel = new JPanel(); 
     handPanel.setLayout(new FlowLayout()); 
     frame.add(handPanel, BorderLayout.SOUTH); 
     frame.add(deckPanel, BorderLayout.EAST); 
     deckPanel.add(new DeckDisplay()); 
     frame.pack(); 
     frame.setSize(1000,500); 
     frame.setResizable(true); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 

    public void createCardComponent(){ 
     CardDisplay card = new CardDisplay(); 
     handPanel.add(card); 
     card.addMouseListener(this); 
    } 

    public void update(){ 
     handPanel.revalidate(); 
    } 

    @Override 
    public void mouseClicked(MouseEvent me) { 

    } 

    @Override 
    public void mousePressed(MouseEvent me) { 

    } 

    @Override 
    public void mouseReleased(MouseEvent me) { 

    } 

    @Override 
    public void mouseEntered(MouseEvent me) { 

     } 

    @Override 
    public void mouseExited(MouseEvent me) { 

    } 

回答

0

控制器實例化視圖。

至於你的代碼,我真的不明白你在找什麼答案。你的代碼是不完整的,我真的沒有看到MVC模式。模型應該是你的甲板和卡片。 DeckDisplay和CardDisplay是您的觀點。你的控制器將它們連在一起。你應該把這些類分成不同的文件。

+0

我只是複製並粘貼我的視圖和控制器類。遊戲是控制器和視圖是視圖。只有gui對象在視圖中,而我的邏輯在遊戲類中。遊戲中的甲板和卡類是一個單獨的類,然後是cardDisplay和deckDisplay類。我在遊戲課上展示了我在遊戲類中初始化了一個視圖對象,然後我的代碼嘗試查看,直到玩家抽出一張卡片,他只能畫一張卡片。問題是,如果視圖持有監聽器,控制器如何查看播放器是否從視圖中點擊了deck對象。 – Rendition 2012-04-03 19:29:32

1

我同意Guillaume Polet。

不過,我甚至可以說,在使用應該做一個發射器類創建對象然後/ 電線他們在一起。

如果您在您的控制器你的意見,你有分量的一個非常緊密耦合。 如果您使用抽象接口(使用任何編程語言)並在運行時提供實現,那麼您將獲得很大的靈活性。然後,您可以將您的配置移動到外部文件(即XML)並將其作爲配置加載。

相關問題