Files
cultivation-world-simulator/src/sim/simulator.py
2025-08-23 21:45:05 +08:00

37 lines
1.2 KiB
Python

from src.classes.calendar import Month, Year, next_month
from src.classes.avatar import Avatar
from src.sim.event import Event
class Simulator:
def __init__(self):
self.avatars = {} # dict of int -> Avatar
self.year = Year(1)
self.month = Month.JANUARY
def step(self):
"""
前进一步(每步模拟是一个月时间)
结算这个时间内的所有情况。
角色行为、世界变化、重大事件、etc。
先结算多个角色间互相交互的事件。
再去结算单个角色的事件。
"""
events = [] # list of Event
death_avatar_ids = [] # list of int
# 结算角色行为
for avatar_id, avatar in self.avatars.items():
avatar.act()
if avatar.death_by_old_age():
death_avatar_ids.append(avatar_id)
event = Event(self.year, self.month, f"{avatar.name} 老死了,时年{avatar.age.get_age()}")
events.append(event)
for avatar_id in death_avatar_ids:
self.avatars.pop(avatar_id)
# 最后结算年月
self.month, self.year = next_month(self.month, self.year)
return events