国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于“Python”的核心知識點整理大全38

這篇具有很好參考價值的文章主要介紹了關(guān)于“Python”的核心知識點整理大全38。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

關(guān)于“Python”的核心知識點整理大全38,掌握Python分類專欄:開啟智能數(shù)據(jù)處理之旅!,python,pygame,python,筆記,開發(fā)語言

14.1.1 創(chuàng)建 Button 類

由于Pygame沒有內(nèi)置創(chuàng)建按鈕的方法,我們創(chuàng)建一個Button類,用于創(chuàng)建帶標(biāo)簽的實心矩形。 你可以在游戲中使用這些代碼來創(chuàng)建任何按鈕。下面是Button類的第一部分,請將這個類保存為 文件button.py:

button.py
import pygame.font
class Button():
1 def __init__(self, ai_settings, screen, msg):
 """初始化按鈕的屬性"""
 self.screen = screen
 self.screen_rect = screen.get_rect()
 # 設(shè)置按鈕的尺寸和其他屬性
2 self.width, self.height = 200, 50
 self.button_color = (0, 255, 0)
 self.text_color = (255, 255, 255)
3 self.font = pygame.font.SysFont(None, 48)
 # 創(chuàng)建按鈕的rect對象,并使其居中
4 self.rect = pygame.Rect(0, 0, self.width, self.height)
 self.rect.center = self.screen_rect.center
 # 按鈕的標(biāo)簽只需創(chuàng)建一次
5 self.prep_msg(msg)

首先,我們導(dǎo)入了模塊pygame.font,它讓Pygame能夠?qū)⑽谋句秩镜狡聊簧稀7椒╛_init__() 接受參數(shù)self,對象ai_settings和screen,以及msg,其中msg是要在按鈕中顯示的文本(見1)。 我們設(shè)置按鈕的尺寸(見2),然后通過設(shè)置button_color讓按鈕的rect對象為亮綠色,并通過設(shè) 置text_color讓文本為白色。 在(見3)處,我們指定使用什么字體來渲染文本。實參None讓Pygame使用默認(rèn)字體,而48 指定了文本的字號。為讓按鈕在屏幕上居中,我們創(chuàng)建一個表示按鈕的rect對象(見4),并將 其center屬性設(shè)置為屏幕的center屬性。

Pygame通過將你要顯示的字符串渲染為圖像來處理文本。在5處,我們調(diào)用prep_msg()來處 理這樣的渲染。 prep_msg()的代碼如下:

button.py
def prep_msg(self, msg):
 """將msg渲染為圖像,并使其在按鈕上居中"""
1 self.msg_image = self.font.render(msg, True, self.text_color,
 self.button_color)
2 self.msg_image_rect = self.msg_image.get_rect()
 self.msg_image_rect.center = self.rect.center 

方法prep_msg()接受實參self以及要渲染為圖像的文本(msg)。調(diào)用font.render()將存儲在 msg中的文本轉(zhuǎn)換為圖像,然后將該圖像存儲在msg_image中(見1)。方法font.render()還接受 一個布爾實參,該實參指定開啟還是關(guān)閉反鋸齒功能(反鋸齒讓文本的邊緣更平滑)。余下的兩 個實參分別是文本顏色和背景色。我們啟用了反鋸齒功能,并將文本的背景色設(shè)置為按鈕的顏色 (如果沒有指定背景色,Pygame將以透明背景的方式渲染文本)。

在2處,我們讓文本圖像在按鈕上居中:根據(jù)文本圖像創(chuàng)建一個rect,并將其center屬性設(shè) 置為按鈕的center屬性。

最后,我們創(chuàng)建方法draw_button(),通過調(diào)用它可將這個按鈕顯示到屏幕上:

button.py
 def draw_button(self):
 # 繪制一個用顏色填充的按鈕,再繪制文本
 self.screen.fill(self.button_color, self.rect)
 self.screen.blit(self.msg_image, self.msg_image_rect)

我們調(diào)用screen.fill()來繪制表示按鈕的矩形,再調(diào)用screen.blit(),并向它傳遞一幅圖 像以及與該圖像相關(guān)聯(lián)的rect對象,從而在屏幕上繪制文本圖像。至此,Button類便創(chuàng)建好了。

14.1.2 在屏幕上繪制按鈕

我們將使用Button類來創(chuàng)建一個Play按鈕。鑒于只需要一個Play按鈕,我們直接在 alien_invasion.py中創(chuàng)建它,如下所示:

