(圖書介紹:童晶:《Python趣味創意編程》新書預告)
本章我們將實現粒子同心圓,如圖所示。首先學習面向對象編程的知識,爲粒子類添加成員變量與成員函數;然後實現一個面向對象版本的運動粒子,最終實現粒子移向同心圓的互動效果。
知乎視頻 www.zhihu.com視頻教程:
知乎視頻 www.zhihu.com最終代碼:
class Particle: # 定義粒子類
def __init__(self): # 構造函數
self.x = random(1,width) # x座標
self.y = random(1,height) # y座標
self.vx = random(-3,3) # x方向速度
self.vy = random(-3,3) # y方向速度
# 隨機顏色
self.c=color(random(0,150),random(150,255),random(150,255))
self.w = random(1,2) # 線條粗細
def display(self): # 顯示成員函數
strokeWeight(self.w) # 設置線條粗細
stroke(self.c) # 設置線條顏色
point(self.x, self.y) # 在對應座標畫一個點
def update(self): # 更新成員函數
dx = mouseX - self.x # 求出當前粒子到鼠標的差
dy = mouseY - self.y
d = dist(self.x,self.y,mouseX,mouseY) # 粒子到鼠標距離
if d < 1: # 防止距離過小,除以0
d = 1
f = cos(d * 0.04)*random(-20,20) # 計算粒子受力
ax = f*dx/d # 用受力產生加速度
ay = f*dy/d
self.vx = 0.5*self.vx + ax # 用加速度更新速度
self.vy = 0.5*self.vy + ay
self.x += self.vx # 用速度更新粒子位置
self.y += self.vy
points = [] # 列表,存儲所有粒子
def setup():
size(1000, 600) # 設定畫布大小
for i in range(5000): # 隨機產生5000個粒子
pt = Particle() # 定義粒子對象
points.append(pt) # 把pt添加到列表中
def draw():
fill(30, 20) # 背景顏色,透明度
rect(0,0,width,height) # 畫大矩形,產生粒子運動尾跡效果
for pt in points: # 對所有粒子遍歷
pt.update() # 更新粒子
pt.display() # 顯示粒子
這一章主要要學習了面向對象編程,包括類和對象、成員變量、成員函數、構造函數等概念,利用這些知識實現了粒子同心圓的效果。讀者也可以嘗試應用面向對象的知識,改進之前章節的案例,使得代碼的可讀性更好、也更容易實現和擴展。
面向對象編程博大精深,本書通過一個簡單案例讓讀者體會到面向對象編程的好處,想要繼續深入的讀者可以進一步查閱其他學習資料。