返回

通俗易懂的Java代码,让你感受不一样的年兽大作战!

后端

春节喜迎编程乐:年兽大作战游戏指南

开篇寄语

春节临近,万家灯火通明,年兽的传说也随之而来。相传年兽凶猛残暴,每逢岁末便会下山祸害人间。为了驱赶年兽,人们张贴门神、燃放鞭炮,以期辟邪除祟。然而,在科技飞速发展的今天,我们不妨用编程的方式来驱赶年兽,体验别样的春节乐趣。

年兽大作战游戏规则

本游戏旨在让玩家通过编程来躲避年兽的攻击,收集金币,增强自身能力,最终击败年兽。

  • 玩家控制一个小人,在屏幕上躲避年兽的攻击,同时收集金币。
  • 年兽会从屏幕的两侧随机出现,并向玩家发动攻击。
  • 玩家可以通过上下左右移动来躲避年兽的攻击。
  • 玩家也可以通过拾取金币来增强自己的能力,比如增加血量或攻击力。
  • 当玩家的血量归零时,游戏结束。

代码示例

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class NianShouDaZhan extends JPanel implements ActionListener, KeyListener {

    // 游戏组件
    private Timer timer;
    private Player player;
    private NianShou nianShou;
    private Coin coin;
    private int score;

    // 构造函数
    public NianShouDaZhan() {
        // 初始化游戏界面
        setPreferredSize(new Dimension(800, 600));
        setBackground(Color.BLACK);

        // 初始化游戏角色
        player = new Player();
        nianShou = new NianShou();
        coin = new Coin();

        // 初始化游戏计时器
        timer = new Timer(100, this);
        timer.start();

        // 添加键盘监听器
        addKeyListener(this);
    }

    // 绘制游戏界面
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        // 绘制游戏角色
        player.draw(g);
        nianShou.draw(g);
        coin.draw(g);

        // 绘制游戏得分
        g.setColor(Color.WHITE);
        g.drawString("Score: " + score, 10, 20);
    }

    // 游戏更新
    @Override
    public void actionPerformed(ActionEvent e) {
        // 更新游戏角色的位置
        player.update();
        nianShou.update();
        coin.update();

        // 检测游戏角色之间的碰撞
        if (player.intersects(nianShou)) {
            // 玩家被年兽攻击,游戏结束
            timer.stop();
            JOptionPane.showMessageDialog(this, "Game Over!");
        } else if (player.intersects(coin)) {
            // 玩家拾取金币,得分增加
            score++;
        }

        // 重新绘制游戏界面
        repaint();
    }

    // 键盘监听器
    @Override
    public void keyPressed(KeyEvent e) {
        // 根据键盘按键控制玩家移动
        switch (e.getKeyCode()) {
            case KeyEvent.VK_UP:
                player.moveUp();
                break;
            case KeyEvent.VK_DOWN:
                player.moveDown();
                break;
            case KeyEvent.VK_LEFT:
                player.moveLeft();
                break;
            case KeyEvent.VK_RIGHT:
                player.moveRight();
                break;
        }
    }

    @Override
    public void keyReleased(KeyEvent e) {
        // 当键盘按键松开时,玩家停止移动
        player.stop();
    }

    @Override
    public void keyTyped(KeyEvent e) {
    }

    // 主函数
    public static void main(String[] args) {
        // 创建游戏窗口
        JFrame frame = new JFrame("年兽大作战");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);

        // 将游戏面板添加到游戏窗口中
        frame.getContentPane().add(new NianShouDaZhan());

        // 设置游戏窗口的大小和位置
        frame.pack();
        frame.setLocationRelativeTo(null);

        // 显示游戏窗口
        frame.setVisible(true);
    }

}

// 玩家类
class Player {

    // 玩家属性
    private int x;
    private int y;
    private int width;
    private int height;
    private Color color;
    private int speed;

    // 构造函数
    public Player() {
        x = 400;
        y = 300;
        width = 20;
        height = 20;
        color = Color.RED;
        speed = 5;
    }

    // 绘制玩家
    public void draw(Graphics g) {
        g.setColor(color);
        g.fillRect(x, y, width, height);
    }

    // 更新玩家位置
    public void update() {
        // 根据玩家的移动方向更新玩家的位置
        switch (direction) {
            case UP:
                y -= speed;
                break;
            case DOWN:
                y += speed;
                break;
            case LEFT:
                x -= speed;
                break;
            case RIGHT:
                x += speed;
                break;
        }

        // 检测玩家是否已经到达游戏界面的边界
        if (x < 0) {
            x = 0;
        } else if (x > 800 - width) {
            x = 800 - width;
        }

        if (y < 0) {
            y = 0;
        } else if (y > 600 - height) {
            y = 600 - height;
        }
    }

}

// 年兽类
class NianShou {

    // 年兽属性
    private int x;
    private int y;
    private int width;
    private int height;
    private Color color;
    private int speed;
    private int direction;

    // 构造函数
    public NianShou() {
        x = 0;
        y = 0;
        width = 40;
        height = 40;
        color = Color.GREEN;
        speed = 3;
        direction = 1; // 1表示向右,-1表示向左
    }

    // 绘制年兽
    public void draw(Graphics g) {
        g.setColor(color);
        g.fillRect(x, y, width, height);
    }

    // 更新年兽位置
    public void update() {
        // 根据年兽的移动方向更新年兽的位置
        switch (direction) {
            case 1:
                x += speed;
                if (x > 800 - width) {
                    direction = -1;
                }
                break;
            case -1:
                x -= speed;
                if (x < 0) {
                    direction = 1;
                }
                break;
        }
    }

}

// 金币类
class Coin {

    // 金币属性
    private int x;
    private int y;
    private int width;
    private int height;
    private Color color;

    // 构造函数
    public Coin() {
        x = (int) (Math.random() * 800);
        y = (int) (Math.random() * 600);
        width = 20;
        height = 20;
        color = Color.YELLOW;
    }

    // 绘制金币
    public void draw(Graphics g) {
        g.setColor(color);
        g.fillOval(x, y, width, height);
    }

    // 更新金币位置
    public void update() {
        // 随机生成金币的位置
        if (Math.random() < 0.01) {
            x = (int) (Math.random() * 800);
            y = (int) (Math.random() * 600);
        }
    }

}

常见问题解答

  1. 如何控制玩家移动?

使用方向键(上、下、左、右)来控制玩家移动。

  1. 如何拾取金币?

当玩家的小人与金币重叠时,即可拾取金币。

  1. 如何增加游戏难度?

可以通过增加年兽的速度或减少玩家的血量来增加游戏难度。

  1. 游戏结束的条件是什么?

当玩家的血量归零时,游戏结束。

  1. 如何获得更高的分数?

通过拾取金币可以增加分数。每次拾取一枚金币,分数加 1。