开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開APP
          userphoto
          未登錄

          開通VIP,暢享免費電子書等14項超值服

          開通VIP
          一名程序員用Python實現(xiàn)飛機游戲!企業(yè)為什么會聘用他?看完就會

          所用技術和軟件

          python 2.7

          pygame 1.9.3

          pyCharm

          準備工作

          1. 安裝好 pygame 在第一次使用 pygame 的時候,pyCharm 會自動 install pygame。

          2. 下載好使用的素材。

          技術實現(xiàn)

          初始化 pygame

          首先要初始化 pygame ,之后設定一些基本的要點,比如窗口大?。ūM量避免魔法數(shù)字),窗口標題以及背景圖像。pygame 通過加載圖片,最后返回一個 surface 對象,我們不需要關系圖片的格式。但是通過 convert()這個函數(shù),會使我們的圖片轉換效率提高。

          默認圖片左上角為原點 (0,0)。

          顯示窗口

          如果我們這樣設定,當我們運行的時候,窗口會一閃而過,并不會出現(xiàn)我們想象的畫面。因為窗口只是運行一下就會關閉,所以我們要寫一個循環(huán),使窗口一直保持出現(xiàn)。當然如果我們簡單的寫一個 while True那么我們的程序就出現(xiàn)了死循環(huán),卡死。

          所以還需要寫個退出。

          將 player 顯示在屏幕上,并且刷新屏幕

          screen.blit(player, [100, 400])pygame.display.update()

          效果如下

          讓飛機 “飛” 起來

          飛機已經出現(xiàn)在我們的屏幕上了,現(xiàn)在需要讓飛機動起來讓他可以上下左右的移動。

          首先要獲取鍵盤事件,獲取鍵盤上什么按鍵被按下。

          key_pressed = pygame.key.get_pressed()

          簡單的說就是獲取飛機的圖片,初始化飛機的矩形區(qū)域。 rect 該屬性會獲得四個值。分別是左上角 x , y 坐標,矩形的寬度。 topleft 初始化飛機的左上角坐標,也就是飛機出現(xiàn)的位置。如下圖所示。

          讓子彈飛

          子彈要沿著發(fā)射方向射出去??梢栽谄聊簧弦恢币苿?,直到移出屏幕。

          我們只要有定義一個子彈對象,讓這個對象顯示在屏幕上就可以。

          先定義飛機子彈類,基本和定義 player一樣,獲得圖片,裁剪圖片,設置圖片初始位置,在屏幕上顯示圖片

          下一步就是讓飛機的子彈跟隨飛機。

          我們需要在 Player 類里面添加方法。

          首先我們規(guī)定,按下空格發(fā)射子彈。

          下一步就是讓子彈在屏幕上移動。

          創(chuàng)建移動的方法。

          這個和我們的預期還是有差別的,頻率太快了。

          關于pygame 的鍵盤重復事件 官方好像并沒有這個設置。那么我們只能在添加一個計數(shù)器,通過計算器的數(shù)值來判斷子彈是否發(fā)射。這里的數(shù)值是多次測試后,自己感覺一個比較滿意的頻率??梢宰约赫{整。

          繪制敵機

          下一步就是繪制敵機。敵機是從屏幕上方移動到屏幕下方。我們任就需要一個類來設置敵機。設置類任就和我們前面的差不多,加載資源,設置 rect,設置位置。

          現(xiàn)在我們就應該想想敵機的特點了,其實他和子彈的特點基本一直,只不過方向不一樣而已。還有一點是敵機是隨機生成的。

          碰撞檢測

          飛機和敵機還有子彈都有了,我們現(xiàn)在需要進行完成碰撞檢測。有下面幾種場景。

          1. 敵機和玩家碰撞在一起

          2. 子彈和敵機碰撞在一起

          無論是那種情況的碰撞,其實就是兩張圖片有了交集。

          如圖

          執(zhí)行結果

          當玩家被擊中的時候,在顯示一張 GameOver 圖片提示

          細節(jié)處理

          精細的碰撞檢測

          從圖上看,當敵機看似還沒有和我們接觸時,但是已經 GameOver 了。

          實際情況是這樣的,所有的圖片都是矩形,當兩張圖片的矩形邊框線碰撞的時候,就算兩個對象碰撞,所以我們要更加精細的使用碰撞檢測。

          我們可以按著圖片中心的某個長度為半徑,在這個半徑內發(fā)生碰撞才是碰撞。

          正常發(fā)射子彈的動畫效果已經做完。我們還需要進行被擊中爆炸的動畫效果。

          擊中的原理和正常也一樣。只不過先要判斷當前飛機狀態(tài),是否被擊中。

          同樣我們需要創(chuàng)建 Group() 來存放被擊中的敵機。

          enemies_shoot = pygame.sprite.Group()

          之后的處理邏輯基本相似,不多介紹

          音樂

          有了動畫還的有音樂。

          音樂的處理只要在特定的地方播放音樂就好,比如子彈發(fā)射的時候,背景音樂,被擊中的時候,游戲結束的時候,等等。他們的處理邏輯都一樣。先加載資源,然后在播放。

          第一個參數(shù)是寫的文字;第二個參數(shù)是個布爾值,以為這是否開啟抗鋸齒,就是說True的話字體會比較平滑,不過相應的速度有一點點影響;第三個參數(shù)是字體的顏色;第四個是背景色,如果你想沒有背景色(也就是透明),那么可以不加這第四個參數(shù)

          字體也有了,文本也有了,下一步就是繪制。通過 get_rect()獲得矩形,之后繪制和精靈繪制方法一樣

          基本到這里算是寫了一個相對完整的游戲。

          本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
          打開APP,閱讀全文并永久保存 查看更多類似文章
          猜你喜歡
          類似文章
          【cocos2d-x入門實戰(zhàn)】微信飛機大戰(zhàn)之九:碰撞檢測
          500行代碼,教你用python寫個微信飛機大戰(zhàn)
          用 Python 實現(xiàn)微信版飛機大戰(zhàn)
          Python深度剖析貪吃蛇游戲的設計與實現(xiàn)
          python飛機大戰(zhàn)pygame快速入門
          魂斗羅游戲中的算法詳解及代碼示例
          更多類似文章 >>
          生活服務
          分享 收藏 導長圖 關注 下載文章
          綁定賬號成功
          后續(xù)可登錄賬號暢享VIP特權!
          如果VIP功能使用有故障,
          可點擊這里聯(lián)系客服!

          聯(lián)系客服