alien_invasion.py
--snip--
from game_stats import GameStats
from button import Button
--snip--
def run_game():
 --snip--
 pygame.display.set_caption("Alien Invasion")
 # 創(chuàng)建Play按鈕
1 play_button = Button(ai_settings, screen, "Play")
--snip--
 # 開始游戲主循環(huán)
 while True:
 --snip--
2 gf.update_screen(ai_settings, screen, stats, ship, aliens, bullets,
 play_button) 
run_game() 

我們導(dǎo)入Button類,并創(chuàng)建一個名為play_button的實例(見1),然后我們將play_button傳 遞給update_screen(),以便能夠在屏幕更新時顯示按鈕(見2)。

接下來,修改update_screen(),以便在游戲處于非活動狀態(tài)時顯示Play按鈕:

game_functions.py
def update_screen(ai_settings, screen, stats, ship, aliens, bullets,
 play_button):
 """更新屏幕上的圖像,并切換到新屏幕"""
 --snip--
 # 如果游戲處于非活動狀態(tài),就繪制Play按鈕
 if not stats.game_active:
 play_button.draw_button()
 # 讓最近繪制的屏幕可見
 pygame.display.flip() 

為讓Play按鈕位于其他所有屏幕元素上面,我們在繪制其他所有游戲元素后再繪制這個按 鈕,然后切換到新屏幕。如果你現(xiàn)在運(yùn)行這個游戲,將在屏幕中央看到一個Play按鈕,如圖14-1 所示。

關(guān)于“Python”的核心知識點整理大全38,掌握Python分類專欄:開啟智能數(shù)據(jù)處理之旅!,python,pygame,python,筆記,開發(fā)語言

14.1.3 開始游戲

為在玩家單擊Play按鈕時開始新游戲,需在game_functions.py中添加如下代碼,以監(jiān)視與這 個按鈕相關(guān)的鼠標(biāo)事件:

game_functions.py
def check_events(ai_settings, screen, stats, play_button, ship, bullets):
 """響應(yīng)按鍵和鼠標(biāo)事件"""
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
 --snip--
1 elif event.type == pygame.MOUSEBUTTONDOWN:
2 mouse_x, mouse_y = pygame.mouse.get_pos()
3 check_play_button(stats, play_button, mouse_x, mouse_y)
def check_play_button(stats, play_button, mouse_x, mouse_y):
 """在玩家單擊Play按鈕時開始新游戲"""
4 if play_button.rect.collidepoint(mouse_x, mouse_y):
 stats.game_active = True 

我們修改了check_events()的定義,在其中添加了形參stats和play_button。我們將使用stats 來訪問標(biāo)志game_active,并使用play_button來檢查玩家是否單擊了Play按鈕。

無論玩家單擊屏幕的什么地方,Pygame都將檢測到一個MOUSEBUTTONDOWN事件(見1),但我 們只想讓這個游戲在玩家用鼠標(biāo)單擊Play按鈕時作出響應(yīng)。為此,我們使用了pygame.mouse. get_pos(),它返回一個元組,其中包含玩家單擊時鼠標(biāo)的x和y坐標(biāo)(見2)。我們將這些值傳遞 給函數(shù)check_play_button()(見3),而這個函數(shù)使用collidepoint()檢查鼠標(biāo)單擊位置是否在 Play按鈕的rect內(nèi)(見4)。如果是這樣的,我們就將game_active設(shè)置為True,讓游戲就此開始! 在alien_invasion.py中調(diào)用check_events(),需要傳遞另外兩個實參——stats和play_ button:

alien_invasion.py
# 開始游戲主循環(huán)
 while True:
 gf.check_events(ai_settings, screen, stats, play_button, ship,
 bullets)
 --snip--

至此,你應(yīng)該能夠開始這個游戲了。游戲結(jié)束時,game_active應(yīng)為False,并重新顯示Play 按鈕。

14.1.4 重置游戲

前面編寫的代碼只處理了玩家第一次單擊Play按鈕的情況,而沒有處理游戲結(jié)束的情況,因 為沒有重置導(dǎo)致游戲結(jié)束的條件。

為在玩家每次單擊Play按鈕時都重置游戲,需要重置統(tǒng)計信息、刪除現(xiàn)有的外星人和子彈、 創(chuàng)建一群新的外星人,并讓飛船居中,如下所示:

game_functions.py
def check_play_button(ai_settings, screen, stats, play_button, ship, aliens,
 bullets, mouse_x, mouse_y):
 """在玩家單擊Play按鈕時開始新游戲"""
 if play_button.rect.collidepoint(mouse_x, mouse_y):
 # 重置游戲統(tǒng)計信息
