2012-04-03 10 views
0

基本的に私のカードゲームでは、私はアクションリスナーとコントローラーと視聴者クラス間のコミュニケーション/結束に問題があります。私はそれらを結ぶ方法を本当に理解していません。私は実際のJavaの学習を超えているので、私は実際にJavaの構造と、ゲームなどのプログラムを効率的かつ専門的に作り出す方法について学びたいと考えています。MVCパラダイムでは、Viewの初期化はコントローラ内にあるのか、Viewのコントローラ初期化ですか?

これまでの私のコードの内容は次のとおりです。私はフェーズ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クラスです。ゲームクラスでゲームクラスにビューオブジェクトを初期化してから、自分のコードがカードを描くまでカードを描くことができるかどうかを確認しようとしています。問題は、ビューがリスナーを保持している場合、ビューからデッキオブジェクトをクリックしたかどうかをコントローラがどのように確認するかです。 – Rendition

1

私はGuillaume Poletに同意します。

しかし、私はしても、その使用はが一緒にオブジェクト、次に/ 電線それらを作成するランチャークラスを作るべきだと思います。

あなたのコントローラでビューを作成する場合は、かなり密接なコンポーネントの結合があります。 (任意のプログラミング言語で)抽象的なインタフェースを操作し、実行時に実装を提供する場合、多くの柔軟性が得られます。設定を外部ファイル(XMLなど)に移動し、configとして読み込むことができます。

関連する問題