python 寫游戲好簡單啊,我用鍵盤可以隨意控制角色了【python 游戲實戰 04】

前言

本系列文章將會以通俗易懂的對話方式進行教學,對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新,包括別的語言以及實戰都將使用對話的方式進行教學,基礎編程語言教學適用于零基礎小白,之后實戰課程也將會逐步更新。

若有想學習的內容可以在評論區留言,根據大家的要求持續更新。點贊過十萬就算化成灰我也更新下一篇。(肯定不到,也會更的。)

有問題也可以在評論區留言,也可以私聊我加我好友共同交流一起進步~

我的其它教程

教程點擊進去將會有目錄

《看聊天記錄都學不會C語言?太菜了吧(1)我在大佬群里問基礎問題沒人理?——學習建議

《大學生C語言作業、習題100例白話詳解》

目錄

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》python 寫游戲好簡單啊,我用鍵盤可以隨意控制角色了【python 游戲實戰 04】—— 鍵盤控制角色移動

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》游戲角色開始動起來了,真帥!【python 游戲實戰 03】—— 角色移動

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》這是我第一次使用代碼創建出一個窗口【python 游戲實戰 02】—— 創建游戲場景

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》這是我第一次使用代碼創建出一個窗口【python 游戲實戰 01】—— 創建窗口

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(12)python 的列表我從沒想過會那么好用—— 列表

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(11)python里面while到底有多少知識點—— break continue

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(10)無底洞的循環—— 循環初窺

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(9)集萬家之長不死 python—— 導包

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(8)我們開始做一個數字小游戲吧—— 數字游戲開始做 導包

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(7)我用函數寫了個特洛伊木馬—— 自定義函數

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(6)不會這個知識點代碼越寫越難—— and or 邏輯運算

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(5)用前朝的劍斬今朝的官——if…else

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(4)小白不知道這個知識點將會錯漏百出——if 與 層級

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(3)都說123是字符不是數字——輸入與類型

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(2)在python中加號竟然如此善變——變量與運算

《看聊天記錄都學不會Python到游戲實戰?太菜了吧》(1)裝載Python神器!亮劍!——helloworld


作者簡介

作者名:1_bit

簡介:CSDN博客專家,2020年博客之星TOP5,藍橋簽約作者。15-16年曾在網上直播,帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息,迷茫的你會找到答案。

博客地址:https://i1bit.blog.csdn.net


🐰小C:小媛,上一節我們繪制了一個場景,移動了角色,那么這一節我們就開始控制主角并且讓他進行移動吧?

👸小媛:我怎么感覺你突然變得好心了,以前每一節就講一點內容,然后就開始跟我拌嘴水字數,這一節怎么直奔主題?😂

🐰小C:有嘛?是你跟我拌嘴的好嘛?你不信去看聊天記錄。

👸小媛:真的嗎?那還不是你在水字數。

🐰小C:哈哈哈,這一節不水了,開始玩真的吧。

👸小媛:趕緊的,你又水了 224 個md字數了。😂

🐰小C:行,我們先看一下我們上一節的代碼。

import pygamepygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("這是一個飛機游戲")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
hero=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
pygame.display.set_icon(icon)
heroX=250 #x坐標
#游戲主循環
while True:#事件遍歷for event in pygame.event.get():if event.type==pygame.QUIT:exit()heroX=heroX-3screen.blit(bg,(0,0))screen.blit(hero,(heroX,680))pygame.display.update()

🐰小C:上一節我們只是使用了代碼對主角進行移動,那么現在我們改一下,我們按上,主角就往上走、按下主角就往下走,其它按鍵依次類推如何?

👸小媛:行,你說啥就是啥,終于不廢話了。 😰

🐰小C:不不不,還是需要點情節來讓整個氛圍輕松的。

👸小媛:趕緊吧,別廢話,真是禁不起夸。

🐰小C:哈哈哈,其實我們剛剛已經獲取到了這個游戲中發生的所有事件 pygame.event.get(),我們只是從獲取的事件中判斷是否做了退出事件,那么在這里我們只需要再判斷是否按下了特定的鍵,那么就可以對特定的鍵做出反應了。

