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

百行Python代碼開發(fā)出游戲,原來Python可以這么強大!

這篇具有很好參考價值的文章主要介紹了百行Python代碼開發(fā)出游戲,原來Python可以這么強大!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

安裝pygame

下載對應python版本的pygame 運行以下命令

python updatescreen,python,游戲,pygame

創(chuàng)建Pygame窗口及響應用戶輸入

新建一個文件夾alien_invasion,并在文件夾中新建alien_invasion.py文件,輸入如下代碼。

運行上述代碼,我們可以得到一個灰色界面的窗口:

python updatescreen,python,游戲,pygame

創(chuàng)建設置類

為了在寫游戲的過程中能便捷地創(chuàng)建一些新功能,下面額外編寫一個settings模塊,其中包含一個Settings類,用于將所有設置存儲在一個地方。這樣在以后項目增大時修改游戲的外觀就更加容易。

我們首先將alien_invasion.py中的顯示屏大小及顯示屏顏色進行修改。

首先在alien_invasion文件夾下新建python文件settings.py,并向其中添加如下代碼

python updatescreen,python,游戲,pygame

然后在alien_invasion.py中導入Settings類,并使用相關設置,修改如下:

添加飛船圖像

接下來,我們需要將飛船加入游戲中。為了在屏幕上繪制玩家的飛船,我們將加載一幅圖像,再使用Pygame()方法blit()繪制它。

在游戲中幾乎可以使用各種類型的圖像文件,但是使用位圖(.bmp)文件最為簡單,這是因為Pygame默認加載位圖。

雖然其他類型的圖像也能加載,但是需要安裝額外的庫。

我們推薦去免費的圖片素材網(wǎng)站上去找圖像:https://pixabay.com/

我們在主項目文件夾(alien_invasion)中新建一個文件夾叫images,將如下bmp圖片放入其中。

python updatescreen,python,游戲,pygame

接下來,我們創(chuàng)建飛船類ship.py:

python updatescreen,python,游戲,pygame

重構:模塊game_functions

在大型項目中,經(jīng)常需要在添加新代碼前重構既有代碼。重構的目的是為了簡化代碼的結構,使其更加容易擴展。

我們將實現(xiàn)一個game_functions模塊,它將存儲大量讓游戲Alien invasion運行的函數(shù)。通過創(chuàng)建模塊game_functions,可避免alien_invasion.py太長,使其邏輯更容易理解。

函數(shù)check_events()

首先我們將管理事件的代碼移到一個名為check_events()的函數(shù)中,目的是為了隔離事件循環(huán)

python updatescreen,python,游戲,pygame

然后我們修改alien_invasion.py代碼,導入game_functions模塊,并將事件循環(huán)替換成對函數(shù)check_events()的調用:

函數(shù)update_screen()

將更新屏幕的代碼移到一個名為update_screen()函數(shù)中,并將這個函數(shù)放在模塊game_functions中:

python updatescreen,python,游戲,pygame

其中alien_invasion修改如下:

python updatescreen,python,游戲,pygame

從上面一套流程走下來,我們發(fā)現(xiàn):在實際的開發(fā)過程中,我們一開始將代碼編寫得盡可能的簡單,并在項目越來越復雜時進行重構。接下來我們開始處理游戲的動態(tài)方面。

駕駛飛船

這里我們要實現(xiàn)的就是使玩家通過左右箭頭鍵來控制飛船的左移與右移。

響應按鍵

因為在pygame中,每次按鍵都被注冊為KEYDOWN事件,在check_events()中,我們通過event.type檢測到KEYDOWN事件后還需進一步判斷是哪個按鍵。代碼如下:

python updatescreen,python,游戲,pygame

允許不斷移動

玩家按住右箭頭不動時,我們希望飛船能不斷地移動,直到玩家松開為止。這里我們通過KETUO事件來判斷。因此我們設置一個標志位moving_right來實現(xiàn)持續(xù)移動。原理如下:

飛船不動時,標志moving_right將為false。玩家按下右箭頭時,我們將這個標志設置為True;玩家松開時,我們將標志重新設置成False。

這個移動屬性是飛船屬性的一種,我們用ship類來控制,因此我們給這個類增加一個屬性名稱叫,moving_right以及一個update()方法來檢測標志moving_right的狀態(tài)。

