Python學習之路13.2-記分_後篇

本系列是對入門書籍《Python編程:從入門到實踐》的筆記整理,屬於初級內容。標題順序採用書中標題。

本篇是Python小遊戲《外星人入侵》的最後一篇的後篇,本章將實現小遊戲的記分板功能並結束該項目的開發。

本篇標題編號就不從1開始了,緊接上篇,從標題4開始。

4. 記分板

下面我們將實現一個記分系統,實時跟蹤玩家的得分,並顯示最高得分,當前等級和餘下的飛船數。首先,我們需要創建一個Scoreboard類。

4.1 新增scoreboard.py

新增一個Scoreboard類,用作屏幕中的記分板,它的屏幕正中央上方部分是最高分數,屏幕右邊是當前分數和等級,左上角是剩餘的飛船數量,飛船數量用圖片表示,因此,我們還要將Ship類更改為從Sprite繼承(該類僅改動此處)。下面三張圖都是同一個文件。

Python學習之路13.2-記分_後篇

Scoreboard第一部分

Python學習之路13.2-記分_後篇

Scoreboard第二部分

Python學習之路13.2-記分_後篇

Scoreboard第三部分

4.2 修改settings.py

設置外星人的分數,外星人分數增長的速度:

Python學習之路13.2-記分_後篇

4.3 修改game_stats.py

GameStats中設置一個用於記錄最高分的屬性,也正因此,應該將它放在構造函數中,它只會變大,在沒有重新運行遊戲前,它不會被重置為0;在reset_stats()方法中,初始化scorelevel兩個屬性,這兩個屬性每點一次Play按鈕都會被重置。對於level這個屬性,每消滅一批艦隊,level就加1.

Python學習之路13.2-記分_後篇

4.4 修改主程序alien_invasion.py

Python學習之路13.2-記分_後篇

從上面的註釋可以看出,我們生成了一個計分板的實例scoregame_functions.py中的四個函數都要添加score參數,換句話說,這四個函數都要修改,下面我們逐一修改這四個函數。

4.5 修改game_functions.py

4.5.1 修改參數

有幾個函數只需要在參數列表中增加score參數:

Python學習之路13.2-記分_後篇

接下來是改動較多的函數。

4.5.2 修改check_play_button()函數

Python學習之路13.2-記分_後篇

首先參數列表添加了score參數,if判斷中還添加了四行生成計分板的代碼。之所以這裡要添加這四行代碼,其實是為了當你重新開始(也就是第二次及以後點擊Play按鈕)遊戲時,計分板能正確顯示。

當第一運行遊戲時,沒有這四行也能正確顯示計分板。但是從第二次點擊Play開始,如果沒有這四行,遊戲的各個參數雖然更新了(通過check_play_button()中的各種重置函數得到了更新),可這些更新還沒有讓記分板中這四個參數的圖像得到重新繪製,即屬性的更新沒有自動觸發score的這四個函數。所以顯示會不正確,因此必須在這裡添加這四行代碼。

4.5.3 修改update_screen()函數

Python學習之路13.2-記分_後篇

4.5.4 修改update_bullets()和update_aliens()函數

這倆函數只是增加參數而已。

Python學習之路13.2-記分_後篇

check_aliens_bottom()內也變化也不大,該函數的變化不再以代碼的形式單獨列出:

該函數增加了一個score參數,它內部調用了ship_hit()函數,為這個調用也增加

score參數。這就是全部變化。

4.5.5 修改check_bullet_alien_collisions()函數

Python學習之路13.2-記分_後篇

首先我們增加了一個判斷語句,用於根據消滅的外星人來增加分數,由於有可能一顆子彈打到多個外星人但只算了一個外星人的分數,所有用循環來確保消滅掉的每一個外星人都得到了統計。collisions是一個字典,這裡子彈是鍵,該子彈消滅的外星人對象為值(是個列表)。

我們還新增了一個更新最高積分的函數check_high_score(),它的代碼如下:

Python學習之路13.2-記分_後篇

第二個if中,添加了增加等級的語句,緊跟著的是重新在計分板中繪製等級圖像。

4.5.6 修改ship_hit()和check_aliens_bottom()函數

Python學習之路13.2-記分_後篇

4.6 最後運行效果

至此所有的添加都已經結束,下圖是遊戲的最終效果:

Python學習之路13.2-記分_後篇

5. 小結

Python小遊戲告一段落,一共三篇文章。本文中講述了:

  • 如何創建用於開始新遊戲的Play按鈕;

  • 如何檢測鼠標點擊事件;

  • 如何在遊戲處於活動狀態時隱藏光標;

  • 如何隨遊戲的進行調整節奏;

  • 如何實現記分系統;

  • 以及如何以文本和非文本方式顯示信息。

後三篇文章將是使用Python來進行數據統計分析、繪圖等內容。


分享到:


相關文章: