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 = 100; private final int HEART_SIZE = 80; private final int BIG_HEART_SIZE = 190; 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:/chuan.jpg'));
    boy.setBounds(SCREEN_WIDTH / 2 - BOY_SIZE / 2, SCREEN_HEIGHT / 2 - BOY_SIZE / 2, 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);
}

private void showDialog() {
    JOptionPane.showMessageDialog(this, '爱艺');
}

@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();
    int x = boy.getX();
    int y = boy.getY();
    int step = 10;

    if (keyCode == KeyEvent.VK_UP) {
        boy.setLocation(x, y - step);
    } else if (keyCode == KeyEvent.VK_DOWN) {
        boy.setLocation(x, y + step);
    } else if (keyCode == KeyEvent.VK_LEFT) {
        boy.setLocation(x - step, y);
    } else if (keyCode == KeyEvent.VK_RIGHT) {
        boy.setLocation(x + step, y);
    }

    if (boy.getBounds().intersects(heart.getBounds())) {
        collectedHearts++;

        if (collectedHearts == TOTAL_HEARTS) {
            generateNewHeart();
            bigHeart.setIcon(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(true);
            showDialog();
        } else {
            generateNewHeart();
        }
    }
}

public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> new LoveCollector().setVisible(true));
}

} '}

代码修改说明:

  1. 标题和描述优化: 修改标题和描述,使其更具描述性,包含关键词,更利于搜索引擎理解内容。2. 关键词: 添加一些与游戏相关的关键词,例如 'Java', 'Swing', '游戏', '爱心', '收集' 等。3. 双引号改为单引号: 将代码中所有双引号替换为单引号,避免与 JSON 格式的双引号冲突。4. 添加 main 方法: 添加一个 main 方法来启动游戏,并使用 SwingUtilities.invokeLater 将游戏初始化代码放在事件调度线程中执行,确保 Swing 组件在正确的线程中创建。

关于图片显示不完整的问题:

你遇到的图片显示不完整问题,可能是因为图片大小与 JButton 设置的大小不匹配。以下几种方法可以尝试解决:

  • 设置按钮大小: 在创建 JButton 时,使用 setPreferredSizesetBounds 方法设置按钮大小,确保按钮大小与图片大小一致。* 使用布局管理器: 使用布局管理器,例如 FlowLayoutBorderLayoutGridBagLayout,来管理组件的大小和位置。这样可以避免手动设置组件位置,并更灵活地适应不同大小的图片。* 调整图片大小: 在加载图片时,使用 ImageIcongetImage().getScaledInstance() 方法调整图片大小,使其适合按钮大小。

**示例代码:**javaimport 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 { // ... (其他代码)

public LoveCollector() {        // ... (其他代码)

    Container container = getContentPane();        container.setLayout(new FlowLayout()); // 使用 FlowLayout 布局管理器

    // 调整图片大小        Image boyImage = new ImageIcon('D:/chuan.jpg').getImage().getScaledInstance(BOY_SIZE, BOY_SIZE, Image.SCALE_SMOOTH);        boy = new JButton(new ImageIcon(boyImage));        boy.setPreferredSize(new Dimension(BOY_SIZE, BOY_SIZE));         container.add(boy);

    // 其他按钮设置类似

    // ... (其他代码)    }

// ... (其他代码
Java 爱心收集游戏 - 用键盘控制角色收集爱心

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

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