1. 程式人生 > >【Python個人學習筆記】---《Python遊戲程式設計入門》第二章小結挑戰習題(二)

【Python個人學習筆記】---《Python遊戲程式設計入門》第二章小結挑戰習題(二)

問題:選取一個示列,例如,繪製線條示例,修改它以便用隨機的值繪製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

呈現的效果:
在這裡插入圖片描述


完成題目要求。