👸小媛:然后根據上一節所學,我們只需要根據不同按鍵控制這個主角下一次繪制所在的位置就可以了吧?

🐰小C:是的,我們首先判斷按下什么鍵吧。

import pygamepygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("這是一個飛機游戲")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
hero=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
pygame.display.set_icon(icon)
#游戲主循環
while True:#事件遍歷for event in pygame.event.get():if event.type==pygame.QUIT:exit()if event.type==pygame.KEYDOWN:if event.key == pygame.K_RIGHT:print('→')elif event.key == pygame.K_LEFT:print('←')elif event.key == pygame.K_UP:print('↑')elif event.key == pygame.K_DOWN:print('↓')screen.blit(bg,(0,0))screen.blit(hero,(heroX,680))pygame.display.update()

👸小媛:if event.key == pygame.K_RIGHT 就是判斷是否按下的鍵嗎?

🐰小C:是的,event.key 表示具體按下了什么鍵,如果 event.key 等于 pygame.K_RIGHT 那么就表示按下了右鍵頭,那么就運行 print('→') 輸出打印出 → 箭頭。

👸小媛:明白了。然后 pygame.K_LEFT 是按下了左鍵、pygame.K_UP 表示按下上鍵、pygame.K_DOWN 表示按下了下鍵? 😶

🐰小C:是的,但是我們需要注意,必須是按下鍵后這個時間才會有 event.key 中的 key 這個類型,如果你沒按下是判斷不出來按下了什么鍵,所以前面 if event.type==pygame.KEYDOWN: 這句代碼至關重要,表示了你按下鍵后才進行判斷。你可以運行程序感受一下。

👸小媛:哈哈哈,好好玩,我按下什么就顯示什么。 😎

🐰小C:都正確響應了吧?

👸小媛:是的。

🐰小C:那么我們接下來就需要控制角色進行移動了。

👸小媛:我覺得有點會了,但是還需要你寫出來看一下,我總感覺我會出錯。

🐰小C:我們先控制角色左右移動吧?

👸小媛:可以呀,沒問題。 😎

🐰小C:我們知道,在這個屏幕中左右是控制 X 坐標,X越大那么越靠右,X越小那么就越靠左,我們按下左鍵的時候 X 軸的值就應該變小,如果按下右鍵那么 X 軸的值就應該越大。我們只需要在按下左右鍵的時候給一個變量賦予一個正值或者負值,正值表示往右負值表示往左,并且每次 hero 主句的 X 軸的值加上這個值就可以了。

import pygamepygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("這是一個飛機游戲")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
hero=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
pygame.display.set_icon(icon)
heroX=250
heroY=680
stepX=0
#游戲主循環
while True:#事件遍歷for event in pygame.event.get():if event.type==pygame.QUIT:exit()if event.type==pygame.KEYDOWN:if event.key == pygame.K_RIGHT:stepX=5elif event.key == pygame.K_LEFT:stepX=-5elif event.key == pygame.K_UP:print('↑')elif event.key == pygame.K_DOWN:print('↓')heroX+=stepXscreen.blit(bg,(0,0))screen.blit(hero,(heroX,heroY))pygame.display.update()

👸小媛:你在按下右鍵的時候給予了 stepX 變量正值,按下左鍵給予了 stepX 鍵負值,然后每次循環 heroX 就加上這個 stepX 值,這樣按下左就可以一直往左?按下右就可以一直往右?

🐰小C:是的。

👸小媛:所以你把 hero 的 Y 值使用了變量 heroY,這樣也是為了方便操作吧?

🐰小C:是的,觀察挺仔細,注意,我在循環前是創建了這幾個變量的。

heroX=250
heroY=680
stepX=0

👸小媛:明白。

🐰小C:那我給你一個完整的代碼吧。

