实战项目
- P146--Boid模型用于模拟鸟群行为
- 技术栈:pygame(版本2.6.0)+Boid模型
- P147--文字加密生成二维码并解码
- 技术栈:cryptography(信息加密)及qrcode(二维码生成)
- P148--系统监控脚本
- 技术栈:psutil 库(版本6.0.0)监控 CPU 使用率、内存使用情况和磁盘空间
- P149--100以内数学计算题
-
- P150--把信息藏在图像里
-
运行系统:macOS Sonoma 14.6.1
Python编译器:PyCharm 2024.1.4 (Community Edition)
Python版本:3.12
往期链接:
1-5 | 6-10 | 11-20 | 21-30 | 31-40 | 41-50 |
51-60:函数 | 61-70:类 | 71-80:编程范式及设计模式 |
81-90:Python编码规范 | 91-100:Python自带常用模块-1 |
101-105:Python自带模块-2 | 106-110:Python自带模块-3 |
111-115:Python常用第三方包-频繁使用 | 116-120:Python常用第三方包-深度学习 |
121-125:Python常用第三方包-爬取数据 | 126-130:Python常用第三方包-为了乐趣 |
131-135:Python常用第三方包-拓展工具1 | 136-140:Python常用第三方包-拓展工具2 |
P146–Boid模型用于模拟鸟群行为
技术栈:pygame(版本2.6.0)+Boid模型
import pygame
import random
WIDTH, HEIGHT = 800, 600
BACKGROUND_COLOR = (255, 192, 203)
class Rectangle:def __init__(self, x, y, w, h):self.x = xself.y = yself.w = wself.h = hdef contains(self, position):return (self.x <= position.x < self.x + self.w andself.y <= position.y < self.y + self.h)def intersects(self, other):return not (other.x + other.w < self.x orother.x > self.x + self.w orother.y + other.h < self.y orother.y > self.y + self.h)
class Boid:def __init__(self, x, y):self.position = pygame.Vector2(x, y)self.velocity = pygame.Vector2(random.uniform(-1, 1), random.uniform(-1, 1))self.velocity.scale_to_length(random.uniform(2, 4)) def update(self, boids):alignment = self.align(boids) cohesion = self.cohere(boids) separation = self.separate(boids)self.velocity += alignment + cohesion + separationself.velocity = self.velocity.normalize() * 4 self.position += self.velocityself.wrap_around()def align(self, boids):perception_radius = 50steering = pygame.Vector2(0, 0)total = 0for other in boids:if other != self and self.position.distance_to(other.position) < perception_radius:steering += other.velocitytotal += 1if total > 0:steering /= totalsteering = steering.normalize() * 4steering -= self.velocityreturn steeringreturn pygame.Vector2(0, 0)def cohere(self, boids):perception_radius = 100steering = pygame.Vector2(0, 0)total = 0for other in boids:if other != self and self.position.distance_to(other.position) < perception_radius:steering += other.positiontotal += 1if total > 0:steering /= totalsteering -= self.positionsteering = steering.normalize() * 4steering -= self.velocityreturn steeringreturn pygame.Vector2(0, 0)def separate(self, boids):perception_radius =