星際爭霸之小霸王之小蜜蜂(三)--重構模塊

目錄

前言

一、為什么要重構模塊

?二、創建game_functions

?三、創建update_screen()

?四、修改alien_invasion模塊

?五、課后思考

?總結


前言

前兩天我們已經成功創建了窗口,并將小蜜蜂放在窗口的最下方中間位置,本來以為今天將學習控制小蜜蜂,結果是重構模塊,算了,我們按照書上步驟,一起來學習下。

一、為什么要重構模塊

書上說在大型項目中,會經常在添加新代碼前重構既有的代碼。(咱也沒進過大公司,做過大型項目,今天也算體驗了一把大型項目的流程),目的是簡化代碼結構。具體到我們現在做的案例,就是簡化alien_invasion文件,把里面寫的一些功能,再用一個函數封裝起來,然后在alien_invasion里調用,使得alien_invasion看起來更簡潔,邏輯更清晰。我們先來看看alien_invasion里面的代碼。

import sys
import pygame
import settings
from ship import Shipdef run_game():pygame.init()new_setting=settings.Settings()screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))ship = Ship(screen)pygame.display.set_caption("Alien Invasion")while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.fill(new_setting.bg_color)ship.blitme()pygame.display.flip()run_game()

?通過觀察代碼,我們發現,在while循環里主要有兩件事,一件事是監聽用戶操作,另一件事是繪制窗口,那么我們就將這兩件事分別封裝出去。

?二、創建game_functions

?沒啥好說的,創建一個類,把while循環里面的代碼復制過去,然后alien_invasion再調用就行了,我們先寫game_functions的代碼。

import sys
import pygamedef check_events():for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()

?三、創建update_screen()

書上面并沒有創建一個?update_screen的新文件,而是在game_functions里定義了update_screen函數,那么game_functions不就復雜了嗎?簡化了alien_invasion,復雜了game_functions有啥意義。

?我們觀察上面的代碼,screen.fill(new_setting.bg_color),調用了screen和new_setting,ship.blitme()調用了ship,所以我們在創建新的函數的時候,要將這三個作為傳參傳進去。

def update_screen(new_setting,screen,ship):screen.fill(new_setting.bg_color)ship.blitme()pygame.display.flip()

?四、修改alien_invasion模塊

?現在我們只需要導入game_functions,然后調用里面的函數就行了。

import pygame
import settings
from ship import Ship
import game_functions as gfdef run_game():pygame.init()new_setting=settings.Settings()screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))ship = Ship(screen)pygame.display.set_caption("Alien Invasion")while True:gf.check_events()gf.update_screen(new_setting,screen,ship)run_game()

?我們來運行一下,看能否成功。

?

?沒問題,成功的

?五、課后思考

?“大蟒蛇”在這里提出了一個問題:“找一個喜歡的游戲角色,放在屏幕中間,然后將屏幕背景色變為圖片的背景色,或者將圖片的背景色變成屏幕背景色”

?看到這個問題,我首先想到的是python可以實現ps的功能?可以吸取顏色,改變背景色?這個其實覺得有可能實現,但是改變圖片背景色,那還要摳圖,覺得不大可能,本著好學的精神,在網上查詢下,可以使用第三方庫來改變圖片的顏色,至于效果怎么樣也就不試了,跟本次案例關系不大,以后有需要再試。但是改變背景色為圖片背景色有難度,沒有發現提取圖片顏色的方式,難道用肉眼看?

?總結

?今天在游戲的進程上沒有突破,但是也體會了大項目的流程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42385.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42385.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42385.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GPT-4一紙重洗:從97.6%降至2.4%的巨大挑戰

斯坦福大學和加州大學伯克利分校合作進行的一項 “How Is ChatGPTs Behavior Changing Over Time?” 研究表明,隨著時間的推移,GPT-4 的響應能力非但沒有提高,反而隨著語言模型的進一步更新而變得更糟糕。 研究小組評估了 2023 年 3 月和 20…