1 stats.reset_stats()
 stats.game_active = True
 # 清空外星人列表和子彈列表
2 aliens.empty()
 bullets.empty()
 # 創(chuàng)建一群新的外星人,并讓飛船居中
3 create_fleet(ai_settings, screen, ship, aliens)
 ship.center_ship()

我們更新了check_play_button()的定義,使其能夠訪問ai_settings、stats、ship、aliens 和bullets。為重置在游戲期間發(fā)生了變化的設(shè)置以及刷新游戲的視覺元素,它需要這些對象。 在1處,我們重置了游戲統(tǒng)計信息,給玩家提供了三艘新飛船。接下來,我們將game_active 設(shè)置為True(這樣,這個函數(shù)的代碼執(zhí)行完畢后,游戲就會開始),清空編組aliens和bullets(見 2),創(chuàng)建一群新的外星人,并將飛船居中(見3)。 check_events()的定義需要修改,調(diào)用check_play_button()的代碼亦如此:

game_functions.py
def check_events(ai_settings, screen, stats, play_button, ship, aliens,
 bullets):
 """響應(yīng)按鍵和鼠標(biāo)事件"""
 for event in pygame.event.get():
 if event.type == pygame.QUIT:
 --snip--
 elif event.type == pygame.MOUSEBUTTONDOWN:
 mouse_x, mouse_y = pygame.mouse.get_pos()
1 check_play_button(ai_settings, screen, stats, play_button, ship,
 aliens, bullets, mouse_x, mouse_y) 

check_events()的定義需要形參aliens,以便將它傳遞給check_play_button()。接下來,我 們修改了調(diào)用check_play_button()的代碼,以將合適的實參傳遞給它(見1)。 下面來修改alien_invasion.py中調(diào)用check_events()的代碼,以將實參aliens傳遞給它:

alien_invasion.py
 # 開始游戲主循環(huán)
 while True: 
 gf.check_events(ai_settings, screen, stats, play_button, ship,
 aliens, bullets)
 --snip--

現(xiàn)在,每當(dāng)玩家單擊Play按鈕時,這個游戲都將正確地重置,讓玩家想玩多少次就玩多少次!文章來源地址http://www.zghlxwxcb.cn/news/detail-779321.html


往期快速傳送門??(在文章最后):

感謝大家的支持!歡迎訂閱收藏!專欄將持續(xù)更新!

