""" 群体间交互示例 演示不同群体之间的交互行为 """ from panda3d.core import Vec3 def create_cooperative_swarms(swarm_manager): """ 创建合作群体 两个群体相互合作,共同完成任务 """ print("创建合作群体...") # 创建两个不同类型的群体 swarm_configs = [ { 'type': '鸟类', 'count': 30, 'position_offset': Vec3(-20, -20, 10) }, { 'type': '昆虫', 'count': 50, 'position_offset': Vec3(20, 20, 5) } ] swarm_manager.create_multiple_swarms(swarm_configs) # 添加合作交互关系 if len(swarm_manager.swarms) >= 2: swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[0], swarm_manager.swarms[1], 'cooperative', 0.8 ) print("合作群体创建完成") def create_competitive_swarms(swarm_manager): """ 创建竞争群体 两个群体争夺同一资源 """ print("创建竞争群体...") # 创建两个相同类型的群体 swarm_configs = [ { 'type': '鱼类', 'count': 25, 'position_offset': Vec3(-15, 0, 8) }, { 'type': '鱼类', 'count': 25, 'position_offset': Vec3(15, 0, 8) } ] swarm_manager.create_multiple_swarms(swarm_configs) # 添加竞争交互关系 if len(swarm_manager.swarms) >= 2: swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[0], swarm_manager.swarms[1], 'competitive', 1.0 ) # 在中心添加一个资源点 resource_position = Vec3(0, 0, 10) swarm_manager.create_obstacle(resource_position, 3.0) print("竞争群体创建完成") def create_predator_prey_swarms(swarm_manager): """ 创建捕食者-猎物群体 一个群体捕食另一个群体 """ print("创建捕食者-猎物群体...") # 创建捕食者和猎物群体 swarm_configs = [ { 'type': '鸟类', # 捕食者 'count': 10, 'position_offset': Vec3(-25, -25, 15) }, { 'type': '昆虫', # 猎物 'count': 80, 'position_offset': Vec3(0, 0, 5) } ] swarm_manager.create_multiple_swarms(swarm_configs) # 添加捕食者-猎物交互关系 if len(swarm_manager.swarms) >= 2: swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[0], # 捕食者 swarm_manager.swarms[1], # 猎物 'predator_prey', 1.2 ) print("捕食者-猎物群体创建完成") def create_complex_ecosystem(swarm_manager): """ 创建复杂生态系统 包含多个群体和多种交互关系 """ print("创建复杂生态系统...") # 创建多个群体 swarm_configs = [ { 'type': '鸟类', # 猎食者 'count': 15, 'position_offset': Vec3(-30, -30, 20) }, { 'type': '鱼类', # 中级消费者 'count': 40, 'position_offset': Vec3(0, -20, 10) }, { 'type': '昆虫', # 初级消费者 'count': 100, 'position_offset': Vec3(20, 10, 5) }, { 'type': '鸟类', # 分解者协作者 'count': 20, 'position_offset': Vec3(30, 30, 15) } ] swarm_manager.create_multiple_swarms(swarm_configs) # 添加复杂的交互关系 if len(swarm_manager.swarms) >= 4: # 鸟类捕食鱼类 swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[0], swarm_manager.swarms[1], 'predator_prey', 1.0 ) # 鱼类捕食昆虫 swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[1], swarm_manager.swarms[2], 'predator_prey', 0.8 ) # 鸟类与分解者协作者合作 swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[0], swarm_manager.swarms[3], 'cooperative', 0.6 ) # 昆虫与分解者协作者竞争资源 swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[2], swarm_manager.swarms[3], 'competitive', 0.7 ) # 添加环境元素 # 食物源 swarm_manager.create_obstacle(Vec3(10, 0, 8), 4.0) swarm_manager.create_obstacle(Vec3(-10, 20, 6), 3.0) # 障碍物 swarm_manager.create_obstacle(Vec3(-15, -10, 12), 5.0) swarm_manager.create_obstacle(Vec3(25, -15, 10), 6.0) print("复杂生态系统创建完成") def create_dynamic_interactions(swarm_manager): """ 创建动态交互场景 交互关系随时间变化 """ print("创建动态交互场景...") # 创建两个群体 swarm_configs = [ { 'type': '鸟类', 'count': 30, 'position_offset': Vec3(-20, 0, 15) }, { 'type': '鱼类', 'count': 30, 'position_offset': Vec3(20, 0, 10) } ] swarm_manager.create_multiple_swarms(swarm_configs) # 初始为合作关系 if len(swarm_manager.swarms) >= 2: swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[0], swarm_manager.swarms[1], 'cooperative', 0.8 ) # 设置动态交互变化 swarm_manager.dynamic_interactions = { 'time_points': [0, 30, 60, 90], # 时间点(秒) 'interactions': [ ('cooperative', 0.8), ('competitive', 1.0), ('predator_prey', 1.2), # 第一个群体捕食第二个群体 ('cooperative', 0.6) ] } print("动态交互场景创建完成") def update_dynamic_interactions(swarm_manager, elapsed_time): """ 更新动态交互关系 """ if hasattr(swarm_manager, 'dynamic_interactions'): time_points = swarm_manager.dynamic_interactions['time_points'] interactions = swarm_manager.dynamic_interactions['interactions'] # 找到当前时间点 current_index = 0 for i, time_point in enumerate(time_points): if elapsed_time >= time_point: current_index = i else: break if current_index < len(interactions): interaction_type, strength = interactions[current_index] # 更新交互关系 if len(swarm_manager.swarms) >= 2: # 清除现有交互 swarm_manager.interaction_manager.clear_interactions() # 添加新交互 swarm_manager.interaction_manager.add_interaction( swarm_manager.swarms[0], swarm_manager.swarms[1], interaction_type, strength ) print(f"交互关系更新为: {interaction_type} (强度: {strength})") def run_interaction_example(swarm_manager): """ 运行交互示例 """ print("=== 群体间交互示例 ===") # 创建复杂生态系统 create_complex_ecosystem(swarm_manager) # 启用相关配置 swarm_manager.config.set("interaction_weight", 1.0) swarm_manager.config.set("cohesion_weight", 1.0) swarm_manager.config.set("separation_weight", 1.5) swarm_manager.config.set("alignment_weight", 1.0) print("交互示例设置完成") print("观察不同群体之间的复杂交互行为") return update_dynamic_interactions