当前位置: 首页 > news >正文

单位网站建设实施方案/免费推广广告链接

单位网站建设实施方案,免费推广广告链接,高中网站建设课程,恩施旅游网站建设用python实现的一个简单的生态模拟系统 红色:顶层捕食者(攻击性越强颜色越红)绿色:中层消费者蓝色:底层生产者​动态行为:底层生物主动寻找黄色食物中层生物追捕底层生物顶层生物猎杀中层生物​统计面板&a…

用python实现的一个简单的生态模拟系统

  • 红色:顶层捕食者(攻击性越强颜色越红)
  • 绿色:中层消费者
  • 蓝色:底层生产者
  • 动态行为
  • 底层生物主动寻找黄色食物
  • 中层生物追捕底层生物
  • 顶层生物猎杀中层生物
  • 统计面板
  • 实时显示各层级生物数量
  • 食物数量和帧率显示
import pygame
import math
import random
from enum import Enum
from collections import defaultdict
from dataclasses import dataclass# 初始化Pygame
pygame.init()# 常量定义
SCREEN_WIDTH = 1280
SCREEN_HEIGHT = 720
FPS = 45
GRID_SIZE = 60
MAX_FOOD = 150
FOOD_SPAWN_RATE = 0.02# 基因参数结构体
@dataclass
class Genes:size: floatspeed: floatsense_range: floatmetabolism: floataggression: float# 生态位类型枚举
class TrophicLevel(Enum):TOP = 0  # 顶层捕食者(红色)MIDDLE = 1  # 中层消费者(绿色)BOTTOM = 2  # 底层生产者(蓝色)# 食物类
class Food:def __init__(self):self.x = random.uniform(0, SCREEN_WIDTH)self.y = random.uniform(0, SCREEN_HEIGHT)self.energy = random.uniform(8, 15)self.size = 3def draw(self, surface):pygame.draw.circle(surface, (255, 255, 100), (int(self.x), int(self.y)), self.size)# 生物类
class Organism:def __init__(self, x, y, level, genes=None):self.x = xself.y = yself.level = levelself.age = 0self.sick = Falseself.energy = 150.0# 基因系统if genes:self.genes = geneselse:self.genes = self._generate_genes(level)# 动态属性self.color = self._get_color()self.direction = random.uniform(0, 2 * math.pi)self.target = Nonedef _generate_genes(self, level):"""根据生态位生成初始基因"""base_genes = {TrophicLevel.TOP: (8, 2.8, 120, 0.06, 0.8),TrophicLevel.MIDDLE: (6, 2.0, 90, 0.04, 0.5),TrophicLevel.BOTTOM: (4, 1.2, 60, 0.02, 0.2)}size, speed, sense, meta, agg = base_genes[level]return Genes(size * random.uniform(0.9, 1.1),speed * random.uniform(0.9, 1.1),sense * random.uniform(0.8, 1.2),meta * random.uniform(0.9, 1.1),agg * random.uniform(0.8, 1.2))def _get_color(self):"""根据生态位和攻击性生成颜色"""base_colors = {TrophicLevel.TOP: (200, 50, 50),TrophicLevel.MIDDLE: (50, 200, 50),TrophicLevel.BOTTOM: (50, 50, 200)}r, g, b = base_colors[self.level]return (min(255, int(r * (1 + self.genes.aggression / 3))),min(255, int(g * (1 - self.genes.aggression / 3))),b)def move_towards(self, target_x, target_y):"""向目标方向移动"""dx = target_x - self.xdy = target_y - self.ytarget_angle = math.atan2(dy, dx)angle_diff = (target_angle - self.direction) % (2 * math.pi)# 平滑转向if angle_diff > math.pi:angle_diff -= 2 * math.piself.direction += angle_diff * 0.1# 前进self.x += self.genes.speed * math.cos(self.direction)self.y += self.genes.speed * math.sin(self.direction)def avoid(self, target_x, target_y):"""躲避目标"""dx = target_x - self.xdy = target_y - self.ytarget_angle = math.atan2(dy, dx)self.direction = target_angle + math.pi  # 反向def update_target(self, foods, organisms):"""根据感知选择目标"""closest_food = Noneclosest_predator = Noneclosest_prey = Nonemin_food_dist = float('inf')min_pred_dist = float('inf')min_prey_dist = float('inf')# 感知范围内检测for obj in foods + organisms:if obj is self:continuedx = obj.x - self.xdy = obj.y - self.ydist_sq = dx ** 2 + dy ** 2# 食物检测(仅底层)if (self.level == TrophicLevel.BOTTOM andisinstance(obj, Food) anddist_sq < self.genes.sense_range ** 2 anddist_sq < min_food_dist):closest_food = objmin_food_dist = dist_sq# 天敌检测if (isinstance(obj, Organism) andobj.level.value == self.level.value - 1 anddist_sq < self.genes.sense_range ** 2 anddist_sq < min_pred_dist):closest_predator = objmin_pred_dist = dist_sq# 猎物检测if (isinstance(obj, Organism) andobj.level.value == self.level.value + 1 anddist_sq < self.genes.sense_range ** 2 anddist_sq < min_prey_dist):closest_prey = objmin_prey_dist = dist_sq# 行为优先级:躲避天敌 > 寻找食物/猎物 > 随机游走if closest_predator:self.target = closest_predatorself.avoid(self.target.x, self.target.y)elif closest_prey and self.level != TrophicLevel.BOTTOM:self.target = closest_preyself.move_towards(self.target.x, self.target.y)elif closest_food and self.level == TrophicLevel.BOTTOM:self.target = closest_foodself.move_towards(self.target.x, self.target.y)else:# 随机方向微调self.direction += random.uniform(-0.3, 0.3)def check_collision(self, other):"""通用碰撞检测方法"""if isinstance(other, Organism):dx = self.x - other.xdy = self.y - other.yreturn dx ** 2 + dy ** 2 < (self.genes.size + other.genes.size) ** 2elif isinstance(other, Food):dx = self.x - other.xdy = self.y - other.yreturn dx ** 2 + dy ** 2 < (self.genes.size + other.size) ** 2return Falsedef draw(self, surface):"""绘制生物体"""pygame.draw.circle(surface,self.color,(int(self.x), int(self.y)),int(self.genes.size))def update(self, foods):self.age += 1self.energy -= self.genes.metabolismif self.sick and random.random() < 0.03:self.sick = Falseif self.level == TrophicLevel.BOTTOM:self.energy += 0.05self.energy = min(self.energy, 200)def reproduce(self):child_genes = Genes(size=max(2, self.genes.size * random.uniform(0.95, 1.05)),speed=max(0.5, self.genes.speed * random.uniform(0.9, 1.1)),sense_range=max(30, self.genes.sense_range * random.uniform(0.8, 1.2)),metabolism=max(0.01, self.genes.metabolism * random.uniform(0.95, 1.05)),aggression=min(1.0, self.genes.aggression * random.uniform(0.9, 1.1)))child = Organism(self.x + random.uniform(-20, 20),self.y + random.uniform(-20, 20),self.level,child_genes)self.energy -= 35return child# 模拟管理器
class EcosystemSimulation:def __init__(self):self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))self.clock = pygame.time.Clock()self.font = pygame.font.Font(None, 28)self.organisms = []self.foods = []self.init_ecosystem()def init_ecosystem(self):# 初始种群分布for _ in range(80):x = random.uniform(0, SCREEN_WIDTH)y = random.uniform(0, SCREEN_HEIGHT)level = random.choices(list(TrophicLevel),weights=[0.12, 0.25, 0.63])[0]self.organisms.append(Organism(x, y, level))# 初始食物for _ in range(80):self.foods.append(Food())def spawn_food(self):if random.random() < FOOD_SPAWN_RATE and len(self.foods) < MAX_FOOD:self.foods.append(Food())def handle_collisions(self):to_add = []to_remove = []grid = defaultdict(list)# 建立空间索引for org in self.organisms:grid_key = (int(org.x // GRID_SIZE), int(org.y // GRID_SIZE))grid[grid_key].append(org)# 处理生物行为for org in self.organisms:org.update_target(self.foods, self.organisms)# 边界反弹if org.x < 0 or org.x > SCREEN_WIDTH:org.direction = math.pi - org.directionif org.y < 0 or org.y > SCREEN_HEIGHT:org.direction = -org.directionorg.x = max(0, min(SCREEN_WIDTH, org.x))org.y = max(0, min(SCREEN_HEIGHT, org.y))# 进食检测(底层吃食物)if org.level == TrophicLevel.BOTTOM:for food in self.foods[:]:if org.check_collision(food):org.energy += food.energyself.foods.remove(food)# 捕食检测current_key = (int(org.x // GRID_SIZE), int(org.y // GRID_SIZE))for dx in (-1, 0, 1):for dy in (-1, 0, 1):neighbor_key = (current_key[0] + dx, current_key[1] + dy)for other in grid.get(neighbor_key, []):if org != other and org.check_collision(other):if org.level.value == other.level.value + 1:org.energy += other.energy * 0.6to_remove.append(other)# 繁殖与死亡for org in self.organisms[:]:org.update(self.foods)if org.energy > 130 and org.age > 18:to_add.append(org.reproduce())if org.energy <= 0 or org.age > 250:to_remove.append(org)# 更新列表self.organisms = [o for o in self.organisms if o not in to_remove]self.organisms.extend(to_add)def draw_stats(self):stats = [f"Time: {pygame.time.get_ticks() // 1000}s",f"Organisms: {len(self.organisms)}",f"  TOP: {sum(1 for o in self.organisms if o.level == TrophicLevel.TOP)}",f"  MID: {sum(1 for o in self.organisms if o.level == TrophicLevel.MIDDLE)}",f"  BOT: {sum(1 for o in self.organisms if o.level == TrophicLevel.BOTTOM)}",f"Food: {len(self.foods)}",f"FPS: {self.clock.get_fps():.1f}"]for i, text in enumerate(stats):surface = self.font.render(text, True, (240, 240, 240))self.screen.blit(surface, (10, 10 + i * 28))def run(self):running = Truewhile running:for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 更新状态self.spawn_food()self.handle_collisions()# 渲染self.screen.fill((18, 18, 18))for food in self.foods:food.draw(self.screen)for org in self.organisms:org.draw(self.screen)self.draw_stats()pygame.display.flip()self.clock.tick(FPS)pygame.quit()if __name__ == "__main__":sim = EcosystemSimulation()sim.run()