ship

python updatescreen,python,游戲,pygame

game_functions

python updatescreen,python,游戲,pygame

最后在alien_invasion中調用update()方法

python updatescreen,python,游戲,pygame

左右移動

前面我們實現(xiàn)了向右移動,接下來實現(xiàn)向左移動,邏輯類似,代碼就不貼了。

調整飛船的速度

當前,每次執(zhí)行while循環(huán)時,飛船最多移動一個像素,我們可以在Settings中添加ship_speed_factor,用于控制飛船的速度。我們將根據(jù)這個屬性決定飛船每次循環(huán)時最多移動多少距離。

Settings:

python updatescreen,python,游戲,pygame

Ship:

python updatescreen,python,游戲,pygame

限制飛船的活動范圍

如果玩家按住箭頭的時間過長,飛船就會消失,那么如何使飛船抵達屏幕邊緣時停止移動?這里我們只需要修改Ship類中的update方法,增加一個邏輯判斷。

重構

這里我們主要講check_events()函數(shù)進行重構,將其中部分代碼分成兩部分,一部分處理KEYDOWN事件,一部分處理KEYUP事件。

game_functions:

python updatescreen,python,游戲,pygame

射擊

接下來添加射擊功能,使玩家按空格鍵時發(fā)射子彈,子彈將在屏幕中向上穿行,抵達屏幕后消失。

添加子彈設置

在Settings類中增加一些子彈的屬性,這里我們創(chuàng)建一個寬3像素,高15像素的深灰色子彈。子彈的速度比飛船稍低。

創(chuàng)建Bullet類

python updatescreen,python,游戲,pygame

將子彈存儲到group中

前面定義了Bullet類和必要的設置后,就可以編寫代碼了,在玩家每次按空格鍵時都會發(fā)射一發(fā)子彈。

首先,我們在alien_invasion中創(chuàng)建一個group,用于存儲所有的有效子彈。

python updatescreen,python,游戲,pygame

開火

這里我們修改check_keydown_events()函數(shù),來監(jiān)聽玩家按下空格鍵的事件。這里還需要修改update_screen()函數(shù),確保屏幕每次更新時,都能重繪每一個子彈。

我們來看下效果:

python updatescreen,python,游戲,pygame

刪除消失的子彈

在alien_invasion中刪除消失的子彈。

python updatescreen,python,游戲,pygame

限制子彈數(shù)量

為了鼓勵玩家有目標的射擊,我們規(guī)定屏幕上只能同時存在3顆子彈,我們只需要在每次創(chuàng)建子彈前檢查未消失的子彈數(shù)目是否小于3即可。

創(chuàng)建update_bullets()函數(shù)

為了使alien_invasion中代碼更加簡單,我們將檢查子彈管理的代碼,移到game_functions模塊中:

python updatescreen,python,游戲,pygame

創(chuàng)建fire_bullet()函數(shù)

這里我們將發(fā)射子彈的代碼移到一個獨立的函數(shù)中:

python updatescreen,python,游戲,pygame

添加外星人,并檢測碰撞

在我們完成新的任務之前,我們先給游戲添加一個結束游戲的快捷鍵Q:

創(chuàng)建第一個外星人

這里和創(chuàng)建飛船的方法一樣

python updatescreen,python,游戲,pygame

創(chuàng)建一群外星人

這里我們首先確定一行能容納多少個外星人以及要繪制幾行。這里改動代碼較多,直接看效果:

python updatescreen,python,游戲,pygame

移動外星人

前面我們創(chuàng)建的是靜態(tài)的外星人,現(xiàn)在我們需要讓外星人動起來。這里我們在Settings類中設置外星人移動的速度,然后通過Alien類中的update的方法來實現(xiàn)移動

射殺外星人

要想射殺外星人,就必須先檢測兩個編組成員之間是否發(fā)生碰撞,在游戲中,碰撞就是游戲元素重疊在一起。

這里我們使用sprite.groupcollide()來檢測兩個編組的成員之間的碰撞。

子彈擊中外星人時,需要立馬知道,并同時使被碰撞的外星人立即消失,因此我們需要在更新子彈的位置后立即檢測碰撞。

結束游戲

這里我們還需要知道何時該結束游戲,有以下幾種情況:

