讀古今文學網 > 父與子的編程之旅:與小卡特一起學Python > 第16章 >

第16章

測試題

1. RGB 值 [255, 255, 255] 得到白色。

2. RGB 值 [0, 255, 0] 得到綠色;

3. 要畫矩形,可以使用 Pygame 方法 pygame.draw.rect

4. 要畫線把多個點連在一起(如連連看),可以使用 pygame.draw.lines 方法。

5. 「像素」是「圖像元素」的簡寫,表示屏幕上(或紙上)的一個點。

6. 在一個 Pygame 窗口中,位置 [0, 0] 位於左上角。

7. 在這個圖中,位置 [50, 200] 位於字母 B。

8. 在這個圖中,位置 [300, 50] 位於字母 D。

9. 可以使用 blit 方法在 Pygame 中複製圖像。

10. 要移動一個圖像或者完成動畫,可以使用以下兩個步驟:

  • 從原來的位置擦除圖像;

  • 在新位置上繪製圖像。

動手試一試

1. 下面的程序會在屏幕上畫出一些不同的形狀。也可以在 \answers 文件夾和網站上找到 TIO_CH16_1.py。

import pygame, syspygame.initscreen=pygame.display.set_mode((640, 480))screen.fill((250, 120, 0))pygame.draw.arc(screen,(255,255,0),pygame.rect.Rect(43,368,277,235),-6.25, 0, 15)pygame.draw.rect(screen,(255, 0, 0),pygame.rect.Rect(334,191,190,290))pygame.draw.rect(screen,(128, 64, 0),pygame.rect.Rect(391,349,76,132))pygame.draw.line(screen,(0, 255, 0),(268, 259),(438,84),25)pygame.draw.line(screen,(0, 255, 0),(578, 259),(438,84),25)pygame.draw.circle(screen, (0, 0, 0), (452, 409), 11, 2)pygame.draw.polygon(screen, (0, 0, 255),[(39, 39), (44, 136), (59, 136), (60,102),(92,102),(94,131),(107, 141), (111, 50), (97, 50), (93, 86), (60, 82), (58, 38)], 5)pygame.draw.rect(screen,(0,0,255), pygame.rect.Rect(143,90,23,63),5)pygame.draw.circle(screen, (0, 0, 255), (153, 60), 15, 5)clock = pygame.time.Clockpygame.display.fliprunning = Truewhile running:    clock.tick(60)    for event in pygame.event.get:if event.type == pygame.QUIT:    running = Falseelif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:    running = Falsepygame.quit  

2. 要把沙灘球圖像換成一個不同的圖像,只需把這行代碼中的文件名:

my_ball = pygame.image.load('beach_ball.png')  

替換成另一個圖片的文件名。

3. 在代碼清單 16-16 中,只需把

x_speed = 10y_speed = 10  

改為其他的值,如

x_speed = 20y_speed = 8  

4. 要讓球在一面「隱形」的牆上反彈,可以把代碼清單 16-16 中的這行代碼

if x > screen.get_width - 90 or x < 0:  

改為:

if x > screen.get_width - 250 or x < 0:  

這會讓球在到達窗口邊界之前就反向。可以對 y 坐標做同樣的處理,讓它在到達「地板」時也會反彈。

5. 將代碼清單 16-6 中的 display.flip 移到 while 循環內部,並增加一個延遲之後,代碼如下所示:

import pygame, sys, randompygame.initscreen = pygame.display.set_mode([640,480])screen.fill([255, 255, 255])for i in range (100):    width = random.randint(0, 250)    height = random.randint(0, 100)    top = random.randint(0, 400)    left = random.randint(0, 500)    pygame.draw.rect(screen, [0,0,0], [left, top, width, height], 1)    pygame.display.flip    pygame.time.delay(30)  

應該能看到各個矩形會單獨出現,因為我們放慢了程序的速度,現在畫出各個矩形之後會刷新顯示。如果對正弦曲線程序做這個處理,可以看到正弦曲線中的各個點分別畫出。