《父與子的程式設計之旅(第3版)》第16章習題答案
本文針對第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) 圖中B的座標是[50, 200]。
(8) 圖中D的座標是[300, 50]。
(9) 可以使用blit()
方法在Pygame中複製影像。
(10) 在移動影像或者實現動畫時,可以執行以下兩個步驟。
- 擦除原來的位置上的影像。
- 在新的位置上繪製影像。
動手試一試
(1) 下面的程式會在螢幕上畫出一些不同的形狀。你也可以在answers資料夾中和本書的網站上找到TIO_CH16_1.py檔案。
import pygame, sys
pygame.init()
screen=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.Clock()
pygame.display.flip()
running = True
while running:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
running = False
pygame.quit()
(2) 要把沙灘球影像換成另外的影像,只需把這行程式碼中的檔名替換成另一張圖片的檔名即可。
my_ball = pygame.image.load('beach_ball.png')
(3) 在程式碼清單16-16中,只需修改下面這兩行程式碼:
x_speed = 10
y_speed = 10
修改後的程式碼如下所示(答案不唯一)。
x_speed = 20
y_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中的pygame.display.flip()
移到for
迴圈內部,並增加延遲時間後,程式碼如下所示:
import pygame, sys, random
pygame.init()
screen = 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)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
pygame.quit()
執行這個程式,你應該能看到各個矩形會單獨出現,因為我們放慢了程式的執行速度,並且在畫出各個矩形後都會重新整理螢幕。如果對正弦曲執行緒序做同樣的處理,就可以看出正弦曲線上的每個點是怎麼畫出來的。
相關文章
- 《父與子的程式設計之旅(第3版)》第1章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第2章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第3章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第4章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第5章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第6章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第7章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第8章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第9章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第11章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第12章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第13章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第14章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第15章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第17章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第18章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第19章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第20章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第21章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第22章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第23章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第24章習題答案程式設計
- 《父與子的程式設計之旅(第3版)》第26章習題答案程式設計
- Python核心程式設計v2.0 第11章習題答案Python程式設計
- Python程式設計:從入門到實踐(第2版)第1章習題答案Python程式設計
- Python核心程式設計第2版第六章習題答案Python程式設計
- 李航《統計學習方法》第2版 第2章課後習題答案
- 《Python程式設計(第3版)》[美] 約翰·策勒(John Zelle) 第 3 章 答案Python程式設計
- 第1章 程式設計的方法程式設計
- 《UML基礎、案例與應用》習題記錄-第16章
- 《統計學習方法》第11章習題
- 《Java語言程式設計(基礎篇)(原書第10版)》第2~4章部分程式設計練習題程式碼Java程式設計
- JavaScript物件程式設計-第3章JavaScript物件程式設計
- 第12章、網路程式設計程式設計
- 《程式設計珠璣》第2章三個問題程式設計
- 《Python程式設計:從入門到實踐》第2章習題Python程式設計
- JavaScript的BOM程式設計,事件-第4章JavaScript程式設計事件
- Android程式設計權威指南(第2版)—第14章挑戰練習Android程式設計