37 lines
1.2 KiB
Python
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
|