www triki tateti sencillos raya net mvc matrices juegos juego interfaz grafica gato con java model-view-controller

triki - Java MVC: ¿cómo dividir un juego de texto hecho en MVC?



triki en java (2)

Para obtener una puñalada (y esto es un exceso), crearía un bean de estado de juego que representaría el estado en el que se encuentra actualmente el juego; eso sería un "objeto modelo". Al mirar tu código, probablemente contenga String [] mellan. Entonces tendría un objeto de acceso a datos que contiene una referencia al bean de estado del juego y tendría métodos para actualizar el estado del juego.

La lógica del juego para diferentes acciones estaría en un objeto de servicio que tiene una referencia al objeto de acceso a datos y el controlador tendría una referencia al objeto de servicio. Llamaría a los diferentes métodos de acción dependiendo de qué interacción se recibió de la interfaz, la vista.

Como dije, esto es un poco exagerado.

He estado sentado aquí durante horas tratando de resolver esto, así que un poco de simpatía por esta gran pregunta. :)

El objetivo: simplemente quiero dividir mi código hecho en partes MVC (Controlador de vista de modelo). Tengo la lógica del juego hecha y basada en texto; el código funciona bien.

El problema : bueno, quiero implementar este código en MVC, pero ¿dónde explico para el MODELO que debería usar texto? Debido a que el VIEW es solo para el diseño (gráficamente) correcto? Estoy teniendo un tiempo REALMENTE difícil para averiguar por dónde empezar. ¡Cualquier apuntador sería tan agradable!

Aquí está mi código de lógica de juego:

import 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(); } }

Así es como definí mi DriveView hasta el momento: (solo intento hacer que un botón funcione)

import 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); }

}

Y DriveController que me da error al compilar

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

}


Su modelo de juego puede tener más de una vista: una vista de GUI, una vista de consola, una vista de estado, etc. Típicamente, cada vista se organiza para escuchar los cambios en el modelo y luego consulta al modelo para obtener la información que necesita para procesar su vista particular. Este simple juego fue diseñado específicamente para ilustrar los conceptos. La sección llamada "Diseño" se explica con más detalle.

Addendum: Este esquema corresponde aproximadamente a esta arquitectura , que se simboliza a continuación.

public class MVCOutline { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { //@Override public void run() { new MVCOutline().create(); } }); } private void create() { JFrame f = new JFrame("MVC Outline"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(new MainPanel()); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } } class MainPanel extends JPanel { public MainPanel() { super(new BorderLayout()); Model model = new Model(); View view = new View(model); Control control = new Control(model, view); this.add(view, BorderLayout.CENTER); this.add(control, BorderLayout.WEST); } } class Control extends JPanel implements ... { private Model model; private View view; public Control(Model model, View view) { this.model = model; this.view = view; } } class View extends JPanel implements Observer { private Model model; public View(Model model) { this.model = model; model.addObserver(this); } public void update(Observable o, Object arg) { // update GUI based on model } } class Model extends Observable { public void next() { this.notifyObservers(...); } }