import random
class Skeleton:
def __init__(self):
self.state = "Stroll" # 初始状态
self.health = 100 # 初始血量
self.distance_to_player = 20 # 初始距离玩家20米
def update(self):
# 状态机逻辑
if self.state == "Stroll":
self.stroll()
elif self.state == "MoveTowardsPlayer":
self.move_towards_player()
elif self.state == "Attack":
self.attack()
elif self.state == "Flee":
self.flee()
# 模拟随机事件
self.simulate_random_changes()
def stroll(self):
print("🦴 骷髅正在徘徊...")
if self.distance_to_player <= 10:
print("👀 发现玩家!")
self.state = "MoveTowardsPlayer"
def move_towards_player(self):
print(f"🚶 骷髅向玩家移动中... (距离: {self.distance_to_player}m)")
if self.distance_to_player <= 5:
print("💢 进入攻击范围!")
self.state = "Attack"
elif self.distance_to_player > 15:
print("👻 玩家距离过远,返回徘徊状态")
self.state = "Stroll"
def attack(self):
print(f"⚔️ 骷髅攻击玩家! (血量: {self.health})")
# 攻击时受到玩家反击
self.health -= random.randint(5, 15)
if self.health <= 20:
print("🏃 血量过低,开始逃跑!")
self.state = "Flee"
elif self.distance_to_player > 6:
print("➡️ 玩家脱离近战范围,重新接近")
self.state = "MoveTowardsPlayer"
def flee(self):
print(f"🏃 骷髅逃跑中... (血量: {self.health})")
# 逃跑时恢复生命值
self.health += random.randint(3, 8)
if self.health >= 60:
print("🔄 血量恢复,返回徘徊状态")
self.state = "Stroll"
def simulate_random_changes(self):
"""模拟玩家距离和随机事件的变化"""
if self.state == "Stroll":
self.distance_to_player += random.randint(-2, 2)
elif self.state == "MoveTowardsPlayer":
self.distance_to_player -= random.randint(1, 3)
elif self.state == "Attack":
self.distance_to_player = random.randint(1, 6)
elif self.state == "Flee":
self.distance_to_player += random.randint(2, 5)
# 确保距离不为负
self.distance_to_player = max(1, self.distance_to_player)
# 测试运行
skeleton = Skeleton()
for i in range(1, 21):
print(f"\n--- 回合 {i} ---")
skeleton.update()