import pygamepygame.init()
screen=pygame.display.set_mode((600,800))
pygame.display.set_caption("這是一個飛機游戲")
icon=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
hero=pygame.image.load(r'E:\2dsrc\src\img\hero1.png')
bg=pygame.image.load(r'E:\2dsrc\src\img\bg.png')
pygame.display.set_icon(icon)
heroX=250
heroY=680
stepX=0
stepY=0
#游戲主循環
while True:#事件遍歷for event in pygame.event.get():if event.type==pygame.QUIT:exit()if event.type==pygame.KEYDOWN:if event.key == pygame.K_RIGHT:stepX=5elif event.key == pygame.K_LEFT:stepX=-5elif event.key == pygame.K_UP:stepY=-5elif event.key == pygame.K_DOWN:stepY=5heroX+=stepXheroY+=stepYscreen.blit(bg,(0,0))screen.blit(hero,(heroX,heroY))pygame.display.update()

👸小媛:上面的 stepY 就是新創建的變量用來判斷是按上還是按下?

🐰小C:是的,跟 stepX 一樣。

👸小媛:哈哈哈,可以移動了。 😎

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

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

相關文章

ASP.NET登錄以及注冊

數據模型&#xff1a; 1 public class Model2 {3 public Model()4 {5 //6 // TODO: 在此處添加構造函數邏輯7 //8 }9 private string _Ucode; 10 /// <summary> 11 /// 賬號 12 /// </summary> 13 public…

樹形表的平行查詢設計

本文由網友長空X投稿&#xff0c;歡迎轉載、分享原文作者&#xff1a;長空X&#xff08;CSDN同名“長空X“&#xff0c;CkTools的作者&#xff0c;github: https://github.com/hjkl950217&#xff09;原文鏈接&#xff1a;https://www.cnblogs.com/gtxck/articles/16293295.htm…

Ubuntu 16.04安裝SQLite Browser操作SQLite數據庫

安裝&#xff1a; sudo apt-get install sqlitebrowser 啟動&#xff1a;

ArcGIS10從入門到精通系列實驗視頻教程合集(持續更新)

全集視頻請點擊&#xff1a;《ArcGIS10.X從入門到精通系列實驗教程》

(13)python 字典 2 分鐘速解

本系列文章將會以通俗易懂的對話方式進行教學&#xff0c;對話中將涵蓋了新手在學習中的一般問題。此系列將會持續更新&#xff0c;包括別的語言以及實戰都將使用對話的方式進行教學&#xff0c;基礎編程語言教學適用于零基礎小白&#xff0c;之后實戰課程也將會逐步更新。 若…

Kotlin之函數作為參數傳遞

