三角洲行动-java游戏程序

作者:程序编程- Java日期:2025/11/10

以下是一个简化版的三角洲行动游戏程序,使用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运行环境

·可以直接编译运行代码


三角洲行动-java游戏程序》 是转载文章,点击查看原文


相关推荐


跨平台游戏引擎 Axmol-2.9.1 发布
一线灵2025/11/8

Axmol 2.9.1 版本是一个以错误修复和功能改进为主的次要 LTS 长期支持版本,发布时间: 2025 年 11 月 2 日 🙏感谢所有对 axmol 项目的贡献者,包括财务赞助者:@scorewarrior(公司)、@peterkharitonov、@duong、@thienphuoc、@bingsoo、@asnagni、@paulocoutinhox 以及 历史赞助者 🙏我们衷心感谢 @scorewarrior(公司) 的鼎力支持——他们在 GitHub Sponsors 追加


C#.NET MemoryCache 深入解析:本地缓存机制与最佳实践
唐青枫2025/11/6

简介 在许多应用程序中,缓存是提升性能的常见方法,尤其是在访问频繁且不经常变化的数据时。MemoryCache 是 .NET 提供的一个内存缓存实现,它允许在内存中存储数据,以减少对数据库、文件系统或其他远程服务的访问,进而提升系统响应速度。 MemoryCache 的核心优势是: 高效:内存操作非常快速,适合用于缓存短期有效的数据。 轻量:它是一个线程安全的缓存系统,且易于在 .NET 应用中配置和使用。 灵活:支持过期时间、优先级设置等多种功能,能够满足大多数缓存需求。 核心


Agent ReAct and Loop
mCell2025/11/1

同步至个人站点:Agent ReAct and Loop Agent ReAct and Loop 我一直在使用 ChatGPT 或通义千问这样的 AI 工具,它们很强大,但多数情况下都是“一问一答”。我提一个问题,它给一个答案。 但我注意到,像 Manus 或 Claude Code CLI 这样的“Agent”(智能体)产品,它们似乎可以自动执行任务。你给它一个目标,它会自己去调用工具、分析结果、继续下一步,直到任务完成。 这到底是怎么做到的?它如何摆脱“一问一答”的限制,实现自动循环?


【STM32】看门狗
IT阳晨。2025/10/30

目录 一、独立看门狗1. IWDG简介2. IWDG工作原理及框图3. IWDG寄存器及函数介绍4. IWDG溢出时间计算5. IWDG配置步骤6. 小实验:独立看门狗喂狗实验 二、窗口看门狗1. WWDG简介2. WWDG工作原理及框图3. WWDG寄存器及函数介绍4. WWDG溢出时间计算5. WWDG配置步骤6. 小实验:窗口看门狗喂狗实验 一、独立看门狗 1. IWDG简介 独立看门狗(Independent Watchdog,通常缩写为IWDG)主要作用是主要用于检


C语言<<超全.超重要>>知识点总结
richxu202510012025/10/27

C语言<<超全.超重要>>知识点总结 #嵌入式[话题]# #电子信息[话题]# #单片机[话题]# #stm32[话题]# #校招[话题]# #秋招[话题]#


GitHub 热榜项目 - 日榜(2025-10-21)
CoderJia_2025/10/24

GitHub 热榜项目 - 日榜(2025-10-21) 生成于:2025-10-21 统计摘要 共发现热门项目:20 个 榜单类型:日榜 本期热点趋势总结 基于本期GitHub热榜项目,AI与机器学习生态系统呈现强劲发展势头,成为技术创新的核心驱动力。Claude cookbooks、系统提示词收集项目和开源NotebookLM实现等AI工具类项目表现突出,体现了大模型应用的快速普及和开发者对AI工程实践的强烈需求。同时,机器人学习框架LeRobot、OCR工具PaddleO


Python 的内置函数 callable
IMPYLH2025/10/22

Python 内建函数列表 > Python 的内置函数 callable def callable(obj): ''' 判断对象是否可调用 :param obj: 一个代对象 :return: 如果 obj 可以调用则返回 True,否则返回 False ''' Python 的内置函数 callable() 用于检查一个对象是否可以被调用(即该对象是否能像函数一样被调用)。该函数返回一个布尔值,如果对象是可调用的则返回 True,否则返回 Fa


第5部分:Netty性能优化与调优策略
lpfasd1232025/10/21

第5部分:Netty性能优化与调优策略 5.1 参数调优 线程数调优 1. EventLoopGroup线程数配置 public class ThreadOptimization { public void configureThreads() { // 获取CPU核心数 int cpuCores = Runtime.getRuntime().availableProcessors(); // Boss线程组:通常1个即可


如何将 iPhone 联系人同步到 Mac
Digitally2025/10/20

将 iPhone 联系人同步到 Mac 有许多好处。也许你换了新手机,想保留联系人列表,或者你只是想在使用 Mac 时访问 iPhone 联系人。听起来可能有些麻烦,但实际上同步联系人非常简单。使用苹果产品的一大好处是它们能够无缝协作。你的 iPhone 和 Mac 可以轻松共享数据,包括联系人。在这篇指南中,我们将向你介绍 6 种将 iPhone 联系人同步到 Mac 的简单方法。让我们开始吧! 方法 1:如何使用 iReaShare iPhone Manager 将 iPhone 联系


Java kubernetes
自由的疯2025/10/19

Kubernetes,通常简称为 K8s,是一个开源的容器编排平台,用于自动化容器化应用的部署、管理和扩展。Kubernetes 最初由 Google 的工程师设计开发,并于2014年开源,随后在2015年捐赠给云原生计算基金会(CNCF)。Kubernetes 的设计基于 Google 在内部使用的大规模容器管理系统 Borg 的经验和教训。 Kubernetes 的主要功能 自动化部署和回滚:Kubernetes 可以自动部署应用程序,并在检测到问题时自动回滚到之前的稳定版本。 自我修复:

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0