我正在练习MVC风格的编程.我在一个文件中有一个Mastermind游戏,工作正常(可能除了"Check"按钮在开始时不可见).
http://paste.pocoo.org/show/226726/
但是当我把它重写为模型,视图,控制器文件时 - 当我点击空Pin(应该更新,并重新绘制新颜色)时 - 注意到了.谁能在这里看到任何问题?我尝试在不同的地方放置repaint(),但它根本不起作用:/
主要:
public class Main {
public static void main(String[] args){
Model model = new Model();
View view = new View("Mastermind", 400, 590, model);
Controller controller = new Controller(model, view);
view.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
型号:
import java.util.Random;
public class Model{
static final int
LINE = 5,
SCORE = 10, OPTIONS = 20;
Pin pins[][] = new Pin[21][LINE];
int combination[] = new int[LINE];
int curPin = 0;
int turn = 1;
Random generator = new Random(); …Run Code Online (Sandbox Code Playgroud) 现在坐在这里几个小时试图解决这个问题,所以对这个大问题有点同情.:)
目标:我只想将完成的代码分成MVC(模型视图控制器)部分.我已完成游戏逻辑并基于文本 - 代码工作正常.
问题:嗯,我想将这个代码实现到MVC中,但是在哪里解释它应该使用基于文本的MODEL?因为VIEW仅用于布局(图形化)正确吗?我真的很难搞清楚从哪里开始.任何指针都会很棒!
这是我的游戏逻辑代码:
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: …Run Code Online (Sandbox Code Playgroud) 首先,我来自MVC的大背景,当我开始使用PHP时,我浏览了很多次,尝试用PHP完善我的MVC-Like设计.很多人都喜欢回答了很多帮助我的答案.
但是在Swing中开始GUI开发之后,关于Swing中MVC的答案是完全不同的.例如,模型也是一种观点?根据Oracle的建议 TextElementModel在这里没有任何逻辑业务,它所做的只是标记(设置颜色等)和设置数据,如设置文本等.当我用PHP开发时,没有这样的事情,AbstractModel因为我总是被告知模型不是一个类,或者更多,它是一个处理逻辑业务的整个层.
在PHP中,我使用了服务,数据映射器和域对象,这个惊人的答案提示我在PHP中帮助了我:如何在MVC中构建模型?
在再次阅读之后,我想在Java中做一个类似的事情:
我有ControllerContainer创建所有控制器:
public class ControllerContainer {
private JFrame frame;
public ControllerContainer(JFrame rune) {
this.frame = frame;
}
public void initControllers() {
Atest test = new Atest(frame);
test.registerView("test", new ViewTest(test));
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我将带有实例的名为"test"的视图添加ViewTest到控制器中,现在它将在框架中可见,并且可以接受输入.
我的Controller班级,应该是抽象的,但我还没有把它抽象化:
public class Controller {
private JFrame frame;
private Map<String, Component> views = new HashMap<String, Component>();
public Controller(JFrame frame) {
this.frame = frame;
}
protected void registerView(String title, Component c) {
this.views.put(title, …Run Code Online (Sandbox Code Playgroud)