返回
通俗易懂的Java代码,让你感受不一样的年兽大作战!
后端
2023-11-07 15:42:58
春节喜迎编程乐:年兽大作战游戏指南
开篇寄语
春节临近,万家灯火通明,年兽的传说也随之而来。相传年兽凶猛残暴,每逢岁末便会下山祸害人间。为了驱赶年兽,人们张贴门神、燃放鞭炮,以期辟邪除祟。然而,在科技飞速发展的今天,我们不妨用编程的方式来驱赶年兽,体验别样的春节乐趣。
年兽大作战游戏规则
本游戏旨在让玩家通过编程来躲避年兽的攻击,收集金币,增强自身能力,最终击败年兽。
- 玩家控制一个小人,在屏幕上躲避年兽的攻击,同时收集金币。
- 年兽会从屏幕的两侧随机出现,并向玩家发动攻击。
- 玩家可以通过上下左右移动来躲避年兽的攻击。
- 玩家也可以通过拾取金币来增强自己的能力,比如增加血量或攻击力。
- 当玩家的血量归零时,游戏结束。
代码示例
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。