飛船全部被摧毀

外星人到達屏幕底部

實際效果:

python updatescreen,python,游戲,pygame

計分

最后我們將給游戲添加一個Play按鈕,用于根據(jù)需要啟動游戲以及在游戲結束后重啟游戲。

我們還將實現(xiàn)一個計分系統(tǒng),能夠在玩家等級提高時加快節(jié)奏。

添加Play按鈕

這里可以先將游戲初始化為非活動狀態(tài),當我們點擊了按鈕,就開始游戲。

由于Pygame中沒有內置的創(chuàng)建按鈕的方法。因此我們可以通過創(chuàng)建一個Button類來創(chuàng)建一個自帶標簽的實心矩形。

我們通過檢測鼠標發(fā)生點擊后的坐標是否與我們繪制的按鈕發(fā)生碰撞與否來判斷是否發(fā)生了點擊事件。

提高等級

為了使玩家將敵人消滅干凈后能夠提高游戲難度,增加趣味性,這里我們可以在Settings類中進行修改,增加靜態(tài)初始值,和動態(tài)初始值。

記分、等級、剩余飛船

python updatescreen,python,游戲,pygame

打包成exe可執(zhí)行文件

這樣上面游戲開發(fā)完了!!

點擊下方安全鏈接前往獲取

CSDN大禮包:《Python入門&進階學習資源包》免費分享

??Python實戰(zhàn)案例??

光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰(zhàn)案例來學習。

python updatescreen,python,游戲,pygame

python updatescreen,python,游戲,pygame

??Python書籍和視頻合集??

觀看零基礎學習視頻,看視頻學習是最快捷也是最有效果的方式,跟著視頻中老師的思路,從基礎到深入,還是很容易入門的。

python updatescreen,python,游戲,pygame

??Python副業(yè)創(chuàng)收路線??

python updatescreen,python,游戲,pygame

這些資料都是非常不錯的,朋友們如果有需要《Python學習路線&學習資料》,點擊下方安全鏈接前往獲取

CSDN大禮包:《Python入門&進階學習資源包》免費分享

本文轉自 網(wǎng)絡,如有侵權,請聯(lián)系刪除。文章來源地址http://www.zghlxwxcb.cn/news/detail-855767.html

