2012-04-03 53 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)并将其作为配置加载。

相关问题