当前位置: 首页 > news >正文

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

·可以直接编译运行代码

http://www.dtcms.com/a/577944.html

相关文章:

  • 清晰地说明 NVM、NPM 和 NRM 在 Node.js 开发过程中的作用
  • Java IDEA学习之路:第七、八周课程笔记归纳
  • Vue2 首屏加载慢打包优化的详细记录
  • 【AI应用探索】-LLaMA-Factory微调模型
  • 最有效的网站推广方案企业网站管理系统怎么用
  • linux系统如何做网站小程序会员系统怎么做
  • 网站建设费用福州建设工程招投标信息网
  • 使用 llama.cpp 在本地高效运行大语言模型,支持 Docker 一键启动,兼容CPU与GPU
  • MTPA-最大转矩电流比控制解析
  • 【BUG调查日记】用于压测的机器人进程内存压不住且脱离分配器的管理
  • wordpress 招聘类网站郑州网站制作工作室
  • php可以做视频网站吗搜索网站怎么做
  • 什么是3D贴纸SDK?
  • Kafka系列之:生产环境替换kafka集群机器详细方案
  • 颠覆知识工作流:谷歌NotebookLM的“疯狂”用法与深度洞察
  • 基于LLM+SearxNG的实时网络搜索agent
  • FPC回流焊治具过炉托盘核心作用及设计要点
  • 移动云网站建设钓鱼网站图片
  • C++笔记——STL list
  • 前端技术方案博客文档汇总
  • 校园跑腿配送系统搭建:从0到1的完整解决方案
  • 蓝牙钥匙 第52次 深入解析安全启动与可信执行环境:从硬件根基到系统安全
  • Docker 自动化管理脚本大全
  • LangFlow 源码分析:Trace 追踪机制核心问题与解决方案
  • SpringBoot+Vue3全栈开发笔记后端部分
  • 网站服务器模式温江 网站建设
  • it人必看的网站网站开发招聘年薪
  • 安卓基础之《(1)—简介》
  • 面试题剖析:android全局触摸事件的前世与今生InputMonitor/SpyWindow
  • 【HarmonyOS-北向开发(软件)】