三角洲行动-java游戏程序

以下是一个简化版的三角洲行动游戏程序,使用Java编写。

import java.awt.*;

import java.awt.event.*;

import java.util.ArrayList;

import java.util.Random;

import javax.swing.*;

public class DeltaForceAction extends JPanel implements ActionListener, KeyListener {

private static final int WIDTH = 800;

private static final int HEIGHT = 600;

private static final int PLAYER_SIZE = 30;

private static final int ENEMY_SIZE = 25;

private static final int BULLET_SIZE = 5;

private static final int PLAYER_SPEED = 5;

private static final int BULLET_SPEED = 10;

private Timer timer;

private Player player;

private ArrayList<Enemy> enemies;

private ArrayList<Bullet> bullets;

private Random random;

private int score;

private boolean gameOver;

public DeltaForceAction() {

setPreferredSize(new Dimension(WIDTH, HEIGHT));

setBackground(Color.BLACK);

setFocusable(true);

addKeyListener(this);

random = new Random();

player = new Player(WIDTH / 2, HEIGHT - 50);

enemies = new ArrayList<>();

bullets = new ArrayList<>();

score = 0;

gameOver = false;

// 初始化敌人

for (int i = 0; i < 5; i++) {

spawnEnemy();

}

timer = new Timer(30, this);

timer.start();

}

private void spawnEnemy() {

int x = random.nextInt(WIDTH - ENEMY_SIZE);

int y = random.nextInt(HEIGHT / 2);

enemies.add(new Enemy(x, y));

}

@Override

protected void paintComponent(Graphics g) {

super.paintComponent(g);

// 绘制玩家

g.setColor(Color.GREEN);

g.fillRect(player.x, player.y, PLAYER_SIZE, PLAYER_SIZE);

// 绘制敌人

g.setColor(Color.RED);

for (Enemy enemy : enemies) {

g.fillRect(enemy.x, enemy.y, ENEMY_SIZE, ENEMY_SIZE);

}

// 绘制子弹

g.setColor(Color.YELLOW);

for (Bullet bullet : bullets) {

g.fillRect(bullet.x, bullet.y, BULLET_SIZE, BULLET_SIZE);

}

// 绘制分数

g.setColor(Color.WHITE);

g.drawString("分数: " + score, 10, 20);

// 游戏结束显示

if (gameOver) {

g.setColor(Color.RED);

g.setFont(new Font("Arial", Font.BOLD, 36));

g.drawString("游戏结束!", WIDTH / 2 - 100, HEIGHT / 2);

g.setFont(new Font("Arial", Font.PLAIN, 18));

g.drawString("最终分数: " + score, WIDTH / 2 - 60, HEIGHT / 2 + 40);

g.drawString("按R键重新开始", WIDTH / 2 - 70, HEIGHT / 2 + 70);

}

}

@Override

public void actionPerformed(ActionEvent e) {

if (!gameOver) {

// 更新子弹位置

for (int i = bullets.size() - 1; i >= 0; i--) {

Bullet bullet = bullets.get(i);

bullet.y += bullet.dy;

// 移除超出屏幕的子弹

if (bullet.y < 0 || bullet.y > HEIGHT) {

bullets.remove(i);

continue;

}

// 检测子弹与敌人的碰撞

for (int j = enemies.size() - 1; j >= 0; j--) {

Enemy enemy = enemies.get(j);

if (bullet.intersects(enemy)) {

bullets.remove(i);

enemies.remove(j);

score += 10;

spawnEnemy();

break;

}

}

}

// 更新敌人位置

for (Enemy enemy : enemies) {

enemy.move();

// 检测敌人与玩家的碰撞

if (enemy.intersects(player)) {

gameOver = true;

break;

}

// 敌人随机射击

if (random.nextInt(100) < 1) {

bullets.add(new Bullet(enemy.x + ENEMY_SIZE / 2, enemy.y + ENEMY_SIZE, 0, BULLET_SPEED));

}

}

// 检测子弹与玩家的碰撞

for (int i = bullets.size() - 1; i >= 0; i--) {

Bullet bullet = bullets.get(i);

if (bullet.dy > 0 && bullet.intersects(player)) {

gameOver = true;

break;

}

}

}

repaint();

}

@Override

public void keyPressed(KeyEvent e) {

if (gameOver) {

if (e.getKeyCode() == KeyEvent.VK_R) {

// 重新开始游戏

player = new Player(WIDTH / 2, HEIGHT - 50);

enemies.clear();

bullets.clear();

score = 0;

gameOver = false;

for (int i = 0; i < 5; i++) {

spawnEnemy();

}

}

return;

}

switch (e.getKeyCode()) {

case KeyEvent.VK_LEFT:

player.x = Math.max(0, player.x - PLAYER_SPEED);

break;

case KeyEvent.VK_RIGHT:

player.x = Math.min(WIDTH - PLAYER_SIZE, player.x + PLAYER_SPEED);

break;

case KeyEvent.VK_UP:

player.y = Math.max(0, player.y - PLAYER_SPEED);

break;

case KeyEvent.VK_DOWN:

player.y = Math.min(HEIGHT - PLAYER_SIZE, player.y + PLAYER_SPEED);

break;

case KeyEvent.VK_SPACE:

bullets.add(new Bullet(player.x + PLAYER_SIZE / 2, player.y, 0, -BULLET_SPEED));

break;

}

}

@Override

public void keyReleased(KeyEvent e) {}

@Override

public void keyTyped(KeyEvent e) {}

// 玩家类

class Player {

int x, y;

Player(int x, int y) {

this.x = x;

this.y = y;

}

}

// 敌人类

class Enemy {

int x, y;

int dx, dy;

Enemy(int x, int y) {

this.x = x;

this.y = y;

this.dx = random.nextInt(3) - 1; // -1, 0, 1

this.dy = random.nextInt(2); // 0, 1

}

void move() {

x += dx;

y += dy;

// 边界检测

if (x < 0 || x > WIDTH - ENEMY_SIZE) {

dx = -dx;

}

if (y < 0 || y > HEIGHT / 2) {

dy = -dy;

}

}

boolean intersects(Player player) {

return x < player.x + PLAYER_SIZE &&

x + ENEMY_SIZE > player.x &&

y < player.y + PLAYER_SIZE &&

y + ENEMY_SIZE > player.y;

}

}

// 子弹类

class Bullet {

int x, y;

int dx, dy;

Bullet(int x, int y, int dx, int dy) {

this.x = x;

this.y = y;

this.dx = dx;

this.dy = dy;

}

boolean intersects(Enemy enemy) {

return x < enemy.x + ENEMY_SIZE &&

x + BULLET_SIZE > enemy.x &&

y < enemy.y + ENEMY_SIZE &&

y + BULLET_SIZE > enemy.y;

}

boolean intersects(Player player) {

return x < player.x + PLAYER_SIZE &&

x + BULLET_SIZE > player.x &&

y < player.y + PLAYER_SIZE &&

y + BULLET_SIZE > player.y;

}

}

public static void main(String[] args) {

JFrame frame = new JFrame("三角洲行动");

DeltaForceAction game = new DeltaForceAction();

frame.add(game);

frame.pack();

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

}

运行要求:

·需要java运行环境

·可以直接编译运行代码

相关推荐
陈佳梁2 小时前
构造器(详解)
java·开发语言
麦烤楽鸡翅2 小时前
【模板】二维前缀和 (牛客)
java·c++·算法·秋招·春招·二维前缀和·面试算法题
Mos_x2 小时前
集成RabbitMQ+MQ常用操作
java·后端
white-persist3 小时前
汇编代码详细解释:汇编语言如何转化为对应的C语言,怎么转化为对应的C代码?
java·c语言·前端·网络·汇编·安全·网络安全
程序员阿达3 小时前
开题报告之基于SpringBoot框架的图书借阅系统的设计与实现
java·spring boot·后端
Eoch773 小时前
吃透 Java 核心技术:JVM 调优、并发安全、微服务开发,解决 90% 企业级场景问题
java·后端
yaoxin5211234 小时前
229. Java 集合 - 操作集合中的多个元素(批量操作)
java·开发语言·python
C++chaofan4 小时前
MyBatis - Plus学习笔记
java·spring boot·笔记·后端·mysql·架构·mybatis
HSJ01704 小时前
Aviator中使用BigDecimal进行高精度计算
java·开发语言·bigdecimal·aviator