跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
PythonAI算法

基于 Python 的三角洲行动战术小队模拟器

综述由AI生成本项目是一个基于 Python 面向对象编程实现的文本战术模拟游戏。它模拟了特种部队小队执行高风险任务的场景,包含突击、狙击、医疗、工程四种兵种,每种兵种配备专属武器与技能。游戏采用回合制机制,玩家需指挥队员移动、攻击或治疗,同时应对敌人的智能追击。任务目标涉及消灭敌人和营救关键人员,通过状态管理与随机事件生成战斗结果。代码结构清晰,适合作为 Python 基础语法与逻辑设计的实战案例。

月光旅人发布于 2026/3/22更新于 2026/5/24 浏览
基于 Python 的三角洲行动战术小队模拟器

基于 Python 的三角洲行动战术小队模拟器

今天分享一个用 Python 实现的简易战术小队模拟器。这个项目通过面向对象编程(OOP)模拟了特种作战中的兵种配合与回合制战斗逻辑,适合用来练习类设计、状态管理和随机事件处理。

核心设计思路

我们首先定义了兵种枚举,这样能清晰区分突击、狙击、医疗和工程角色。每个士兵都携带特定武器,属性包括血量、体力和位置。敌人拥有简单的寻路攻击逻辑,而玩家需要在回合内指挥小队移动、射击或治疗。

import random
import time
import sys
from enum import Enum

class SoldierClass(Enum):
    ASSAULT = "突击兵"
    SNIPER = "狙击手"
    MEDIC = "医疗兵"
    ENGINEER = "工程师"

class Weapon:
    def __init__(self, name, damage, accuracy, fire_rate):
        self.name = name
        self.damage = damage
        self.accuracy = accuracy
        self.fire_rate = fire_rate
    
    def __str__(self):
        return f"{self.name} (伤害:{self.damage} 精度:{self.accuracy}% 射速:{self.fire_rate})"

class Soldier:
    def __init__(self, name, soldier_class):
        self.name = name
        self.soldier_class = soldier_class
        self.health = 100
        self.stamina = 100
        self.position = (0, 0)
        self.weapon = self._assign_weapon()
        self.alive = True
    
    def _assign_weapon(self):
        if self.soldier_class == SoldierClass.ASSAULT:
            return Weapon("HK416 突击步枪", 25, 75, 800)
        elif self.soldier_class == SoldierClass.SNIPER:
            return Weapon("M24 狙击步枪", 95, 98, 40)
        elif self.soldier_class == SoldierClass.MEDIC:
            return Weapon("MP5 冲锋枪", 20, 70, 900)
        elif self.soldier_class == SoldierClass.ENGINEER:
            return Weapon("M4A1 卡宾枪", 30, 80, 700)
    
    def move(self, x, y):
        if self.stamina > 20:
            self.position = (x, y)
            self.stamina -= 15
            print(f"{self.name} 移动到位置 ({x}, {y})")
            return True
        else:
            print(f"{self.name} 体力不足!")
            return False
    
    def attack(self, target):
        if random.randint(0, 100) < self.weapon.accuracy:
            damage = random.randint(self.weapon.damage - 5, self.weapon.damage + 5)
            target.health -= damage
            print(f"🎯 {self.name} 使用 {self.weapon.name} 命中目标!造成 {damage} 点伤害")
            return damage
        else:
            print(f"💥 {self.name} 射击未命中!")
            return 0
    
    def heal(self, target):
        if self.soldier_class == SoldierClass.MEDIC:
            heal_amount = random.randint(20, 40)
            target.health = min(100, target.health + heal_amount)
            print(f"🩺 {self.name} 治疗了 {target.name}! 恢复 {heal_amount} 点生命值")
            return heal_amount
        else:
            print(f"⚠️ {self.name} 不是医疗兵!")
            return 0
    
    def is_alive(self):
        return self.health > 0

class Enemy:
    def __init__(self, enemy_type, position):
        self.enemy_type = enemy_type
        self.health = 80 if enemy_type == "步兵" else 120
        self.position = position
        self.alive = True
    
    def attack(self, target):
        damage = random.randint(15, 30)
        target.health -= damage
        print(f"💥 敌人{self.enemy_type}攻击了{target.name}! 造成 {damage} 点伤害")
        return damage
    
    def is_alive(self):
        return self.health > 0

class Mission:
    def __init__(self, name, description, objectives):
        self.name = name
        self.description = description
        self.objectives = objectives
        self.completed = False
    
    def check_completion(self, squad, enemies):
        for obj in self.objectives:
            if not obj["completed"]:
                if obj["type"] == "eliminate" and len(enemies) == 0:
                    obj["completed"] = True
                elif obj["type"] == "rescue" and obj["completed"]:
                    continue
        return all(obj["completed"] for obj in self.objectives)