到了這里,關(guān)于關(guān)于“Python”的核心知識點整理大全38的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 關(guān)于“Python”的核心知識點整理大全46

    關(guān)于“Python”的核心知識點整理大全46

    目錄 16.1.3 提取并讀取數(shù)據(jù) highs_lows.py highs_lows.py 16.1.4 繪制氣溫圖表 highs_lows.py 16.1.5 模塊 datetime ?編輯 16.1.6 在圖表中添加日期 highs_lows.py 16.1.7 涵蓋更長的時間 highs_lows.py highs_lows.py 16.1.9 給圖表區(qū)域著色 highs_lows.py 往期快速傳送門??(在文章最后): 感謝大家的支持!歡迎

    2024年02月04日
    瀏覽(27)
  • 關(guān)于“Python”的核心知識點整理大全25

    關(guān)于“Python”的核心知識點整理大全25

    目錄 10.3.4 else 代碼塊、 10.3.5 處理 FileNotFoundError 異常 alice.py 在這個示例中,try代碼塊引發(fā)FileNotFoundError異常,因此Python找出與該錯誤匹配的 except代碼塊,并運(yùn)行其中的代碼。最終的結(jié)果是顯示一條友好的錯誤消息,而不是traceback: 10.3.6 分析文本 10.3.7 使用多個文件 word_cou

    2024年02月04日
    瀏覽(25)
  • 關(guān)于“Python”的核心知識點整理大全47

    關(guān)于“Python”的核心知識點整理大全47

    目錄 16.1.10 錯誤檢查 highs_lows.py highs_lows.py 16.2 制作世界人口地圖:JSON 格式 16.2.1 下載世界人口數(shù)據(jù) 16.2.2 提取相關(guān)的數(shù)據(jù) population_data.json world_population.py 16.2.3 將字符串轉(zhuǎn)換為數(shù)字值 world_population.py 2world_population.py 16.2.4 獲取兩個字母的國別碼 countries.py country_codes.py 往期快速傳

    2024年02月03日
    瀏覽(26)
  • 關(guān)于“Python”的核心知識點整理大全29

    關(guān)于“Python”的核心知識點整理大全29

    目錄 11.2.4 方法 setUp() 注意 11.3 小結(jié) 第二部分 項目1 外星人入侵 第12 章 武裝飛船 注意 12.1 規(guī)劃項目 12.2 安裝 Pygame 注意 12.2.1 使用 pip 安裝 Python 包 注意 如果你啟動終端會話時使用的是命令python3,那么在這里應(yīng)使用命令sudo python3 get-pip.py。 12.2.2 在 Linux 系統(tǒng)中安裝 Pygame 往

    2024年02月04日
    瀏覽(17)
  • 關(guān)于“Python”的核心知識點整理大全48

    關(guān)于“Python”的核心知識點整理大全48

    目錄 world_population.py 16.2.5 制作世界地圖 americas.py 16.2.6 在世界地圖上呈現(xiàn)數(shù)字?jǐn)?shù)據(jù) na_populations.py 16.2.7 繪制完整的世界人口地圖 world_population.py 16.2.8 根據(jù)人口數(shù)量將國家分組 world_population.py 16.2.9 使用 Pygal 設(shè)置世界地圖的樣式 world_population.py 往期快速傳送門??(在文章最后)

    2024年01月23日
    瀏覽(25)
  • 關(guān)于“Python”的核心知識點整理大全43

    關(guān)于“Python”的核心知識點整理大全43

    目錄 ?編輯 15.2.3 使2散點圖并設(shè)置其樣式 scatter_squares.py 15.2.4 使用 scatter()繪制一系列點 scatter_squares.py 15.2.5 自動計算數(shù)據(jù) scatter_squares.py 15.2.6 刪除數(shù)據(jù)點的輪廓 15.2.7 自定義顏色 15.2.8 使用顏色映射 scatter_squares.py 注意 15.2.9 自動保存圖表 15.3 隨機(jī)漫步 15.3.1 創(chuàng)建 RandomWalk()類

    2024年02月04日
    瀏覽(22)
  • 關(guān)于“Python”的核心知識點整理大全60

    關(guān)于“Python”的核心知識點整理大全60

    目錄 19.4 小結(jié) 第 20 章 設(shè)置應(yīng)用程序的樣式并對其 進(jìn)行部署 20.1 設(shè)置項目“學(xué)習(xí)筆記”的樣式 20.1.1 應(yīng)用程序 django-bootstrap3 settings.py settings.py 20.1.2 使用 Bootstrap 來設(shè)置項目“學(xué)習(xí)筆記”的樣式 20.1.3 修改 base.html 1. 定義HTML頭部 base.html 2. 定義導(dǎo)航欄 3. 定義頁面的主要部分 往期

    2024年01月17日
    瀏覽(37)
  • 關(guān)于“Python”的核心知識點整理大全26

    關(guān)于“Python”的核心知識點整理大全26

    目錄 10.3.9 決定報告哪些錯誤 10.4 存儲數(shù)據(jù) 10.4.1 使用 json.dump()和 json.load() number_writer.py number_reader.py 10.4.2 保存和讀取用戶生成的數(shù)據(jù) 對于用戶生成的數(shù)據(jù),使用json保存它們大有裨益,因為如果不以某種方式進(jìn)行存儲,等程 序停止運(yùn)行時用戶的信息將丟失。下面來看一個這樣

    2024年02月04日
    瀏覽(21)
  • 關(guān)于“Python”的核心知識點整理大全6

    目錄 4:操作列表 4.1 遍歷整個列表 4.1.1 深入地研究循環(huán) 4.1.2 在 for 循環(huán)中執(zhí)行更多的操作 4.1.3 在 for 循環(huán)結(jié)束后執(zhí)行一些操作 4.2 避免縮進(jìn)錯誤 4.2.1 忘記縮進(jìn) 4.2.2 忘記縮進(jìn)額外的代碼行 4.2.3 不必要的縮進(jìn) 4.2.4 循環(huán)后不必要的縮進(jìn) 往期快速傳送門??(在文章最后): 你經(jīng)

    2024年02月05日
    瀏覽(18)
  • 關(guān)于“Python”的核心知識點整理大全41

    關(guān)于“Python”的核心知識點整理大全41

    目錄 scoreboard.py game_functions.py game_functions.py 14.3.8 顯示等級 game_stats.py scoreboard.py scoreboard.py scoreboard.py game_functions.py game_functions.py alien_invasion.py 14.3.9 顯示余下的飛船數(shù) ship.py scoreboard.py ? 我們將最高得分圓整到最近的10的整數(shù)倍(1),并添加了用逗號表示的千分位分隔符(見

    2024年02月04日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包