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);
        });
    }
}

代码解析

  1. 实现 KeyListener 接口LoveCollector 类中实现 KeyListener 接口,并覆盖 keyPressed()keyTyped()keyReleased() 方法。

  2. 注册键盘事件监听器 在构造函数中,使用 addKeyListener(this) 方法将 LoveCollector 对象注册为键盘事件监听器,并使用 setFocusable(true) 方法使窗口能够接收键盘事件。

  3. 处理键盘事件keyPressed() 方法中,使用 getKeyCode() 方法获取按下的键码,并根据键码执行相应的操作。本示例中,我们提供了处理四个方向键的逻辑,您可以在 TODO 注释的位置编写您的游戏逻辑。

总结

通过实现 KeyListener 接口并注册键盘事件监听器,您可以轻松地在 Java Swing 游戏中添加键盘控制功能。本教程提供了完整的代码示例和详细的解析,帮助您快速上手。您可以在此基础上进行扩展,添加更多游戏元素和功能,并创造出属于您自己的游戏。

Java Swing 游戏开发:实现键盘控制

原文地址: https://www.cveoy.top/t/topic/1nl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录