def slow_print(text, delay=0.03):
    for char in text:
        sys.stdout.write(char)
        sys.stdout.flush()
        time.sleep(delay)
    print()

def display_map(squad, enemies, objective_pos):
    print("\n战场地图:")
    print("  y")
    print("  ↑")
    
    for y in range(10, -1, -1):
        line = f"{y:2d} "
        for x in range(0, 11):
            soldier_here = any(s.position == (x, y) for s in squad)
            enemy_here = any(e.position == (x, y) for e in enemies)
            obj_here = objective_pos == (x, y)
            
            if soldier_here:
                line += "S "
            elif enemy_here:
                line += "E "
            elif obj_here:
                line += "O "
            else:
                line += ". "
        print(line)
    
    print("   ,")
    for x in range(0, 11):
        print(f"{x:2d}",)
    print(" → x")

def main():
    slow_print("="*50)
    slow_print("🔥 三角洲行动:Python 战术小队模拟器 🔥")
    slow_print("="*50)
    slow_print("你将指挥一支 4 人特种小队执行高风险任务")
    slow_print("选择你的队员,制定战术,完成任务!")
    
    squad = [
        Soldier("幽灵", SoldierClass.ASSAULT),
        Soldier("鹰眼", SoldierClass.SNIPER),
        Soldier("天使", SoldierClass.MEDIC),
        Soldier("技师", SoldierClass.ENGINEER)
    ]
    
    slow_print("\n你的小队成员:")
    for soldier in squad:
        slow_print(f"▶ {soldier.name} - {soldier.soldier_class.value} 武器:{soldier.weapon}")
    
    mission = Mission(
        "黑鹰坠落",
        "在摩加迪沙市区营救被击落的黑鹰直升机机组人员",
        [
            {"type": "eliminate", "description": "消灭所有敌人", "completed": False},
            {"type": "rescue", "description": "营救飞行员", "completed": False}
        ]
    )
    
    slow_print(f"\n任务简报:{mission.name}")
    slow_print(f"任务描述:{mission.description}")
    slow_print("任务目标:")
    for obj in mission.objectives:
        slow_print(f" - {obj['description']}")
    
    enemies = [
        Enemy("步兵", (3, 4)),
        Enemy("步兵", (5, 6)),
        Enemy("机枪手", (7, 3)),
        Enemy("狙击手", (2, 8))
    ]
    
    pilot_position = (8, 8)
    pilot_rescued = False
    
    turn = 1
    slow_print("\n行动开始!按回车继续...")
    input()
    
    while any(s.is_alive() for s in squad) and any(e.is_alive() for e in enemies) and not mission.completed:
        print(f"\n=== 回合 {turn} ===")
        
        display_map(squad, enemies, pilot_position)
        
        for soldier in squad:
            if not soldier.is_alive():
                continue
                
            print(f"\n{soldier.name}的行动 ({soldier.soldier_class.value} | ♥{soldier.health} | ✨{soldier.stamina})")
            print("1. 移动")
            print("2. 攻击")
            if soldier.soldier_class == SoldierClass.MEDIC:
                print("3. 治疗队友")
            print("4. 查看状态")
            
            choice = input("选择行动:")
            
            if choice == "1":
                try:
                    x = int(input("输入目标 X 坐标 (0-10): "))
                    y = int(input("输入目标 Y 坐标 (0-10): "))
                    if 0 <= x <= 10 and 0 <= y <= 10:
                        soldier.move(x, y)
                        
                        if soldier.position == pilot_position and not pilot_rescued:
                            pilot_rescued = True
                            slow_print(f"\n⭐ {soldier.name} 找到了飞行员!任务完成一半!")
                            mission.objectives[1]["completed"] = True
                    else:
                        print("坐标超出范围!")
                except ValueError:
                    print("请输入有效坐标!")
            
            elif choice == "2":
                visible_enemies = [e for e in enemies if  
                                  abs(e.position[0] - soldier.position[0]) <= 3 and  
                                  abs(e.position[1] - soldier.position[1]) <= 3 and  
                                  e.is_alive()]
                
                if visible_enemies:
                    print("可攻击目标:")
                    for i, enemy in enumerate(visible_enemies):
                        print(f"{i+1}. {enemy.enemy_type} 位置:{enemy.position} 生命:{enemy.health}")
                    
                    try:
                        target_idx = int(input("选择目标:")) - 1
                        if 0 <= target_idx < len(visible_enemies):
                            soldier.attack(visible_enemies[target_idx])
                            
                            if not visible_enemies[target_idx].is_alive():
                                enemies.remove(visible_enemies[target_idx])
                                slow_print(f"✅ 敌人{visible_enemies[target_idx].enemy_type}被消灭!")
                        else:
                            print("无效目标!")
                    except ValueError:
                        print("请输入有效数字!")
                else:
                    print("没有可见目标!")
            
            elif choice == "3" and soldier.soldier_class == SoldierClass.MEDIC:
                injured = [s for s in squad if s != soldier and s.is_alive() and s.health < 80]
                
                if injured:
                    print("可治疗队友:")
                    for i, mate in enumerate(injured):
                        print(f"{i+1}. {mate.name} 生命:{mate.health}")
                    
                    try:
                        target_idx = int(input("选择队友:")) - 1
                        if 0 <= target_idx < len(injured):
                            soldier.heal(injured[target_idx])
                        else:
                            print("无效选择!")
                    except ValueError:
                        print("请输入有效数字!")
                else:
                    print("没有需要治疗的队友!")
            
            elif choice == "4":
                print(f"{soldier.name} 状态:")
                print(f"兵种:{soldier.soldier_class.value}")
                print(f"生命:{soldier.health}")
                print(f"体力:{soldier.stamina}")
                print(f"位置:{soldier.position}")
                print(f"武器:{soldier.weapon}")
            else:
                print("无效选择!跳过行动")
        
        for enemy in enemies:
            if not enemy.is_alive():
                continue
                
            closest_soldier = None
            min_distance = float('inf')
            
            for soldier in squad:
                if soldier.is_alive():
                    distance = abs(soldier.position[0] - enemy.position[0]) + abs(soldier.position[1] - enemy.position[1])
                    if distance < min_distance:
                        min_distance = distance
                        closest_soldier = soldier
            
            if min_distance <= 4 and closest_soldier:
                enemy.attack(closest_soldier)
                
                if not closest_soldier.is_alive():
                    slow_print(f"⚰️ {closest_soldier.name} 阵亡!")
        
        for soldier in squad:
            if soldier.is_alive():
                soldier.stamina = min(100, soldier.stamina + 10)
        
        mission.completed = mission.check_completion(squad, enemies)
        turn += 1
        
        if any(s.is_alive() for s in squad) and mission.completed:
            slow_print("\n🎉 任务完成!所有目标达成!")
            slow_print("你的小队成功撤离!")
            break
        elif not any(s.is_alive() for s in squad):
            slow_print("\n💀 任务失败!你的小队全军覆没...")
            break
    
    slow_print("\n游戏结束")
    slow_print("感谢游玩三角洲行动:Python 战术小队模拟器")

