""" 群体间交互完整示例 演示如何使用群体间交互功能创建复杂的生态系统 """ from panda3d.core import Vec3 import random def create_ecosystem_demo(swarm_manager): """ 创建生态系统演示 包含多个群体和复杂的交互关系 """ print("创建生态系统演示...") # 清理现有群体 swarm_manager.cleanup() swarm_manager.swarms.clear() swarm_manager.swarm_id_counter = 0 # 创建生产者群体(植物) print("创建生产者群体...") producer_swarm = swarm_manager.create_example_swarm( swarm_type="昆虫", member_count=150, position_offset=Vec3(0, 0, 2) ) # 设置生产者群体为绿色 for member in producer_swarm['members']: if 'node' in member: member['node'].setColor(0, 1, 0, 1) # 绿色 # 创建初级消费者群体(食草动物) print("创建初级消费者群体...") primary_consumer_swarm = swarm_manager.create_example_swarm( swarm_type="鱼类", member_count=60, position_offset=Vec3(-10, -10, 8) ) # 设置初级消费者群体为蓝色 for member in primary_consumer_swarm['members']: if 'node' in member: member['node'].setColor(0, 0, 1, 1) # 蓝色 # 创建次级消费者群体(食肉动物) print("创建次级消费者群体...") secondary_consumer_swarm = swarm_manager.create_example_swarm( swarm_type="鸟类", member_count=20, position_offset=Vec3(20, 20, 15) ) # 设置次级消费者群体为红色 for member in secondary_consumer_swarm['members']: if 'node' in member: member['node'].setColor(1, 0, 0, 1) # 红色 # 创建分解者群体 print("创建分解者群体...") decomposer_swarm = swarm_manager.create_example_swarm( swarm_type="昆虫", member_count=80, position_offset=Vec3(15, -15, 3) ) # 设置分解者群体为棕色 for member in decomposer_swarm['members']: if 'node' in member: member['node'].setColor(0.5, 0.3, 0, 1) # 棕色 # 添加环境元素 print("添加环境元素...") # 添加水源 swarm_manager.create_obstacle(Vec3(-20, -20, 1), 8.0) # 湖泊 # 添加食物源 swarm_manager.create_obstacle(Vec3(10, 10, 4), 3.0) # 果树林 # 添加栖息地 swarm_manager.create_obstacle(Vec3(-15, 15, 6), 5.0) # 森林 # 设置交互关系 print("设置交互关系...") # 初级消费者吃生产者(竞争关系) swarm_manager.interaction_manager.add_interaction( primary_consumer_swarm, producer_swarm, 'competitive', 1.2 ) # 次级消费者捕食初级消费者(捕食者-猎物关系) swarm_manager.interaction_manager.add_interaction( secondary_consumer_swarm, primary_consumer_swarm, 'predator_prey', 1.5 ) # 分解者与生产者合作(分解有机物,提供养分) swarm_manager.interaction_manager.add_interaction( decomposer_swarm, producer_swarm, 'cooperative', 0.8 ) # 分解者与初级消费者竞争(争夺有机物资源) swarm_manager.interaction_manager.add_interaction( decomposer_swarm, primary_consumer_swarm, 'competitive', 0.6 ) # 更新配置 swarm_manager.config.set("interaction_enabled", True) swarm_manager.config.set("interaction_weight", 1.0) swarm_manager.config.set("cohesion_weight", 0.8) swarm_manager.config.set("separation_weight", 1.2) swarm_manager.config.set("alignment_weight", 0.6) swarm_manager.config.set("max_speed", 6.0) swarm_manager.config.set("perception_radius", 12.0) print("生态系统演示创建完成") print(f"共创建了 {len(swarm_manager.swarms)} 个群体") print("观察生态系统中不同群体之间的复杂交互行为") def create_battle_demo(swarm_manager): """ 创建群体对战演示 两个敌对群体之间的竞争 """ print("创建群体对战演示...") # 清理现有群体 swarm_manager.cleanup() swarm_manager.swarms.clear() swarm_manager.swarm_id_counter = 0 # 创建红方群体 print("创建红方群体...") red_swarm = swarm_manager.create_example_swarm( swarm_type="鸟类", member_count=50, position_offset=Vec3(-25, 0, 15) ) # 设置红方群体为红色 for member in red_swarm['members']: if 'node' in member: member['node'].setColor(1, 0, 0, 1) # 红色 # 创建蓝方群体 print("创建蓝方群体...") blue_swarm = swarm_manager.create_example_swarm( swarm_type="鱼类", member_count=50, position_offset=Vec3(25, 0, 10) ) # 设置蓝方群体为蓝色 for member in blue_swarm['members']: if 'node' in member: member['node'].setColor(0, 0, 1, 1) # 蓝色 # 在中间添加一个资源点 resource_position = Vec3(0, 0, 10) swarm_manager.create_obstacle(resource_position, 4.0) # 设置敌对关系 swarm_manager.interaction_manager.add_interaction( red_swarm, blue_swarm, 'competitive', 1.8 ) # 更新配置 swarm_manager.config.set("interaction_enabled", True) swarm_manager.config.set("interaction_weight", 1.5) swarm_manager.config.set("cohesion_weight", 1.2) swarm_manager.config.set("separation_weight", 1.0) swarm_manager.config.set("alignment_weight", 0.8) swarm_manager.config.set("max_speed", 8.0) swarm_manager.config.set("perception_radius", 15.0) print("群体对战演示创建完成") print("观察两个敌对群体如何争夺中心资源") def create_symbiosis_demo(swarm_manager): """ 创建共生关系演示 两个群体相互依赖,共同生存 """ print("创建共生关系演示...") # 清理现有群体 swarm_manager.cleanup() swarm_manager.swarms.clear() swarm_manager.swarm_id_counter = 0 # 创建植物群体 print("创建植物群体...") plant_swarm = swarm_manager.create_example_swarm( swarm_type="昆虫", member_count=100, position_offset=Vec3(0, 0, 3) ) # 设置植物群体为绿色 for member in plant_swarm['members']: if 'node' in member: member['node'].setColor(0, 1, 0, 1) # 绿色 # 创建传粉者群体 print("创建传粉者群体...") pollinator_swarm = swarm_manager.create_example_swarm( swarm_type="鸟类", member_count=30, position_offset=Vec3(10, 10, 12) ) # 设置传粉者群体为黄色 for member in pollinator_swarm['members']: if 'node' in member: member['node'].setColor(1, 1, 0, 1) # 黄色 # 设置共生关系 swarm_manager.interaction_manager.add_interaction( plant_swarm, pollinator_swarm, 'cooperative', 1.5 ) # 添加多个花丛 for i in range(5): angle = i * 2 * 3.14159 / 5 x = 20 * math.cos(angle) y = 20 * math.sin(angle) swarm_manager.create_obstacle(Vec3(x, y, 5), 3.0) # 更新配置 swarm_manager.config.set("interaction_enabled", True) swarm_manager.config.set("interaction_weight", 1.2) swarm_manager.config.set("cohesion_weight", 1.0) swarm_manager.config.set("separation_weight", 1.3) swarm_manager.config.set("alignment_weight", 0.7) swarm_manager.config.set("max_speed", 5.0) swarm_manager.config.set("perception_radius", 10.0) swarm_manager.config.set("wander_enabled", True) swarm_manager.config.set("wander_weight", 0.8) print("共生关系演示创建完成") print("观察植物和传粉者之间的互利共生关系") def run_interaction_demo(swarm_manager, demo_type="ecosystem"): """ 运行群体间交互演示 :param swarm_manager: 群体管理器 :param demo_type: 演示类型 ("ecosystem", "battle", "symbiosis") """ import math print("=== 群体间交互演示 ===") if demo_type == "ecosystem": create_ecosystem_demo(swarm_manager) elif demo_type == "battle": create_battle_demo(swarm_manager) elif demo_type == "symbiosis": create_symbiosis_demo(swarm_manager) else: print(f"未知的演示类型: {demo_type}") return # 启用交互功能 swarm_manager.config.set("interaction_enabled", True) print(f"\n{demo_type} 演示已启动") print("使用控制面板可以调整交互参数") print("观察不同群体之间的复杂交互行为") return demo_type