feat: AI Town MVP - 完整三层架构实现
- Python FastAPI 引擎:世界状态模拟、全局能量条、世界事件系统 - Node.js WebSocket 服务器:实时通信、事件队列批处理 - 前端仪表盘:世界状态可视化、行动日志、事件展示 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
108
engine-python/app/global_events.py
Normal file
108
engine-python/app/global_events.py
Normal file
@@ -0,0 +1,108 @@
|
||||
"""世界级事件池"""
|
||||
from typing import Callable, List, Dict, Any, Optional
|
||||
from .models import WorldState, Weather, GlobalEventInfo, WorldEffect
|
||||
|
||||
|
||||
class GlobalEvent:
|
||||
"""世界级事件定义"""
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
description: str,
|
||||
apply_effect: Callable[[WorldState], None],
|
||||
effect_type: str,
|
||||
effect_duration: int = 5,
|
||||
mood_modifier: int = 0
|
||||
):
|
||||
self.name = name
|
||||
self.description = description
|
||||
self.apply_effect = apply_effect
|
||||
self.effect_type = effect_type
|
||||
self.effect_duration = effect_duration
|
||||
self.mood_modifier = mood_modifier
|
||||
|
||||
def to_info(self) -> GlobalEventInfo:
|
||||
return GlobalEventInfo(name=self.name, description=self.description)
|
||||
|
||||
def create_world_effect(self) -> WorldEffect:
|
||||
return WorldEffect(
|
||||
type=self.effect_type,
|
||||
name=self.name,
|
||||
intensity=abs(self.mood_modifier),
|
||||
remaining_ticks=self.effect_duration,
|
||||
mood_modifier=self.mood_modifier
|
||||
)
|
||||
|
||||
|
||||
# 事件效果函数
|
||||
def effect_festival(state: WorldState) -> None:
|
||||
"""节日效果:天气变晴,情绪+5"""
|
||||
state.weather = Weather.SUNNY
|
||||
state.town_mood = min(10, state.town_mood + 5)
|
||||
|
||||
|
||||
def effect_storm(state: WorldState) -> None:
|
||||
"""暴风雨效果:天气变雨,情绪-3"""
|
||||
state.weather = Weather.RAINY
|
||||
state.town_mood = max(-10, state.town_mood - 3)
|
||||
|
||||
|
||||
def effect_scandal(state: WorldState) -> None:
|
||||
"""丑闻效果:情绪-5"""
|
||||
state.town_mood = max(-10, state.town_mood - 5)
|
||||
|
||||
|
||||
def effect_miracle(state: WorldState) -> None:
|
||||
"""奇迹效果:天气变晴,情绪+3"""
|
||||
state.weather = Weather.SUNNY
|
||||
state.town_mood = min(10, state.town_mood + 3)
|
||||
|
||||
|
||||
def effect_fire(state: WorldState) -> None:
|
||||
"""火灾效果:情绪-4"""
|
||||
state.town_mood = max(-10, state.town_mood - 4)
|
||||
|
||||
|
||||
# 世界级事件池
|
||||
GLOBAL_EVENT_POOL: List[GlobalEvent] = [
|
||||
GlobalEvent(
|
||||
name="小镇节日",
|
||||
description="居民们欢聚一堂,举办盛大庆典!",
|
||||
apply_effect=effect_festival,
|
||||
effect_type="festival",
|
||||
effect_duration=5,
|
||||
mood_modifier=2,
|
||||
),
|
||||
GlobalEvent(
|
||||
name="暴风雨来袭",
|
||||
description="乌云密布,暴风雨席卷小镇。",
|
||||
apply_effect=effect_storm,
|
||||
effect_type="storm",
|
||||
effect_duration=4,
|
||||
mood_modifier=-1,
|
||||
),
|
||||
GlobalEvent(
|
||||
name="惊天丑闻",
|
||||
description="镇长的秘密被曝光,全镇哗然。",
|
||||
apply_effect=effect_scandal,
|
||||
effect_type="scandal",
|
||||
effect_duration=6,
|
||||
mood_modifier=-2,
|
||||
),
|
||||
GlobalEvent(
|
||||
name="彩虹奇迹",
|
||||
description="雨后天空出现绚丽彩虹。",
|
||||
apply_effect=effect_miracle,
|
||||
effect_type="miracle",
|
||||
effect_duration=3,
|
||||
mood_modifier=1,
|
||||
),
|
||||
GlobalEvent(
|
||||
name="火灾警报",
|
||||
description="镇中心发生火情,消防队紧急出动。",
|
||||
apply_effect=effect_fire,
|
||||
effect_type="fire",
|
||||
effect_duration=4,
|
||||
mood_modifier=-2,
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user