《父與子的程式設計之旅(第3版)》第18章習題答案

謝婷婷發表於2020-08-27

本文針對第18章章末的習題提供參考答案。當然,有些習題的正確答案不止一個,特別是“動手試一試”,不過你可以通過這些答案來判斷自己的思路是否正確。

第18章 一種新的輸入——事件

測試題

(1) Pygame程式可以響應的兩種事件分別是鍵盤事件和滑鼠事件。

(2) 處理事件的程式碼稱為事件處理器。

(3) Pygame使用KEYDOWN事件來檢測按鍵是否按下。

(4) pos屬性會指出事件發生時滑鼠所在的位置。

(5) 可以使用pygame.USEREVENT來為使用者事件得到下一個可用的事件編號。

(6) 可以使用pygame.time.set_timer()來建立定時器。

(7) 可以使用字型物件在Pygame視窗中顯示文字。

(8) 使用字型物件有3個步驟。

  • 建立一個字型物件。
  • 渲染文字,建立一個表面。
  • 把這個表面塊移到顯示錶面。

動手試一試

(1) 這種現象是因為這裡有一個碰撞,所以程式碼嘗試調整球的垂直運動方向(讓它向上而不是向下)。但是因為球是從兩邊(左邊或右邊)過來的,所以即使在反向之後,它仍會與球拍碰撞。在下一次迴圈時(一幀之後),它會再次反向,因此會再次向下,如此繼續。

要解決這個問題,有一種簡單的方法:當球與球拍碰撞時,總是將球設定為向“上”(y-speed值為負)。這不是一種完美的解決辦法,因為這意味著即使球碰到球拍的左右兩邊,它也會向上反彈——這可不太現實!不過這樣做能解決球在球拍兩邊來回反彈的問題。如果想要一種更真實的解決方案,你可能需要編寫更多的程式碼。也許要增加一些內容,就是在反彈之前,檢查球碰到了球拍的哪一邊。

可以在answers資料夾中的TIO_CH18_1.py檔案中檢視參考答案。

(2) answers資料夾給出了一些參考程式碼,可以增加程式的隨機性,參見TIO_CH18_2.py檔案。

相關文章