http://www.whsansanxincailiao.cn/news/32031894.html

相关文章:

  • 哈尔滨专业网站制作设计/个人在百度上发广告怎么发
  • 哈尔滨做设计和网站的公司吗/朋友圈营销广告
  • 政府网站建设的易用性/比较好用的搜索引擎
  • 房产中介做租单用哪个付费网站更好/个人网站建站教程
  • 上海做响应式网站的公司/seo营销怎么做
  • 许昌住房和城乡建设部网站/宁波seo推荐推广平台
  • 济南网络科技有限公司有哪些/武汉网络seo公司
  • 建设银行大冶支行网站/如何做一个营销方案
  • 网站图片滚动效果怎么做/南宁网站快速排名提升
  • 松原做网站公司/百度竞价登录入口
  • 手机网站建设视频/百度下载并安装
  • 交互式网站开发技术包括/百度登录个人中心官网
  • 郑州网站建设到诺然/seo体系百科
  • 如何做网站搜索引擎优化/备案查询站长之家
  • 网站建设公司创意/搜狗登录入口
  • 个人网站备案地址/今天最新的新闻头条
  • 云南专业做网站多少钱/河南网站建设制作
  • 青岛做一个网站多少钱/今天的最新新闻内容
  • 如何创建网站推广产品/三只松鼠搜索引擎推广
  • seo和sem是什么意思/舆情优化公司
  • 烟台seo网站推广费用/站群seo
  • 做网站还有市场吗/免费建设个人网站
  • 网站建设的公司做销售/互联网广告代理商
  • iis 5 如何添加网站/百度股市行情上证指数
  • 哪些网站可以找兼职做室内设计/百度seo关键词排名推荐
  • 上海网站备案核验单状态查询/免费大数据平台
  • 公司网站做推广支出分录/seo免费推广软件
  • 注册公司代理费用/百度网站优化方案
  • 高端网站建设案例/揭阳百度seo公司
  • 电商设计的工作内容/北京优化seo排名优化