【发布时间】:2013-05-27 22:26:20
【问题描述】:
我正在处理我的 Java 作业 - Minesweeper 游戏克隆。我有两个几乎相同的(只有文本标签和文本框架不同)方法 gameWon() 和 gameLost() 负责在游戏结束时显示“Game Won!”/“Game Lost”窗口。我知道代码重复是不好的做法,所以我想对其进行优化。问题是我对 OOP 有点陌生,我不确定该怎么做。也许我可以以某种方式将这些方法合并为一个,以便在不同情况下采取不同的行动,或者继承会很有用。我真的不知道,希望你们中的一些人能帮助我一点。感谢您的回答。
以下是这些方法的代码:
游戏结束
public static void gameOver() {
F1 = new JFrame("Game Over");
F1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
F1.setSize(360, 120);
Container content = F1.getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
JLabel textLabel = new JLabel("Sorry, you have lost this game! Better luck next time.",SwingConstants.CENTER);
textLabel.setPreferredSize(new Dimension(360, 40));
content.add(textLabel, BorderLayout.CENTER);
JButton button = new JButton("Exit");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
content.add(button);
button = new JButton("Restart This Game");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
F1.dispose();
Board.doRepaint();
}
});
content.add(button);
button = new JButton("Play Again");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
F1.dispose();
restartGame();
}
});
content.add(button);
F1.setLocationRelativeTo(null);
F1.setVisible(true);
}
gameWon
public static void gameWon() {
F1 = new JFrame("Game Won");
F1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
F1.setSize(360, 120);
Container content = F1.getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
JLabel textLabel = new JLabel("Congratulations, you have won the game!",SwingConstants.CENTER);
textLabel.setPreferredSize(new Dimension(360, 40));
content.add(textLabel, BorderLayout.CENTER);
JButton button = new JButton("Exit");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
content.add(button);
button = new JButton("Restart This Game");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
F1.dispose();
Board.doRepaint();
}
});
content.add(button);
button = new JButton("Play Again");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
F1.dispose();
restartGame();
}
});
content.add(button);
F1.setLocationRelativeTo(null);
F1.setVisible(true);
}
【问题讨论】:
-
你可以创建一个通用的
GameComplete版本,它接受几个字符串。这将允许您重用相同的代码并显示不同的文本
标签: java oop inheritance polymorphism code-duplication