if __name__ == "__main__":
    main()

运行体验

代码保存为 .py 文件后直接运行即可。控制台会显示打字机效果的游戏标题,随后进入回合制交互界面。你可以看到实时更新的战场地图,根据坐标指令控制小队行动。注意观察体力条,合理分配移动与战斗资源。

这个示例展示了如何用基础语法构建复杂的状态流转,对于理解游戏循环和对象协作很有帮助。

目录

  1. 基于 Python 的三角洲行动战术小队模拟器
  2. 核心设计思路
  3. 运行体验
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Python 使用 json-repair 修复大模型返回的异常 JSON
  • C++ explicit 关键字:防止隐式类型转换
  • 滑动窗口算法详解:水果成篮问题
  • 归并排序实战:计算右侧小于当前元素个数与翻转对
  • 归并排序与数组逆序对:分治算法实战解析
  • 二分查找应用:寻找旋转排序数组最小值与缺失数字
  • Spring Boot 集成 Neo4j 图数据库实战教程
  • DeepSeek-R1 大模型基于 MS-Swift 框架的部署与微调实践
  • 递归算法实战:汉诺塔与合并有序链表
  • Flutter for OpenHarmony:基于 dart_openai 集成 AIGC 大模型实战
  • Vercel Labs Skills:AI 编程代理技能管理 CLI 工具
  • OpenClaw 技术解析:AI 智能体的能力、局限与安全隐忧
  • 算法实战:位运算解决字符唯一性与丢失数字问题
  • Android App 性能优化核心实践:稳定、流畅与省电
  • 2026 年 Python+AI 入门指南:从零基础到实操落地,避开新手常见坑
  • Docker 国内镜像源大全及配置方案
  • 大模型产品经理转型指南:从零开始的全面路径
  • Stable Diffusion 模型自动下载与 Docker 部署指南
  • Stable Diffusion WebUI 模型下载插件使用指南
  • 终身机器人学习基准测试平台 LIBERO 详解

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online