1 、Kotlin之函數作為參數傳遞 我們在寫BaseQuickAdapter適配器的時候,有時候嵌套多個BaseQuickAdapter,如果最里面的view觸發點擊事件,我們可以把函數作為參數通過構造函數一層一層傳遞進去。 2、代碼測試 private var test: (Boolean, Int, Int) -> Unit = {result, a…

計算機繪畫作品 星空,關于近期繪畫作品《星空系列》的自述:

《星空系列》是一個很偶然的念想下產生的&#xff0c;但又絕非偶然。最開初的點是高一剛開始學畫的時候&#xff0c;高中的老師給我們免費提供油畫材料給我們練習&#xff0c;那時候我并沒有“安分”地練習高考繪畫&#xff0c;總想做一些關于自己想法的作品&#xff0c;那時候…

BootStrap導航欄的使用

默認的導航欄 創建一個默認的導航欄的步驟如下&#xff1a; 向 <nav> 標簽添加 class .navbar、.navbar-default。向上面的元素添加 role"navigation"&#xff0c;有助于增加可訪問性。向 <div> 元素添加一個標題 class .navbar-header&#xff0c;內部包…

安裝SQL Server 2005時,出現“SQL Server 服務無法啟動。……”提示的解決方法

安裝SQL Server 2005時&#xff0c;出現“SQL Server 服務無法啟動。……”提示的解決方法上午在自己XP SP3電腦上安裝SQL Server 2005時出現如下提示&#xff1a; 根據這一情況&#xff0c;我把自己的解題步驟寫下來和大家分享&#xff0c;雖然簡單了些&#xff0c;可是安裝的…

.NET MAUI 正式發布,再見了 Xamarin.Forms

David Ortinau 在dotnet 團隊博客上發表了一篇文章《Introducing .NET MAUI – One Codebase, Many Platforms》&#xff0c;在這篇文章里宣布了MAUI的正式發布。https://github.com/dotnet/maui/releases/tag/6.0.312 https://devblogs.microsoft.com/dotnet/introducing-dotn…

南京師范大學湯國安教授《地理信息與人類生活》系列精品課程(5集全)

《地理信息與人類生活》湯國安老師公共課&#xff08;5集全&#xff09; 人類掌握與應用地理信息的歷史&#xff0c;從一個側面反映了人類社會的發展進程。在數字化的時代&#xff0c;地理信息技術更是滲透到人類生活的方方面面。本課程通過五節課程的講解&#xff0c;展示了地…

利用SQL注入獲取服務器最高權限

單位有臺數據庫服務器&#xff08;windows 2000 操作系統&#xff0c;sql server 2000&#xff09;前段時間莫名其妙的被***了跑到機房&#xff0c;通過PE進去一看&#xff0c;發現多了一個賬戶&#xff08;SQLDEBUG)。并且administrator賬戶被禁用了看看數據沒少&#xff0c;也…

3分鐘搞定 C++ if else 語句 05

作者簡介 作者名&#xff1a;1_bit 簡介&#xff1a;CSDN博客專家&#xff0c;2020年博客之星TOP5&#xff0c;藍橋簽約作者。15-16年曾在網上直播&#xff0c;帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息&#xff0c;迷茫的你會找到答案。系列教程將會…

Android之封裝倒計時頁面

1 、需求 多個頁面需要用到顯示定時器頁面,頁面里面時間會一秒一秒減少,頁面布局如下,開了定時器,如果其它頁面也打開會使用之前的頁面里面顯示的時間,也就是說在有效范圍內,時間不刷新。 2 、關鍵點 使用Android自帶的倒計時類CountDownTimer CountDownTimer mCount…

計算機什么的有序集合叫程序,程序是什么有序集合

大家好&#xff0c;我是時間財富網智能客服時間君&#xff0c;上述問題將由我為大家進行解答。程序是為實現特定目標或解決特定問題而用計算機語言編寫的命令有序集合&#xff0c;為進行某活動或過程所規定的途徑。程序&#xff0c;香港和臺灣對英文procedure的中文翻譯&#x…

Javascript中數組去重的六種方法

數組去重 第一種方法&#xff1a;先對數組進行排序sort()&#xff0c;排好序&#xff0c;然后把數組的當前項和后一項進行比較&#xff0c;相同則使用數組的splice(相同的位置&#xff0c;1)&#xff0c;但是為了防止數組塌陷&#xff0c;每次刪除數組元素的時候要把i的值減一。…

GIS宣傳片《地理空間信息革命》視頻全集

《地理空間信息革命》第一集 《地理空間信息革命》第一集&#xff1a;介紹了全球定位系統&#xff08;GPS&#xff09;&#xff0c;地理空間信息系統&#xff08;GIS&#xff09;和數字測繪和地理空間技術的歷史和應用。 《地理空間信息革命》第二集 《地理空間信息革命》第二集…

1小時學會不打代碼制作一個網頁精美簡歷(1)

作者簡介 作者名&#xff1a;1_bit 簡介&#xff1a;CSDN博客專家&#xff0c;2020年博客之星TOP5&#xff0c;藍橋簽約作者。15-16年曾在網上直播&#xff0c;帶領一批程序小白走上程序員之路。歡迎各位小白加我咨詢我相關信息&#xff0c;迷茫的你會找到答案。系列教程將會在…

分部方法 partial

當有如下這樣類似的情況出現的時候&#xff0c;可以有更好的優化方式來處理&#xff0c;那就是分部方法 1 class PartOld2 {3 string name;4 5 public virtual void OnChangeName(string str)6 {7 }8 9 public string Name 10…

Android之解決APP奔潰重啟導致Fragment白屏問題

1、問題 問題APP奔潰重啟導致依附的Fragment白屏問題 2、分析 app奔潰重啟Activity肯定更新了,但是依附在Activity里面的fragment有緩存,用的是以前的activity的content,所以獲取到是空的, 就會導致fragment依附失敗,我們只需要activity不要保存當前fragment就行,直接不…