В парадигме MVC: инициализация представления в контроллере или инициализация контроллера в представлении? - PullRequest
0 голосов
/ 03 апреля 2012

В основном, в моей карточной игре у меня проблемы с слушателями действий и связью / сплоченностью между Контроллером и классом зрителя. Я не очень понимаю, как их соединить. Поскольку я не изучаю 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 ]

1 голос
/ 03 апреля 2012

Я согласен с Гийомом Полетом.

Но я бы даже сказал, что использование должно создать класс запуска, который создает объекты и затем / соединяет их вместе.

Если вы создаете свои представления в вашем контроллере, у вас довольно тесная связь компонентов. Если вы работаете с абстрактными интерфейсами (на любом языке программирования) и предоставляете реализацию во время выполнения, вы получаете большую гибкость. Затем вы можете переместить свою конфигурацию во внешние файлы (например, XML) и загрузить ее как config.

0 голосов
/ 03 апреля 2012

Контроллер создает экземпляры представлений.

Что касается вашего кода, я не совсем понимаю, что вы ищете ответ.Ваш код неполон, и я не вижу паттерна MVC.Модель должна быть вашей колодой и картами.DeckDisplay и CardDisplay - это ваши взгляды.Ваш контроллер связал их всех вместе.Возможно, вам следует разделить эти классы на отдельные файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...