到了這里,關于百行Python代碼開發(fā)出游戲,原來Python可以這么強大!的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • Python實現(xiàn)京東茅臺搶購腳本, 原來這么簡單

    Python實現(xiàn)京東茅臺搶購腳本, 原來這么簡單

    前言 大家早好、午好、晚好吖 ? ~歡迎光臨本文章 開發(fā)環(huán)境: python 3.8 運行代碼 pycharm 2022.3.2 輔助敲代碼 專業(yè)版 京東茅臺搶購腳本可以分為以下幾部分,具體實現(xiàn)步驟如下: 1. 登錄京東賬號 首先需要登錄京東賬號。 一個簡單的方式是使用Python的 selenium 庫。 在使用 seleniu

    2024年02月13日
    瀏覽(28)
  • Python制作進度條,原來有這么多方法

    Python制作進度條,原來有這么多方法

    如果你之前沒用過進度條,八成是覺得它會增加不必要的復雜性或者很難維護,其實不然。要加一個進度條其實只需要幾行代碼。 在這幾行代碼中,我們可以看看如何在命令行腳本以及 PySimpleGUI UI 中添加進度條。 下文將介紹 4 個常用的 Python 進度條庫: 第一個要介紹的 Py

    2024年02月08日
    瀏覽(27)
  • python輕量級web框架flask初探,搭建網(wǎng)站原來這么簡單

    python輕量級web框架flask初探,搭建網(wǎng)站原來這么簡單

    ?? 歡迎大家來到景天科技苑?? ???? 養(yǎng)成好習慣,先贊后看哦~???? ?? 作者簡介:景天科技苑 ??《頭銜》:大廠架構師,華為云開發(fā)者社區(qū)專家博主,阿里云開發(fā)者社區(qū)專家博主,CSDN新星創(chuàng)作者,掘金優(yōu)秀博主,51CTO博客專家等。 ??《博客》:Python全棧,前后端開

    2024年03月19日
    瀏覽(575)
  • python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

    python的scrapy框架----->可以使我們更加強大,為打破寫許多代碼而生

    含義: 構圖: ?運行流程:1.scrapy框架拿到start_urls構造了一個request請求 2.request請求發(fā)送給scrapy引擎,中途路過爬蟲中間件,引擎再發(fā)送request給調度器(一個隊列存儲request請求) 3.調度器再把requst請求發(fā)送給引擎 4.引擎再把requst請求發(fā)送給下載器,中途經(jīng)過下載中間件 5.下載器然后訪問

    2024年02月08日
    瀏覽(36)
  • Python實現(xiàn)京東茅臺搶購腳本, 原來這樣就可以了?

    京東茅臺搶購腳本可以分為以下幾部分,具體實現(xiàn)步驟如下: 登錄京東賬號 首先需要登錄京東賬號。一個簡單的方式是使用Python的 selenium 庫。在使用 selenium 庫前,需要安裝 selenium 庫和對應的瀏覽器驅動。 示例代碼如下所示: 注意:在使用 selenium 的時候,要配置對應的瀏

    2024年02月14日
    瀏覽(25)
  • Python三百行代碼實現(xiàn)一簡約個人博客網(wǎng)站(全網(wǎng)最小巧)

    Python三百行代碼實現(xiàn)一簡約個人博客網(wǎng)站(全網(wǎng)最小巧)

    這是全互聯(lián)網(wǎng)最小巧的博客,沒有比這更小的了。雖然小巧,但功能一點兒也不弱,支持文章的分頁展示,文章表格,圖片和代碼語法高亮。文章無限制分類,訪問量統(tǒng)計,按時間和按點擊量排序,展示最新文章,最熱文章,文章留言評論等功能。 如果你也想擁有一個屬于自

    2024年02月04日
    瀏覽(17)
  • 記錄--原來前端部署這么簡單

    記錄--原來前端部署這么簡單

    有個朋友說前端技能大家大部分都會,就是部署項目這一塊經(jīng)驗都比較稀缺,一直很想學一下。所以在這里寫一篇簡單的從零開始部署前端項目的全過程,感興趣的掘友們或者想自己搭建項目部署的可以看一下這篇。 首先我們需要進行環(huán)境搭建主要就是 服務器 和 nginx配置

    2024年02月05日
    瀏覽(28)
  • KMP算法原理原來這么簡單

    KMP算法原理原來這么簡單

    我覺得這句話說的很好: kmp算法關鍵在于:在當前對文本串和模式串檢索的過程中,若出現(xiàn)了不匹配,如何充分利用已經(jīng)匹配的部分,來繼續(xù)接下來的檢索。 暴力解法就是兩層for循環(huán),每次都一對一的匹配,如果匹配錯誤就文本串開始位置加1,繼續(xù)下一次 前綴表的作用就是

    2023年04月21日
    瀏覽(23)
  • 零基礎用一百行代碼完成動態(tài)的人臉識別(opencv+python)

    廢話:(其實是介紹了一下該文章的大概來路)?? ? ? 電子化的時代到處都能看到人臉識別的用途;比如:刷臉門禁,火車站檢票口,又比如檢查站,還有一些比較高端的汽車還支持刷臉開門等等。 ? ? ?近期呢接了個學校的一個項目有關于刷臉門禁的,我在CSDN上找了很多

    2024年02月09日
    瀏覽(15)
  • 物聯(lián)網(wǎng)網(wǎng)關,原來是這么回事,感謝!

    物聯(lián)網(wǎng)網(wǎng)關,原來是這么回事,感謝!

    《高并發(fā)系統(tǒng)實戰(zhàn)派》-- 你值得擁有 物聯(lián)網(wǎng)網(wǎng)關是連接物聯(lián)網(wǎng)設備和互聯(lián)網(wǎng)的重要橋梁,它負責將物聯(lián)網(wǎng)設備采集到的數(shù)據(jù)進行處理、存儲和轉發(fā),使其能夠與云端或其他設備進行通信。物聯(lián)網(wǎng)網(wǎng)關的作用是實現(xiàn)物聯(lián)網(wǎng)設備與云端的無縫連接和數(shù)據(jù)交換。 不要物聯(lián)網(wǎng)網(wǎng)關行

    2024年02月08日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包