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 =
():
.soldier_class == SoldierClass.ASSAULT:
Weapon(, , , )
.soldier_class == SoldierClass.SNIPER:
Weapon(, , , )
.soldier_class == SoldierClass.MEDIC:
Weapon(, , , )
.soldier_class == SoldierClass.ENGINEER:
Weapon(, , , )
():
.stamina > :
.position = (x, y)
.stamina -=
()
:
()
():
random.randint(, ) < .weapon.accuracy:
damage = random.randint(.weapon.damage - , .weapon.damage + )
target.health -= damage
()
damage
:
()
():
.soldier_class == SoldierClass.MEDIC:
heal_amount = random.randint(, )
target.health = (, target.health + heal_amount)
()
heal_amount
:
()
():
.health >
:
():
.enemy_type = enemy_type
.health = enemy_type ==
.position = position
.alive =
():
damage = random.randint(, )
target.health -= damage
()
damage
():
.health >
:
():
.name = name
.description = description
.objectives = objectives
.completed =
():
obj .objectives:
obj[]:
obj[] == (enemies) == :
obj[] =
obj[] == obj[]:
(obj[] obj .objectives)
():
char text:
sys.stdout.write(char)
sys.stdout.flush()
time.sleep(delay)
()
():
()
()
()
y (, -, -):
line =
x (, ):
soldier_here = (s.position == (x, y) s squad)
enemy_here = (e.position == (x, y) e enemies)
obj_here = objective_pos == (x, y)
soldier_here:
line +=
enemy_here:
line +=
obj_here:
line +=
:
line +=
(line)
(, end=)
x (, ):
(, end=)
()
():
slow_print(*)
slow_print()
slow_print(*)
slow_print()
slow_print()
squad = [
Soldier(, SoldierClass.ASSAULT),
Soldier(, SoldierClass.SNIPER),
Soldier(, SoldierClass.MEDIC),
Soldier(, SoldierClass.ENGINEER)
]
slow_print()
soldier squad:
slow_print()
mission = Mission(
,
,
[
{: , : , : },
{: , : , : }
]
)
slow_print()
slow_print()
slow_print()
obj mission.objectives:
slow_print()
enemies = [
Enemy(, (, )),
Enemy(, (, )),
Enemy(, (, )),
Enemy(, (, ))
]
pilot_position = (, )
pilot_rescued =
turn =
slow_print()
()
(s.is_alive() s squad) (e.is_alive() e enemies) mission.completed:
()
display_map(squad, enemies, pilot_position)
soldier squad:
soldier.is_alive():
()
()
()
soldier.soldier_class == SoldierClass.MEDIC:
()
()
choice = ()
choice == :
:
x = (())
y = (())
<= x <= <= y <= :
soldier.move(x, y)
soldier.position == pilot_position pilot_rescued:
pilot_rescued =
slow_print()
mission.objectives[][] =
:
()
ValueError:
()
choice == :
visible_enemies = [e e enemies
(e.position[] - soldier.position[]) <=
(e.position[] - soldier.position[]) <=
e.is_alive()]
visible_enemies:
()
i, enemy (visible_enemies):
()
:
target_idx = (()) -
<= target_idx < (visible_enemies):
soldier.attack(visible_enemies[target_idx])
visible_enemies[target_idx].is_alive():
enemies.remove(visible_enemies[target_idx])
slow_print()
:
()
ValueError:
()
:
()
choice == soldier.soldier_class == SoldierClass.MEDIC:
injured = [s s squad s != soldier s.is_alive() s.health < ]
injured:
()
i, mate (injured):
()
:
target_idx = (()) -
<= target_idx < (injured):
soldier.heal(injured[target_idx])
:
()
ValueError:
()
:
()
choice == :
()
()
()
()
()
()
:
()
enemy enemies:
enemy.is_alive():
closest_soldier =
min_distance = ()
soldier squad:
soldier.is_alive():
distance = (soldier.position[] - enemy.position[]) + (soldier.position[] - enemy.position[])
distance < min_distance:
min_distance = distance
closest_soldier = soldier
min_distance <= closest_soldier:
enemy.attack(closest_soldier)
closest_soldier.is_alive():
slow_print()
soldier squad:
soldier.is_alive():
soldier.stamina = (, soldier.stamina + )
mission.completed = mission.check_completion(squad, enemies)
turn +=
(s.is_alive() s squad) mission.completed:
slow_print()
slow_print()
(s.is_alive() s squad):
slow_print()
slow_print()
slow_print()
__name__ == :
main()
PythonAI算法
Python 三角洲行动战术小队模拟器
展示了一个使用 Python 编写的三角洲行动风格战术小队模拟器。通过面向对象设计实现了士兵、武器、敌人和任务系统,支持回合制战斗、地图可视化、移动、攻击及医疗操作。代码包含简单的 AI 逻辑用于敌人行为,适合学习游戏开发基础与 Python 语法。


