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

·可以直接编译运行代码

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