2012-04-03 1 views
0

В основном в карточной игре у меня возникают проблемы с прослушивателями действий и связью/связью между классом Controller и viewer. Я не понимаю, как их подключить. Поскольку я не в курсе фактического изучения Java, я действительно пытаюсь узнать о структуре java и о том, как эффективно и профессионально создавать такую ​​программу, как игра.В парадигме MVC, является ли представление инициализированным в контроллере или является инициализацией контроллера в представлении?

Вот что у меня есть в моем коде. Я делаю фазу 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) и загрузить ее в качестве конфигурации.

Смежные вопросы