Python游戲編程之賽車游戲6-2

3.2 move()方法的定義

Player類的move()方法用于玩家控制汽車左右移動,當玩家點擊鍵盤上的左右按鍵時,汽車會相應地進行左右移動。

move()方法的代碼如圖7所示。

圖7 move()方法的代碼

其中,第20行代碼通過pygame.key.get_pressed()函數獲取鍵盤中所有按鍵的狀態,并將其保存在變量pressed_keys中,當玩家按下了向左的按鍵,pressed_keys[K_LEFT]的值是True,當玩家按下了向右的按鍵,pressed_keys[K_RIGHT]的值是True。第22-24行代碼中,首先判斷玩家汽車的位置是否已經到了屏幕的最左端,如果沒有在屏幕最左端,則第23行代碼判斷玩家是否按下了向左的按鍵,如果該按鍵被按下則第24行代碼將玩家汽車的位置向左移動5個單位。第22-24行代碼保證了如果玩家汽車位于屏幕最左端,此時不會再移動到屏幕之外。同理,第25-27行代碼是對用戶按下了向右按鍵的處理,第25行代碼判斷玩家汽車是否位于屏幕的最右端,如果沒有在最右端,則第26行代碼判斷玩家是否按下了向右的按鍵,如果該按鍵被按下則第27行代碼將玩家汽車的位置向右移動5個單位。第25-27行代碼保證了如果玩家汽車位于屏幕最右端,此時不會再移動到屏幕之外。

相關鏈接5 ?Pygame的Rect類的資料,請參考

《Pygame中Rect類的使用方法2-1》

《Pygame中Rect類的使用方法2-2》

相關鏈接6 Pygame的鍵盤監聽資料,請參考

《Pygame中監控鍵盤按鍵的方法》

4 實例化Player類及相關處理

4.1 實例化Player類

通過圖8所示的代碼實例化Player類。

圖8 實例化Player類的代碼

其中, P1是Player類的實例。

4.2 將P1加入到精靈組中

P1是Player類的實例,而Player類是pygame.sprite.Sprite類的子類,因此P1可以看作是一個“精靈”。將“精靈”加入到“精靈組”可以方便對多個“精靈”進行批量處理。代碼如圖9所示。

圖9 將P1加入到精靈組的代碼

其中,第29行通過pygame.sprite.Group()創建“精靈組”all_sprites,該“精靈組”中將會包含游戲中的所有“精靈”,即包含玩家也包含“敵人”。

4.3 顯示及控制玩家汽車

在while True循環中,通過“精靈組”all_sprites實現顯示及控制玩家汽車的功能,代碼如圖10所示。

圖10 顯示及控制玩家汽車的代碼

其中,第39行代碼通過for循環遍歷“精靈組”all_sprites中的所有精靈(目前組里面只有玩家一個精靈),之后第40行代碼調用精靈的move()方法控制“精靈”的移動;第41行代碼繪制“精靈”。

運行代碼后,游戲的效果如圖11所示。

圖11 游戲效果

5 完整代碼

以上內容的完整代碼如下所示。

import pygame
import os
from pygame.locals import *WIDTH = 400
HEIGHT = 600
pygame.init()
screen = pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption('賽車游戲')background = pygame.image.load("AnimatedStreet.png")class Player(pygame.sprite.Sprite):def __init__(self):super().__init__() self.image = pygame.image.load("Player.png")self.rect = self.image.get_rect()self.rect.center = (160, 520)def move(self):pressed_keys = pygame.key.get_pressed()if self.rect.left > 0:if pressed_keys[K_LEFT]:self.rect.move_ip(-5, 0)if self.rect.right < WIDTH:        if pressed_keys[K_RIGHT]:self.rect.move_ip(5, 0)
P1 = Player()
all_sprites = pygame.sprite.Group()
all_sprites.add(P1)while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()os.sys.exit()screen.blit(background, (0,0))for entity in all_sprites:entity.move()screen.blit(entity.image, entity.rect)pygame.display.update()

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

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

相關文章

日語學習-日語知識點小記-構建基礎-JLPT-N4N5階段(12):普通(ふつう)形 :變化方式 :日常朋友家人之間對話

