文章目錄
- 引言
- 準備工作
- 前置條件
- 代碼實現與解析
- 導入必要的庫
- 初始化Pygame
- 定義星系類
- 主循環
- 完整代碼

引言
銀河系的旋轉動畫是一個迷人且富有挑戰性的項目。通過模擬星系的旋轉,我們可以更好地理解天文學現象,并創造出視覺上令人驚嘆的效果。在這篇博客中,我們將使用Python創建一個動態旋轉的銀河系動畫。通過利用Pygame庫,我們可以實現這個美麗的視覺效果。
準備工作
前置條件
在開始之前,你需要確保你的系統已經安裝了Pygame庫。如果你還沒有安裝它,可以使用以下命令進行安裝:
pip install pygame
Pygame是一個跨平臺的Python模塊,用于編寫視頻游戲。它包括計算機圖形和聲音庫,使得游戲開發更加簡單。
代碼實現與解析
導入必要的庫
我們首先需要導入Pygame庫和其他必要的模塊:
import pygame
import random
import math
初始化Pygame
我們需要初始化Pygame并設置屏幕的基本參數:
pygame.init()
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption("旋轉的銀河動畫")
clock = pygame.time.Clock()
定義星系類
我們創建一個Galaxy
類來定義星系的屬性和行為:
class Galaxy:def __init__(self, num_stars):self.num_stars = num_starsself.stars = []self.center = (400, 400)self.generate_stars()def generate_stars(self):for _ in range(self.num_stars):angle = random.uniform(0, 2 * math.pi)distance = random.uniform(50, 350)x = self.center[0] + distance * math.cos(angle)y = self.center[1] + distance * math.sin(angle)speed = random.uniform(0.001, 0.01)self.stars.append([x, y, angle, distance, speed])def update(self):for star in self.stars:star[2] += star[4]star[0] = self.center[0] + star[3] * math.cos(star[2])star[1] = self.center[1] + star[3] * math.sin(star[2])def draw(self, screen):for star in self.stars:pygame.draw.circle(screen, (255, 255, 255), (int(star[0]), int(star[1])), 2)
主循環
我們在主循環中更新星系的旋轉狀態并繪制:
galaxy = Galaxy(500)running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsescreen.fill((0, 0, 0))galaxy.update()galaxy.draw(screen)pygame.display.flip()clock.tick(60)pygame.quit()
完整代碼
import pygame
import random
import math# 初始化Pygame
pygame.init()
screen = pygame.display.set_mode((800, 800))
pygame.display.set_caption("旋轉的銀河動畫")
clock = pygame.time.Clock()# 星系類定義
class Galaxy:def __init__(self, num_stars):self.num_stars = num_starsself.stars = []self.center = (400, 400)self.generate_stars()def generate_stars(self):for _ in range(self.num_stars):angle = random.uniform(0, 2 * math.pi)distance = random.uniform(50, 350)x = self.center[0] + distance * math.cos(angle)y = self.center[1] + distance * math.sin(angle)speed = random.uniform(0.001, 0.01)self.stars.append([x, y, angle, distance, speed])def update(self):for star in self.stars:star[2] += star[4]star[0] = self.center[0] + star[3] * math.cos(star[2])star[1] = self.center[1] + star[3] * math.sin(star[2])def draw(self, screen):for star in self.stars:pygame.draw.circle(screen, (255, 255, 255), (int(star[0]), int(star[1])), 2)# 主循環
galaxy = Galaxy(500)running = True
while running:for event in pygame.event.get():if event.type == pygame.QUIT:running = Falsescreen.fill((0, 0, 0))galaxy.update()galaxy.draw(screen)pygame.display.flip()clock.tick(60)pygame.quit()