《Python編程從入門到實踐》day25

# 昨日知識點回顧

如何創建多行外星人

碰撞結束游戲

創建game_stats.py跟蹤統計信息

# 今日知識點學習

第14章 記分

14.1 添加Play按鈕

? ? ? ? 14.1.1 創建Button類

import pygame.font# button.py
class Button:def __init__(self, ai_game, msg):"""初始化按鈕的屬性"""self.screen = ai_game.screenself.screen_rect = self.screen.get_rect()# 設置按鈕的尺寸和其他屬性self.width, self.height = 200, 50self.button_color = (0, 255, 0)self.text_color = (255, 255, 255)self.font = pygame.font.SysFont(None, 48)# 創建按鈕的rect對象,并使其居中self.rect = pygame.Rect(0, 0, self.width, self.height)self.rect.center = self.screen_rect.center# 按鈕的標簽只需創建一次self._prep_msg(msg)def _prep_msg(self, msg):"""將msg渲染為圖像,并使其在按鈕上居中"""# 方法font.render()接受一個布爾實參,該實參制定開啟還是關閉反鋸齒功能(反鋸齒讓文本的邊緣更平滑)# 后面兩個實參分別是文本顏色和背景色(如果沒有指定背景色,pygame渲染文本時將使用透明背景)self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)self.msg_image_rect = self.msg_image.get_rect()self.msg_image_rect.center = self.rect.centerdef draw_button(self):# 繪制一個用顏色填充的按鈕,再繪制文本self.screen.fill(self.button_color, self.rect)# screen.blit傳遞一幅圖像以及與該圖像相關聯的rectself.screen.blit(self.msg_image, self.msg_image_rect)

? ? ? ? 14.1.2 在屏幕上繪制按鈕????????

# 主程序
import sys
from time import sleepimport pygamefrom Settings import Settings
from game_stats import GameStats
from button import Button
from Ship import Ship
from alien import Alien
from bullet import Bulletclass AlienInvasion:"""管理游戲資源和行為的類"""def __init__(self):"""初始化游戲并創建游戲資源"""pygame.init()self.settings = Settings()# 非全屏運行self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))# 全屏運行# self.screen = pygame.display.set_mode((0, 0), pygame.FULLSCREEN)# self.settings.screen_width = self.screen.get_rect().width# self.settings.screen_height = self.screen.get_rect().height# 設置當前窗口標題pygame.display.set_caption("Alien Invasion")# 創建一個用于存儲游戲統計信息的實例self.stats = GameStats(self)self.ship = Ship(self)# 創建子彈精靈組self.bullets = pygame.sprite.Group()# 創建外星人精靈組self.aliens = pygame.sprite.Group()self._create_fleet()# 創建Play按鈕self.play_button = Button(self, "Play")-----snip-----def _update_screen(self):"""更新屏幕上的圖像,并切換到新屏幕。"""self.screen.fill(self.settings.bg_color)self.ship.blitme()for bullet in self.bullets.sprites():bullet.draw_bullet()self.aliens.draw(self.screen)# 如果游戲處于非活動狀態,就繪制Play按鈕if not self.stats.game_active:self.play_button.draw_button()# 讓最近繪制的屏幕可見pygame.display.flip()
-----snip-----

????????運行結果:(Play按鈕出現)

? ? ? ? ?14.1.3 開始游戲