win10安裝mysql和c++讀取調用舉例

一、下載mysql8.rar解壓到C盤(也可以解壓到其他位置) 在系統環境變量添加JAVA_HOMEC:\myslq8,并在path中添加%JAVA_HOME%\bin; 二、以管理員身份進入命令窗口 三、修改配置文件指定安裝路徑和數據庫的存放路徑 四、鍵入如下命令初始化并啟動mysql服務,然后修改登錄…

Rust之泛型、trait與生命周期

泛型是具體類型或其他屬性的抽象替代。在編寫代碼時,可以直接描述泛型的行為,或者它與其他泛型產生的聯系,而無須知曉它在編譯和運行代碼時采用的具體類型。 1、泛型數據類型: 們可以在聲明函數簽名或結構體等元素時使用泛型&am…

TDD(測試驅動開發)?

01、前言 很早之前,曾在網絡上見到過 TDD 這 3 個大寫的英文字母,它是 Test Driven Development 這三個單詞的縮寫,也就是“測試驅動開發”的意思——聽起來很不錯的一種理念。 其理念主要是確保兩件事: 確保所有的需求都能被照…

macOS Ventura 13.5.1(22G90)發布(附黑/白蘋果系統鏡像地址)

系統鏡像下載:百度:黑果魏叔 系統介紹 黑果魏叔 8 月 18 日消息,蘋果今日向 Mac 電腦用戶推送了 macOS 13.5.1 更新(內部版本號:22G90),本次更新距離上次發布隔了 24 天。 本次更新重點修復了…

Redis 緩存過期及刪除

一、Redis緩存過期策略 物理內存達到上限后,像磁盤空間申請虛擬內存(硬盤與內存的swap),甚至崩潰。 內存與硬盤交換 (swap) 虛擬內存,頻繁I0 性能急劇下降,會造成redis內存急劇下降; 一般設置物理內存的3/4,在redis…

內存不足V4L2 申請DMC緩存報錯問題

當內存不足時,V4L2可能存在申請DMA緩存報錯,如下日志: 13:36:54:125 [15070.640862] rkcifhw fdfe0000.rkcif: swiotlb buffer is full (sz: 1843200 bytes) 13:36:54:125 [15070.640891] rkcifhw fdfe0000.rkcif: swiotlb: coherent allocation failed, size=1843200 13:3…

超分辨率地震速度模型

文獻分享 1. Multitask Learning for Super-Resolution 原題目:Multitask Learning for Super-Resolution of Seismic Velocity Model 全波形反演(FWI)是估算地下速度模型的強大工具。與傳統反演策略相比,FWI充分利用了地震波的…

typedef

t y p e d e f typedef typedef 聲明&#xff0c;簡稱typedef&#xff0c;是創建現有類型的新名字。 比如&#xff1a; #include <bits/stdc.h> using namespace std; typedef long long ll; int main() {ll n;scanf("%lld",&n);printf("%lld"…

C++ 面向對象三大特性——多態

?<1>主頁&#xff1a;我的代碼愛吃辣 &#x1f4c3;<2>知識講解&#xff1a;C 繼承 ??<3>開發環境&#xff1a;Visual Studio 2022 &#x1f4ac;<4>前言&#xff1a;面向對象三大特性的&#xff0c;封裝&#xff0c;繼承&#xff0c;多態&#xff…

30W IP網絡有源音箱 校園廣播音箱

SV-7042XT是深圳銳科達電子有限公司的一款2.0聲道壁掛式網絡有源音箱&#xff0c;具有10/100M以太網接口&#xff0c;可將網絡音源通過自帶的功放和喇叭輸出播放&#xff0c;可達到功率30W。同時它可以外接一個30W的無源副音箱&#xff0c;用在面積較大的場所。5寸進口全頻低音…

RNN模型簡單理解和CNN區別

