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) {
}
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