用java写一个打地鼠游戏
时间: 2023-12-22 20:03:43 浏览: 106
一个java做的打地鼠的小游戏.zip
好的,以下是用 Java 写一个打地鼠游戏的基本思路:
1. 创建一个窗口并设置基本属性,如大小、标题等。
2. 在窗口上绘制一个草坪的背景。
3. 创建一个地鼠的类,包括地鼠的图片、位置、状态等属性和方法。
4. 在窗口上随机生成地鼠,并将其添加到一个地鼠集合中。
5. 捕捉鼠标点击事件,判断点击的位置是否与地鼠重叠,如果重叠,则将地鼠状态设置为被击中。
6. 使用定时器(timer)定时更新地鼠的状态和位置,并重新绘制地鼠。
7. 在窗口上显示得分。
下面是一个简单的打地鼠游戏的示例代码:
```java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class WhackAMole extends JFrame implements ActionListener {
private JLabel scoreLabel;
private int score;
private Mole[] moles;
public WhackAMole() {
super("Whack-A-Mole");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
scoreLabel = new JLabel("Score: 0");
add(scoreLabel, BorderLayout.NORTH);
JPanel fieldPanel = new JPanel(new GridLayout(3, 3));
moles = new Mole[9];
for (int i = 0; i < 9; i++) {
moles[i] = new Mole();
fieldPanel.add(moles[i]);
moles[i].addActionListener(this);
}
add(fieldPanel, BorderLayout.CENTER);
Timer timer = new Timer(1000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (Mole mole : moles) {
mole.update();
}
}
});
timer.start();
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
Mole mole = (Mole) e.getSource();
if (mole.getState() == MoleState.UP) {
mole.hit();
score += 10;
scoreLabel.setText("Score: " + score);
}
}
public static void main(String[] args) {
new WhackAMole();
}
}
class Mole extends JButton {
private MoleState state;
public Mole() {
state = MoleState.DOWN;
setPreferredSize(new Dimension(100, 100));
setContentAreaFilled(false);
setBorderPainted(false);
setOpaque(false);
}
public MoleState getState() {
return state;
}
public void hit() {
state = MoleState.HIT;
}
public void update() {
if (state == MoleState.HIT) {
state = MoleState.DOWN;
} else if (state == MoleState.DOWN && Math.random() < 0.1) {
state = MoleState.UP;
} else if (state == MoleState.UP && Math.random() < 0.1) {
state = MoleState.DOWN;
}
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (state == MoleState.UP) {
g.setColor(Color.RED);
g.fillOval(10, 10, 80, 80);
} else if (state == MoleState.HIT) {
g.setColor(Color.GREEN);
g.fillOval(10, 10, 80, 80);
}
}
}
enum MoleState {
UP, DOWN, HIT
}
```
在这个示例代码中,我们创建了一个 WhackAMole 类,继承自 JFrame,作为游戏窗口。在窗口上我们添加了一个得分标签和一个草坪背景的面板,面板中有九个地鼠按钮,每个按钮对应一个 Mole 对象。Mole 类继承自 JButton,用来表示地鼠,并实现了地鼠的状态和更新方法。在 WhackAMole 类中,我们使用一个 Timer 来定时更新地鼠的状态和位置,并添加了一个 ActionListener,用来捕捉地鼠按钮的点击事件,并更新得分。最后调用 main() 方法启动游戏。
阅读全文