# 主程序
----snip----def _check_events(self):"""響應按鍵和鼠標事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:self._check_keydown_events(event)elif event.type == pygame.KEYUP:self._check_keyup_events(event)elif event.type == pygame.MOUSEBUTTONDOWN:# 玩家鼠標點擊Play按鈕做出響應# pygame.mouse.get_pos()返回玩家單擊時鼠標(x,y)元組mouse_pos = pygame.mouse.get_pos()self._check_play_button(mouse_pos)def _check_play_button(self, mouse_pos):"""在玩家單擊Play按鈕時開始新游戲"""if self.play_button.rect.collidepoint(mouse_pos):self.stats.game_active = True
----snip----

? ? ? ? 14.1.4 重置游戲

# 主程序def _check_play_button(self, mouse_pos):"""在玩家單擊Play按鈕時開始新游戲"""if self.play_button.rect.collidepoint(mouse_pos):# 重置游戲統計信息self.stats.reset_stats()self.stats.game_active = True# 清空余下的外星人和子彈self.aliens.empty()self.bullets.empty()# 創建一群新的外星人并讓飛船居中self._create_fleet()self.ship.center_ship()

? ? ? ? 14.1.5 將Play按鈕切換到非活動狀態

# 主程序def _check_play_button(self, mouse_pos):"""在玩家單擊Play按鈕時開始新游戲"""# game_active為False時游戲才開始并顯示Play按鈕button_clicked = self.play_button.rect.collidepoint(mouse_pos)if button_clicked and not self.stats.game_active:# 重置游戲統計信息self.stats.reset_stats()self.stats.game_active = True# 清空余下的外星人和子彈self.aliens.empty()self.bullets.empty()# 創建一群新的外星人并讓飛船居中self._create_fleet()self.ship.center_ship()

? ? ? ? 14.1.6 隱藏鼠標光標

# 主程序def _check_play_button(self, mouse_pos):"""在玩家單擊Play按鈕時開始新游戲"""# game_active為False時游戲才開始并顯示Play按鈕button_clicked = self.play_button.rect.collidepoint(mouse_pos)if button_clicked and not self.stats.game_active:# 重置游戲統計信息self.stats.reset_stats()self.stats.game_active = True# 清空余下的外星人和子彈self.aliens.empty()self.bullets.empty()# 創建一群新的外星人并讓飛船居中self._create_fleet()self.ship.center_ship()# 隱藏鼠標光標pygame.mouse.set_visible(False)def _ship_hit(self):"""響應飛船被外星人撞到"""if self.stats.ships_left > 0:# 將Ship_left減1self.stats.ships_left -= 1# 清空余下的外星人和子彈self.aliens.empty()self.bullets.empty()# 創建一批新的外星人,并將飛船放到屏幕底部的中央self._create_fleet()self.ship.center_ship()# 暫停sleep(0.5)else:self.stats.game_active = False# 游戲結束,重新顯示光標pygame.mouse.set_visible(True)

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

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

相關文章

【Python系列】Python中列表屬性提取

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

地下工程中測斜儀的關鍵應用

地下工程,如隧道、地鐵和基坑等項目的建設,對于現代城市的發展至關重要。然而,這些工程的實施往往伴隨著諸多風險,特別是與周圍土體的穩定性有關的風險。為了確保工程的安全進行,實時監測技術變得尤為關鍵。其中&#…

vue3專欄項目 -- 三、使用vue-router 和 vuex(下)

一、添加columnDetail 頁面 首頁有專欄列表(ColumnList組件),專欄列表中有很多專欄,然后點擊某個專欄就進入專欄詳情頁(ColumnDetail組件),專欄詳情頁中有很多文章,點擊某個文章就進…

經開區創維汽車車輛交接儀式順利舉行,守護綠色出行助力低碳發展

5月10日,“創維新能源汽車進機關”交車儀式于徐州順利舉行,20輛創維EV6 II正式交付經開區政府投入使用。經開區陳琳副書記、黨政辦公室副主任張馳主任、經開區公車管理平臺苑忠民科長、創維汽車總裁、聯合創始人吳龍八先生、創維汽車營銷公司總經理饒總先…

配置管理與IT資產管理:差異與協同共生

在信息技術日新月異的今天,高效、可靠的IT服務管理成為企業競爭力的關鍵一環。ITIL4 作為業界公認的IT服務管理框架,為我們提供了一套全面而系統的實踐指南。在這一框架下,配置管理和IT資產管理作為兩大核心實踐,雖各有側重&#…

線路和繞組中的波過程(三)

本篇為本科課程《高電壓工程基礎》的筆記。 本篇為這一單元的第三篇筆記。上一篇傳送門。 沖擊電暈對線路上波過程的影響 實際中的導線存在電阻,而且還有對地電導,會消耗一部分能量。但是因為雷擊所涉及的傳輸距離很短,所以幾乎可以忽略這…

深入解析RedisSearch:全文搜索的新維度

碼到三十五 : 個人主頁 在當今的數據時代,信息的檢索與快速定位變得尤為關鍵。Redis,作為一個高性能的內存數據庫,已經在緩存和消息系統中占據了重要地位。然而,Redis并不直接支持復雜的搜索功能。為了填補這一空白&am…

【計算機網絡】計算機網絡概述、計算機網絡性能指標 習題1

0 1. 計算機網絡可被理解為( )。 A.執行計算機數據處理的軟件模塊 B. 由自治的計算機互連起來的集合體 C.多個處理器通過共享內存實現的緊耦合系統 D. 用于共同完成一項任務的分布式系統 0 2.計算機網絡最基本的功能是( )。 A.數據通信 B. 資源共享 C. 分布式處理 D. 信息綜合…

python的deap庫使用記錄

主要是在遺傳符號回歸的代碼中添加了注釋和根據一部分源碼做了一點改動 import operator import random import numpy as np import matplotlib.pyplot as plt from deap import algorithms, base, creator, tools, gp from operator import attrgetter##生成數據 def generat…

【Python系列】字節串與字典字節串

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

ASP.NET WebApi 如何使用 OAuth2.0 認證

前言 OAuth 2.0 是一種開放標準的授權框架,用于授權第三方應用程序訪問受保護資源的流程。 OAuth 2.0 認證是指在這個框架下進行的身份驗證和授權過程。 在 OAuth 2.0 認證中,涉及以下主要參與方: 資源所有者(Resource Owner&…

【.NET Cote】你真的了解HttpRuntime類嗎

【.NET Cote】你真的了解HttpRuntime類嗎 文章目錄 【.NET Cote】你真的了解HttpRuntime類嗎一、HttpRuntime概述二、HttpRuntime是什么包三、HttpRuntime屬性四、HttpRuntime方法五、HttpRuntime.Cache方法六、HttpRuntime.Cache應用 一、HttpRuntime概述 C# HttpRuntime是一…

JAVA基礎之下載,socket實現網絡聊天

目錄 一、如何利用正則表達式找到img標簽 compile編譯編制 二、下載圖片的方法 三、socket實現網絡聊天 1.inputStreamReader 字節的讀取流--->字符的讀取流 2.outputStreamWriter 字節的寫入流--->字符的寫入流 一、如何利用正則表達式找到img標簽 compile編譯編制…

antd組件狀態變換為啥要使用剪頭函數

先看下代碼 import React, {useState} from react; import {Switch, Typography} from antd;const {Paragraph, Text} Typography;const App: React.FC () > { const [ellipsis, setEllipsis] useState(true);return (<>//正確的<Switch checked{ellipsis}onCh…

掌握SQL的時間序列分析利器:LEAD與LAG函數詳解

在SQL中&#xff0c;處理時間序列數據時&#xff0c;經常需要查看當前行與相鄰行之間的關系。這時&#xff0c;LEAD和LAG兩個窗口函數就顯得尤為重要。它們允許我們訪問結果集中的前一行或后一行的數據&#xff0c;為數據分析和處理提供了極大的便利。本文將詳細介紹LEAD和LAG函…

steam_api64.dll是什么東西?steam_api64.dll缺失的多個詳細解決方法

在現代PC游戲領域&#xff0c;Steam無疑是最具影響力的游戲分發和社交平臺之一。它不僅提供了一個龐大的游戲市場&#xff0c;還集成了好友系統、成就系統、云存儲等多種功能&#xff0c;為數百萬玩家提供了便捷的游戲體驗。在這龐大的生態系統中&#xff0c;steam_api64.dll作…

Windows10環境搭建http服務器

我 的 個 人 主 頁&#xff1a;&#x1f449;&#x1f449; 失心瘋的個人主頁 &#x1f448;&#x1f448; 入 門 教 程 推 薦 &#xff1a;&#x1f449;&#x1f449; Python零基礎入門教程合集 &#x1f448;&#x1f448; 虛 擬 環 境 搭 建 &#xff1a;&#x1f449;&…

基于 Wireshark 分析 IP 協議

一、IP 協議 IP&#xff08;Internet Protocol&#xff09;協議是一種網絡層協議&#xff0c;它用于在計算機網絡中實現數據包的傳輸和路由。 IP協議的主要功能有&#xff1a; 1. 數據報格式&#xff1a;IP協議將待傳輸的數據分割成一個個數據包&#xff0c;每個數據包包含有…

[Markdown]是時候該學學使用markdown寫文章了

&#x1f495;&#x1f495;&#x1f495;歡迎各位來到我的博客&#xff0c;今天我們的主題是markdown&#xff0c;你將在這里學習到最全的markdown知識&#x1f495;&#x1f495;&#x1f495; 你還在使用富文本編輯器寫文檔或文章嗎&#xff1f; 你還在用word一點一點地進行…

算法訓練營day29

一、組合 參考鏈接77. 組合 - 力扣&#xff08;LeetCode&#xff09; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; import java.util.List;public class Solution {public List<List<Integer>> combine (int n, int k) …