2012-04-03 6 views
0

Grundsätzlich habe ich in meinem Kartenspiel Probleme mit Action-Listenern und der Kommunikation/Kohäsion zwischen dem Controller und der Viewer-Klasse. Ich verstehe nicht wirklich, wie man sie verbindet. Weil ich über das tatsächliche Lernen von Java hinaus bin, versuche ich wirklich, über die Struktur von Java zu lernen und wie man ein Programm wie ein Spiel effizient und professionell produziert.Im MVC-Paradigma, ist die View-Init im Controller oder ist die Controller-Init in der Ansicht?

Hier ist, was ich bisher von meinem Code habe. Ich mache Phase 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) { 

    } 

Antwort

0

Controller instanziiert Ansichten.

Wie für Ihren Code, verstehe ich nicht wirklich, was Sie für eine Antwort suchen. Ihr Code ist unvollständig und ich sehe kein MVC-Muster. Das Modell sollte dein Deck und deine Karten sein. DeckDisplay und CardDisplay sind deine Ansichten. Ihr Controller hat sie alle zusammengebunden. Sie sollten diese Klassen wahrscheinlich in separate Dateien aufteilen.

+0

Ich habe nur meine Ansicht und Controller-Klasse kopiert und eingefügt. Das Spiel ist der Controller und die Ansicht ist die Ansicht. Nur gui Objekte sind in der Ansicht und meine Logik in der Spielklasse. Die Deck- und Kartenklassen im Spiel sind eine separate Klasse, dann die Klassen cardDisplay und deckDisplay. Ich habe in meiner Spielklasse gezeigt, dass ich ein Ansichtsobjekt in der Spielklasse initialisiert habe und wo mein Code versucht zu sehen, ob er, bis der Spieler eine Karte zieht, nur eine Karte ziehen kann. Das Problem besteht darin, wie der Controller sieht, ob der Player auf das Deckobjekt geklickt hat, wenn die Ansicht die Listener enthält. – Rendition

1

Ich stimme mit Guillaume Polet überein.

Aber ich würde sogar sagen, dass Verwendung sollte eine Launcher-Klasse, die Objekte erstellt und dann/verbindet sie zusammen.

Wenn Sie Ihre Ansichten in Ihrem Controller erstellen, haben Sie eine ziemlich enge Kopplung von Komponenten. Wenn Sie mit abstrakten Schnittstellen (in einer beliebigen Programmiersprache) arbeiten und die Implementierung zur Laufzeit bereitstellen, gewinnen Sie viel Flexibilität. Sie können dann Ihre Konfiguration in externe Dateien (d. H. XML) verschieben und sie als Config laden.

Verwandte Themen