三角洲行动-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运行环境

·可以直接编译运行代码

相关推荐
i***279516 小时前
Spring boot 3.3.1 官方文档 中文
java·数据库·spring boot
zhengzizhe16 小时前
LangGraph4j LangChain4j JAVA 多Agent编排详解
java·后端
重整旗鼓~16 小时前
3.会话功能-AiServices工具类
java·语言模型·langchain
代码不停16 小时前
Java单链表和哈希表题目练习
java·开发语言·散列表
Dxxyyyy16 小时前
零基础学JAVA--Day37(坦克大战1.0)
java·开发语言
OranTech17 小时前
第28节课-夕夕超市收银系统(下)-笔记
java
IDOlaoluo17 小时前
jakarta-tomcat-connectors-jk2-src.tar.gz 安装教程(详细步骤及附安装包)
java·tomcat
SheepHappy17 小时前
MyBatis-Plus 源码阅读(三)条件构造器原理深度剖析
java·源码阅读
zhaomy202517 小时前
从ThreadLocal到ScopedValue:Java上下文管理的架构演进与实战指南
java·后端
用户849137175471617 小时前
从源码看设计:Java 集合框架的安全性与性能权衡 (基于 JDK 1.8)
java·面试