Java Swing 游戏开发:实现键盘控制
Java Swing 游戏开发:实现键盘控制
本教程将引导您使用 Java Swing 创建一个简单的游戏,并添加键盘事件处理逻辑,实现方向键控制游戏角色。
代码示例
以下是完整的游戏代码,其中包含了键盘事件处理逻辑,您可以根据需要修改代码以实现您的游戏逻辑:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Random;
public class LoveCollector extends JFrame implements ActionListener, KeyListener {
private final int SCREEN_WIDTH = 500;
private final int SCREEN_HEIGHT = 500;
private final int BOY_SIZE = 50;
private final int HEART_SIZE = 30;
private final int BIG_HEART_SIZE = 100;
private final int TOTAL_HEARTS = 13;
private final int HEARTS_TO_WIN = 12;
private JButton boy;
private JButton heart;
private JButton bigHeart;
private int collectedHearts;
private Random random;
public LoveCollector() {
random = new Random();
setTitle('Love Collector');
setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
Container container = getContentPane();
container.setLayout(null);
boy = new JButton(new ImageIcon('D:/ai.jpg'));
boy.setBounds(0, 0, BOY_SIZE, BOY_SIZE);
container.add(boy);
heart = new JButton(new ImageIcon('D:/ai.jpg'));
heart.setBounds(getRandomX(), getRandomY(), HEART_SIZE, HEART_SIZE);
heart.addActionListener(this);
container.add(heart);
bigHeart = new JButton(new ImageIcon('D:/ai.jpg'));
bigHeart.setBounds(SCREEN_WIDTH / 2 - BIG_HEART_SIZE / 2, SCREEN_HEIGHT / 2 - BIG_HEART_SIZE / 2,
BIG_HEART_SIZE, BIG_HEART_SIZE);
bigHeart.setVisible(false);
container.add(bigHeart);
collectedHearts = 0;
Timer timer = new Timer(1000, this);
timer.start();
// 注册键盘事件监听器
addKeyListener(this);
setFocusable(true);
}
private int getRandomX() {
return random.nextInt(SCREEN_WIDTH - HEART_SIZE);
}
private int getRandomY() {
return random.nextInt(SCREEN_HEIGHT - HEART_SIZE);
}
private void generateNewHeart() {
heart.setBounds(getRandomX(), getRandomY(), HEART_SIZE, HEART_SIZE);
heart.setVisible(true);
}
private void showBigHeart() {
bigHeart.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == heart) {
collectedHearts++;
if (collectedHearts == HEARTS_TO_WIN) {
generateNewHeart();
showBigHeart();
} else if (collectedHearts > HEARTS_TO_WIN) {
JOptionPane.showMessageDialog(this, 'Game Over!');
System.exit(0);
} else {
generateNewHeart();
}
}
}
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_UP) {
// 处理向上方向键的按下事件
// TODO: 编写相应的处理代码
} else if (keyCode == KeyEvent.VK_DOWN) {
// 处理向下方向键的按下事件
// TODO: 编写相应的处理代码
} else if (keyCode == KeyEvent.VK_LEFT) {
// 处理向左方向键的按下事件
// TODO: 编写相应的处理代码
} else if (keyCode == KeyEvent.VK_RIGHT) {
// 处理向右方向键的按下事件
// TODO: 编写相应的处理代码
}
}
@Override
public void keyTyped(KeyEvent e) {
// 不需要实现
}
@Override
public void keyReleased(KeyEvent e) {
// 不需要实现
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
LoveCollector loveCollector = new LoveCollector();
loveCollector.setVisible(true);
});
}
}
代码解析
-
实现 KeyListener 接口 在
LoveCollector类中实现KeyListener接口,并覆盖keyPressed()、keyTyped()和keyReleased()方法。 -
注册键盘事件监听器 在构造函数中,使用
addKeyListener(this)方法将LoveCollector对象注册为键盘事件监听器,并使用setFocusable(true)方法使窗口能够接收键盘事件。 -
处理键盘事件 在
keyPressed()方法中,使用getKeyCode()方法获取按下的键码,并根据键码执行相应的操作。本示例中,我们提供了处理四个方向键的逻辑,您可以在TODO注释的位置编写您的游戏逻辑。
总结
通过实现 KeyListener 接口并注册键盘事件监听器,您可以轻松地在 Java Swing 游戏中添加键盘控制功能。本教程提供了完整的代码示例和详细的解析,帮助您快速上手。您可以在此基础上进行扩展,添加更多游戏元素和功能,并创造出属于您自己的游戏。
原文地址: https://www.cveoy.top/t/topic/1nl 著作权归作者所有。请勿转载和采集!