import random from src.sim.simulator import Simulator from src.classes.avatar import Avatar, Gender from src.classes.calendar import Month, Year from src.classes.world import World from src.classes.tile import Map, TileType from src.classes.action import Move from src.utils.names import get_random_name def test_simulator_step_moves_avatar_and_sets_tile(): # 固定随机种子,确保决定的移动是可预测的 random.seed(0) # 构建 3x3 地图并填充地块 game_map = Map(width=3, height=3) for x in range(3): for y in range(3): game_map.create_tile(x, y, TileType.PLAIN) world = World(map=game_map, year=Year(1), month=Month.JANUARY) # 将角色放在地图中心,避免越界 avatar = Avatar( world=world, name=get_random_name(Gender.MALE), id="1", birth_month=Month.JANUARY, birth_year=Year(2000), age=20, gender=Gender.MALE, pos_x=1, pos_y=1, ) sim = Simulator(world) sim.avatars["1"] = avatar # 执行一步模拟 sim.step() # 断言位置在边界内 assert 0 <= avatar.pos_x < game_map.width assert 0 <= avatar.pos_y < game_map.height # 断言 tile 已正确设置且与位置一致 assert avatar.tile is not None assert avatar.tile.x == avatar.pos_x assert avatar.tile.y == avatar.pos_y