美好的一天!
关于我的previous post,为了适应建议的MVC概念,我改变了我的代码并包含了一个IO类,如下所示:
public class IO {
public void output(String msg) {
JOptionPane.showMessageDialog(null, msg);
}
public String input(String prompt) {
return JOptionPane.showInputDialog(prompt);
}
public int inputInt(String prompt) {
return Integer.parseInt(input(prompt));
}
}
public class GuessGame {
private int numberToGuess;
private ArrayList<Player> player;
private IO io = new IO ();
public void acceptPlayers(){
int num_players = io.inputInt("Enter number of players");
player = new ArrayList<Player>(num_players);
for (int i = 0; i < num_players; i++) {
player.add(new Player(io.input("Enter Player " + (i+1) + " Name: ")));
}
}
public void startGame() {
numberToGuess = (int) (Math.random() * 10);
while (true) {
for (Player curPlayer : player) {
if (curPlayer.guessNumber() == numberToGuess) {
declareWinner(curPlayer);
return;
}
io.output(curPlayer.getPlayerName() + "'s Guess is Wrong!");
}
}
}
private void declareWinner(Player player) {
io.output(player.getPlayerName() + " Wins!");
}
}
这是对的吗?我该如何改进我的代码?谢谢。
答案 0 :(得分:2)
IO类在MVC模型中支持您的View。
GuessGame类必须承担很多责任,这个类适合你的模型和控制器,你必须拆分它。
您可以创建一个游戏类,其状态为 numberToGuess 和 ArrayList player ; 对于方法 addPlayer()和 start()
你可以拥有一个GameControlled类,它具有状态IO类和Game类。 对于方法 acceptPlayers(),* startGame()*, declareWinner(播放器播放器)。
答案 1 :(得分:1)
在上面的代码中,您无法将视图i.IO从图形界面更改为命令行界面。 如果将IO更改为接口,并将GraphicalIO类更改为显示图形界面,将另一个类CommandLineIO更改为显示命令行界面,则可以充分利用OOP概念。
另外关于MVC模式如果你把IO用于生成视图而GuessGame作为模型和控制器,因为它具有逻辑和程序控制,它仍然没有干净地分开。猜测游戏紧密耦合到IO对象再次与图形视图紧密耦合。