在MVC范例中,View中的View是init还是View中的Controller init?

时间:2012-04-03 17:40:17

标签: java model-view-controller

基本上在我的纸牌游戏中,我遇到了动作听众以及Controller和观众类之间的沟通/凝聚力。我真的不明白如何连接它们。因为我超越了java的实际学习,我真的想学习java的结构以及如何有效和专业地制作游戏等程序。

到目前为止,这是我的代码。我正在制作第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) {

    }

2 个答案:

答案 0 :(得分:1)

我同意Guillaume Polet。

但我甚至会说,使用应该制作一个创建对象的启动器类,然后/ 将它们连接在一起。

如果在控制器中创建视图,则组件的耦合非常紧密。 如果您使用抽象接口(使用任何编程语言)并在运行时提供实现,则可以获得很大的灵活性。然后,您可以将配置移动到外部文件(即XML)并将其作为配置加载。

答案 1 :(得分:0)

Controller实例化视图。

至于你的代码,我真的不明白你在寻找什么答案。你的代码不完整,我真的没有看到MVC模式。该模型应该是您的甲板和卡片。 DeckDisplay和CardDisplay是您的观点。你的控制器将它们捆绑在一起。您应该将这些类拆分为单独的文件。