日語學習-日語知識點小記-構建基礎-JLPT-N4&N5階段(12):普通(ふつう)形 :變化方式 :日常朋友&家人之間對話  1、前言(1)情況說明(2)工程師的信仰2、知識點(1)普通(ふつう)形:Plain style:簡體3、單詞(1)日語單詞(2)日語片假名單詞4、相近詞辨…

華為hcia——Datacom實驗指南——二層交換原理

實驗配置 eNSP 什么是二層交換 二層交換是指在同一個ip網段內&#xff0c;數據通過二層交換機進行轉發。 什么是mac地址 mac地址也叫做硬件地址&#xff0c;是以太網協議的鏈路層地址。簡單的來說&#xff0c;mac地址就是我們硬件的身份證&#xff0c;獨一無二。它是由48個bi…

粘貼到Word里的圖片顯示不全

粘貼到Word里的圖片顯示不全&#xff0c;可從Word設置、圖片本身、軟件與系統等方面著手解決&#xff0c;具體方法如下&#xff1a; Word軟件設置 經實踐發現&#xff0c;圖片在word行距的行距出現問題&#xff0c;可以按照如下調整行距進行處理 修改段落行距&#xff1a; 選…

HTML轉義和反轉義工具類

HTML轉義和反轉義工具類 package com.common.utils;import cn.hutool.http.HTMLFilter; import org.apache.commons.lang3.StringUtils;/*** 轉義和反轉義工具類** author lxx*/ public class EscapeUtil {public static final String RE_HTML_MARK "(<[^<]*?>…

Android之圖片保存相冊及分享圖片

文章目錄 前言一、效果圖二、實現步驟1.引入依賴庫2.二維碼生成3.布局轉圖片保存或者分享 總結 前言 其實現在很多分享都是我們自定義的&#xff0c;更多的是在界面加了很多東西&#xff0c;然后把整個界面轉成圖片保存相冊和分享&#xff0c;而且現在分享都不需要第三方&…

以繪圖(繪制點、直線、圓、橢圓、多段線)為例子 通過設計模式中的命令模式實現

為了在命令模式的基礎上實現撤銷&#xff08;Undo&#xff09;和回退&#xff08;Redo&#xff09;功能&#xff0c;我們可以在每個命令類中記錄一些必要的狀態&#xff0c;允許我們撤銷之前的操作&#xff0c;并在需要時回退操作。常見的做法是使用一個命令堆棧來存儲歷史命令…

git從本地其他設備上fetch分支

在 Git 中&#xff0c;如果你想從本地其他設備上獲取分支&#xff0c;可以通過以下幾種方式實現。不過&#xff0c;需要注意的是&#xff0c;Git 本身是分布式版本控制系統&#xff0c;通常我們是從遠程倉庫&#xff08;如 GitHub、GitLab 等&#xff09;拉取分支&#xff0c;而…

故障診斷 | Matlab實現基于DBO-BP-Bagging多特征分類預測/故障診斷

故障診斷 | Matlab實現基于DBO-BP-Bagging多特征分類預測/故障診斷 目錄 故障診斷 | Matlab實現基于DBO-BP-Bagging多特征分類預測/故障診斷分類效果基本介紹模型描述DBO-BP-Bagging蜣螂算法優化多特征分類預測一、引言1.1、研究背景和意義1.2、研究現狀1.3、研究目的與方法 二…

CentOS停服后的替代選擇:openEuler、Rocky Linux及其他系統的未來展望

CentOS停服后的替代選擇&#xff1a;openEuler、Rocky Linux及其他系統的未來展望 引言CentOS停服的背景華為openEuler&#xff1a;面向未來的開源操作系統1. 簡介2. 特點3. 發展趨勢 Rocky Linux&#xff1a;CentOS的精神繼承者1. 簡介2. 特點3. 發展趨勢 其他可選的替代系統1…

docker部署go簡單web項目(無mysql等附加功能)

首先準備好go語言代碼 代碼表示當訪問主機上8080端口下的/hello路徑時&#xff0c;會返回hello&#xff0c;world。 package mainimport ("fmt""github.com/gin-gonic/gin" )type hh struct {S string }func main() {router : gin.Default()router.GET(&…

OceanBase數據庫實戰:Windows Docker部署與DBeaver無縫對接

一、前言 OceanBase 是一款高性能、高可擴展的分布式數據庫&#xff0c;適用于大規模數據處理和企業級應用。 隨著大數據和云計算的普及&#xff0c;OceanBase 在企業數字化轉型中扮演著重要角色。學習 OceanBase 可以幫助開發者掌握先進的分布式數據庫技術&#xff0c;提升數…

在 HuggingFace 中使用 SSH 進行下載數據集和模型

SSH 是一種 安全通訊的協議&#xff0c;我們通過配置 SSH 的密鑰 來在 Git 上實現 Huggingface 模型的命令行下載。 參考網址&#xff1a;https://huggingface.co/docs/hub/security-git-ssh 點擊自己的頭像&#xff0c;點擊 Add SSH key 在 Windows 上&#xff0c;我們實現已…

.NET Core MVC IHttpActionResult 設置Headers

最近碰到調用我的方法要求返回一個代碼值&#xff0c;但是要求是不放在返回實體里&#xff0c;而是放在返回的Headers上 本來返回我是直接用 return Json(res) 這種封裝的方法特別簡單&#xff0c;但是沒有發現設置headers的地方 查詢過之后不得已換了個返回 //原來方式 //…

Linux-----進程間通信

一、按通信范圍分類 同一主機進程通信 傳統IPC方式&#xff1a; 管道&#xff08;無名管道、有名管道&#xff09;信號&#xff08;Signal&#xff09; System V IPC&#xff1a; 共享內存&#xff08;效率最高&#xff09;消息隊列信號量 POSIX IPC&#xff08;較新標準&#…

Ant Design按鈕樣式深度適配:實現<Button>與<a>標簽顏色完美同步

Ant Design按鈕樣式深度適配&#xff1a;實現與標簽顏色完美同步 問題現象診斷 組件結構原型 <Button type"link" disabled{disabled}><a href"...">下載</a> </Button>樣式沖突表現 狀態按鈕顏色鏈接顏色視覺問題啟用態Ant藍…

使用Python爬蟲獲取淘寶商品詳情:API返回值說明與案例指南

在電商數據分析和運營中&#xff0c;獲取淘寶商品詳情是常見的需求。淘寶開放平臺提供了豐富的API接口&#xff0c;允許開發者通過合法的方式獲取商品信息。本文將詳細介紹如何使用Python編寫爬蟲&#xff0c;通過淘寶API獲取商品詳情&#xff0c;并解析API返回值的含義和結構。…

并發 -- 無鎖算法與結構

文章目錄 什么是無鎖算法什么是原子變量什么是CAS操作Compare-And-Swap Weak在哪些情況下會失敗舉例說明無鎖結構無鎖結構的問題 什么是無鎖算法 無鎖算法&#xff08;Lock-Free Algorithm&#xff09;是一種并發編程技術&#xff0c;旨在實現多線程環境下的高效數據共享&…

考研/保研復試英語問答題庫(華工建院)

華南理工大學建筑學院保研/考研 英語復試題庫&#xff0c;由華工保研er和學碩筆試第一同學一起整理&#xff0c;覆蓋面廣&#xff0c;助力考研/保研上岸&#xff01;需要&#x1f447;載可到文章末尾見小&#x1f360;。 以下是主要內容&#xff1a; Part0 復試英語的方法論 Pa…

岳陽市美術館預約平臺(小程序論文源碼調試講解)

第4章 系統設計 一個成功設計的系統在內容上必定是豐富的&#xff0c;在系統外觀或系統功能上必定是對用戶友好的。所以為了提升系統的價值&#xff0c;吸引更多的訪問者訪問系統&#xff0c;以及讓來訪用戶可以花費更多時間停留在系統上&#xff0c;則表明該系統設計得比較專…

Python游戲編程之賽車游戲6-3

1 “敵人”汽車類的創建 在創建玩家汽車類之后&#xff0c;接下來創建“敵人”汽車類。“敵人”汽車類與玩家類一樣&#xff0c;也是包含兩個方法&#xff0c;一個是__init__()&#xff0c;另一個是move()。 1.1 __init__()方法 “敵人”汽車類的__init__()方法代碼如圖1所示…