Şimdi saatlerce burada oturuyoruz, bunu anlamaya çalışıyorum, bu büyük soru için biraz sempati. :)Java MVC - Bitmiş bir metin oyununu MVC'ye nasıl bölersin?
Hedef: Sadece yaptığım kodu MVC (Model View Controller) parçalarına bölmek istiyorum. Oyun mantığını tamamladım ve metin tabanlıyım - kod iyi çalışıyor.
Sorun: Bu kodu MVC'ye uygulamak istiyorum, ancak MODEL'i metin tabanlı kullanması gerekenleri açıklar mı? VIEW sadece düzen için (grafiksel) doğru mu? Nereden başlayacağımı bulmak için gerçekten zor bir zaman geçiriyorum. Herhangi bir işaretçi çok güzel olurdu!
İşteimport mind.*;
import javax.swing.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
public class Drive {
String[] mellan;
boolean gameEnd, checkempty, checkempty2, enemy, enemy2;
String gr,rd,tom;
int digits;
public Drive() {
// Gamepieces in textform
gr="G"; rd="R"; tom=" ";
mellan = new String[7];
String[] begin = {gr,gr,gr,tom,rd,rd,rd};
String[] end = {rd,rd,rd,tom,gr,gr,gr};
//input
Scanner in = new Scanner(System.in);
mellan=begin;
gameEnd=false;
while (gameEnd == false) {
for(int i=0; i<mellan.length; i++) {
System.out.print(mellan[i]);
}
System.out.print(" Choose 0-6: ");
digits = in.nextInt();
move();
checkWin();
}
}
void move() {
//BOOLEAN for gameruls!!!
checkempty = digits<6 && mellan[digits+1]==tom;
checkempty2 = digits>0 && mellan[digits-1]==tom;
enemy = (mellan[digits]==gr && mellan[digits+1]==rd && mellan[digits+2]==tom);
enemy2 = (mellan[digits]==rd && mellan[digits-1]==gr && mellan[digits-2]==tom);
if(checkempty) {
mellan[digits+1]=mellan[digits];
mellan[digits]=tom;
} else if (checkempty2) {
mellan[digits-1]=mellan[digits];
mellan[digits]=tom;
} else if (enemy) {
mellan[digits+2]=mellan[digits];
mellan[digits]=tom;
} else if (enemy2) {
mellan[digits-2]=mellan[digits];
mellan[digits]=tom;
}
}
void checkWin() {
String[] end = {rd,rd,rd,tom,gr,gr,gr};
for (int i=0; i<mellan.length; i++){
}
if (Arrays.equals(mellan,end)) {
for (int j=0; j<mellan.length; j++) {
System.out.print(mellan[j]);
}
displayWin();
}
}
void displayWin() {
gameEnd = true;
System.out.println("\nNicely Done!");
return;
}
// Kör Drive!
public static void main(String args[]) {
new Drive();
}
}
Ben bugüne kadar benim Drive View tanımlı nasıl: Burada
oyunum mantıkları kodudurimport mind.*;
import javax.swing.*;
import java.util.*;
import java.lang.*;
import java.awt.*;
import java.awt.event.*;
public class DriveView extends JFrame {
JButton ruta1 = new JButton("Green");
JButton ruta2 = new JButton("Green");
JButton rutatom = new JButton("");
JButton ruta6 = new JButton("Red");
private DriveModel m_model;
public DriveView(DriveModel model) {
m_model = model;
//Layout for View
JPanel myPanel = new JPanel();
myPanel.setLayout(new FlowLayout());
myPanel.add(ruta1);
myPanel.add(ruta2);
myPanel.add(rutatom);
myPanel.add(ruta6);
this.setContentPane(myPanel);
this.pack();
this.setTitle("Drive");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
void addMouseListener(ActionListener mol) {
ruta2.addActionListener(mol);
}
}
(sadece çalışmak için bir düğme yapmaya çalışıyorum) Ve bana hata veren DriveController
import mind.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
public class DriveController {
private DriveModel m_model;
private DriveView m_view;
public DriveController(DriveModel model, DriveView view) {
m_model = model;
m_view = view;
view.addMouseListener(new MouseListener());
}
class MouseListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String mening;
mening = e.getActionCommand();
if (mening.equals("Green")) {
setForeground(Color.red);
}
}
}
}
Yanıt trashgod için teşekkürler. Biraz şaşkın olduğum bir şey, örneğin DriveMVC.java'yı çalıştırdığımda her şeyin doğru çalıştığını bilmek için bir DriveModel.java DriveView.java DriveController.java ve bir ana DriveMVC.java oluşturduğumu söyleyeyim terminal, GUI görünümünü otomatik olarak başlatmadan önce metin görünümünü yapmama izin veriyor mu? Eve vardığım anda bağlantınıza bir göz atacağım! Teşekkür ederim! – Zopyrus
Mükemmel; Yukarıda bir anahat ekledim. – trashgod
Ayrıca bkz. Bu ilgili [örnek] (http://stackoverflow.com/questions/3066590/gui-problem-after-rewriting-to-mvc/3072979#3072979). – trashgod