python三角洲行动!
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()