目錄 神經網絡&#xff1a;水平方向延伸&#xff0c;數據不具有關聯性 ? RNN&#xff1a;在神經網絡的基礎上加上了時間順序&#xff0c;語義理解 ?RNN: 訓練中采用梯度下降&#xff0c;反向傳播 ? 長短期記憶模型 ?輸出關系&#xff1a;1 toN&#xff0c;N to N 單入…

Spring三級緩存

目錄 循環依賴問題 三級緩存 三級緩存創建Bean的流程&#xff08;解決循環依賴問題&#xff09; 三級緩存的局限性 Spring的三級緩存是為了解決單例Bean的循環依賴問題而存在的。 循環依賴問題 簡單來說就是A依賴B&#xff0c;而B又依賴A。即創建A的時候&#xff0c;需要先…

【HarmonyOS】【DevEco Studio】ohpm安裝失敗該如何解決?

【關鍵詞】 HarmonyOS、DevEco Studio、ohpm安裝失敗 【問題背景及解決方案】 最近遇到很多DevEco Studio安裝ohpm失敗的問題&#xff0c;下面給大家介紹幾種出現的問題以及解決方案&#xff1a; 1、ohpm not set up&#xff0c;報錯截圖如下&#xff1a; ? 解決方案&…

一百六十、Kettle——Linux上安裝的Kettle9.2.0連接Hive3.1.2

一、目標 Kettle9.2.0在Linux上安裝好后&#xff0c;需要與Hive3.1.2數據庫建立連接 之前已經在本地上用kettle9.2.0連上Hive3.1.2 二、各工具版本 &#xff08;一&#xff09;kettle9.2.0 kettle9.2.0安裝包網盤鏈接 鏈接&#xff1a;https://pan.baidu.com/s/15Zq9w…

C++中class嵌套時構造函數,析構函數調用的順序

#include<iostream> using namespace std; class Phone { public:Phone(string pname){m_pnamepname;cout<<"phone的構造函數調用"<<endl;}~Phone(){cout<<"Phone的析構函數調用"<<endl;}string m_pname; }; class Person {…

網安周報|Monti Ransomware團伙推出了一個新的Linux加密器

Monti Ransomware團伙推出了一個新的Linux加密器 經過兩個月的休息&#xff0c;Monti 勒索軟件運營商帶著新的 Linux 版本的加密器返回。該變體被用于針對政府和法律部門組織的攻擊。研究人員注意到兩個團伙的TTP之間有多個相似之處&#xff0c;Monti運營商還基于Conti泄露的源…

2023 Robocom 游記+題解

Robocom賽前一天熬夜打了一場edu,全程瞇瞇眼&#xff0c;三題滾粗了&#xff0c;前三題花了一小時才寫完&#xff0c;第四題寫了一小時也沒寫明白&#xff0c;好像預示著Robocom的結局&#xff1f; 早上七點醒了&#xff0c;感覺自己渾身無力&#xff0c;想睡覺但是又睡不著的…

AutoSAR配置與實踐(基礎篇)3.3 BSW的通信功能

傳送門 -> AUTOSAR配置與實踐總目錄 AutoSAR配置與實踐&#xff08;基礎篇&#xff09;3.3 BSW的通信功能 一、收發過程概覽1.1 發送過程概覽1.2 接收過程概覽 二、BSW的通信功能模塊組成三、收發過程解析3.1 發送過程3.2 發送后的結果確認3.3 接收過程 一、收發過程概覽 1…

Airbnb開源數據可視化工具Visx

一、什么是visx visx 是用于 React 的富有表現力的底層可視化組件集合,結合了 d3 的強大功能來生成可視化,以及 React 更新 DOM 的諸多優勢。 在 Airbnb 內部,visx 的目標是統一整個公司的可視化堆棧,在此過程中,創建了 visx 項目,從而有效的將 D3 的強大功能與 React …