【Python個人學習筆記】---《Python遊戲程式設計入門》第二章小結挑戰習題(二)
阿新 • • 發佈:2018-12-28
問題:選取一個示列,例如,繪製線條示例,修改它以便用隨機的值繪製1000個線條。瞭解一下random庫和random.randint()函式。
最開始想法是,用pygame.draw.line(Surface, color, start_pos, end_pos, width) 來繪製,給start_pos, end_pos 賦予隨機數。
執行結果後發現,繪製的線條不會在螢幕surface上出現複數條,只有一條隨機變動。
import sys
import random
import time
import pygame
from pygame.locals import *
# 初始化
pygame.init()
# 建立視窗
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("Drawing Lines")
FPS = 60
fps_clock = pygame.time.Clock()
# 主迴圈(繪製隨機線條)
n = 1
while n < 1000:
# 鍵鼠事件
for event in pygame.event.get():
if event.type in (QUIT, KEYDOWN):
sys.exit( )
# 繪製螢幕顏色
screen.fill((0, 80, 0))
# 繪製線條
color = 100, 255, 200
width = 2
x_random = random.randint(10, 200)
y_random = random.randint(20, 300)
x_end_random = random.randint(200,600)
y_end_random = random.randint(300,500)
start_point = (x_random, y_random)
end_point = (x_end_random, y_end_random)
# start_point = (10,200)
pygame.draw.line(screen, color, start_point, end_point, width)
# 更新螢幕顯示
pygame.display.update()
fps_clock.tick(FPS)
time.sleep(0.05) # 做完一次,延遲0.05秒
n += 1
顯示效果如下:
很明顯,不是很符合要求,肯定是哪裡出錯了。
最後找出來的錯誤是把screen.fill()
放進主迴圈while
中了,於是每次迴圈都會把螢幕screen
重新繪製一遍背景顏色,因此把上一次繪製的線條給覆蓋掉了,從而顯示在螢幕screen
上的永遠只有這一次繪製的線條。(有錯請指正)
解決方法:把screen.fill()
扔到while
迴圈外面(上面)去。
最後修改後的程式碼:
import sys
import random
import time
import pygame
from pygame.locals import *
# 初始化
pygame.init()
# 建立視窗
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("Drawing Random Lines")
# 幀率
FPS = 60
fps_clock = pygame.time.Clock()
# 繪製螢幕顏色
# 放主迴圈外,否則會覆蓋掉上次繪製的線條
screen.fill((0, 80, 0))
# 主迴圈(繪製隨機線條)
n = 1
while n < 1000:
# 鍵鼠事件
for event in pygame.event.get():
if event.type in (QUIT, KEYDOWN):
sys.exit()
# 繪製線條
# 起始點,和結束點必須在主迴圈內,否則只會繪製一條線條,下方的顏色同理
width = 2
x_start_random = random.randint(0, 600)
y_start_random = random.randint(0, 500)
x_end_random = random.randint(0, 600)
y_end_random = random.randint(0, 500)
start_point = (x_start_random, y_start_random)
end_point = (x_end_random, y_end_random)
# 新增顏色的變化(題目未作要求233)
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
color = r, g, b
pygame.draw.line(screen, color, start_point, end_point, width)
# 更新螢幕顯示
pygame.display.update()
fps_clock.tick(FPS)
time.sleep(0.05) # 做完一次,延遲0.05秒
n += 1
呈現的效果:
完成題目要求。