日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

雷霆战机

發(fā)布時(shí)間:2023/12/1 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 雷霆战机 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

  多年前,你我在一起"打飛機(jī)"。為了實(shí)現(xiàn)真正的打飛機(jī),在下一年前踏足帝都學(xué)習(xí)了無(wú)所不能的Python,辣么接下來(lái)帶你在倆個(gè)小時(shí)用200行代碼學(xué)會(huì)打飛機(jī)。

  python中提供了一個(gè)pygame的模塊能夠讓我們快速編寫(xiě)一個(gè)游戲。接下來(lái),簡(jiǎn)要?jiǎng)?chuàng)建一個(gè)目錄結(jié)構(gòu),存放代碼(規(guī)范的目錄結(jié)構(gòu)可以讓代碼保持高度的靈活性及可讀性),如下: 

""" PlayPlane/ |-- bin/ | |-- main.py 程序運(yùn)行主體程序 |-- config/ | |-- settings.py 程序配置(例如: 游戲背景音樂(lè)的加載等) |-- material 程序素材放置(打飛機(jī)游戲素材放置)|-- ... |-- src/ 程序主體模塊存放 | |-- __init__.py | |-- bullet.py 我方飛機(jī)發(fā)射子彈實(shí)現(xiàn)代碼存放 | |-- enemy.py 敵方飛機(jī)實(shí)現(xiàn)代碼存放 | |-- plane.py 我方飛機(jī)實(shí)現(xiàn)代碼存放 |-- manage.py 程序啟動(dòng)文件 |-- README.md """?

打飛機(jī)啦

一、首先在 config/settings.py 中進(jìn)行以下功能的實(shí)現(xiàn)

游戲素材滑動(dòng)到文章底部點(diǎn)擊鏈接即可下載

  • 游戲初始化
  • 游戲混音器初始化
  • 背景音樂(lè)初始化
  • 我方飛機(jī)掛了音樂(lè)
  • 敵方飛機(jī)掛了音樂(lè)
  • 子彈發(fā)射音樂(lè)
?config/settings.py

二、小試牛刀

飛機(jī)和子彈都是可移動(dòng)的,那么怎么實(shí)現(xiàn)讓它們動(dòng)起來(lái)呢(我方飛機(jī)可以玩家進(jìn)行操控,敵機(jī)就是隨機(jī)性的出現(xiàn),子彈暫由我方飛機(jī)發(fā)射)。

在Pygame中,所有移動(dòng)對(duì)象都可看做是一個(gè)精靈(sprite),精靈之間能夠進(jìn)行相互的交互通信,例如如何讓碰撞檢測(cè)更加精準(zhǔn)等等。

那么先讓我們先在屏幕上制作一個(gè)游戲板,根據(jù) settings.py 配置,并讓它有聲音播放,首先我們?cè)?bin/main.py 中這么寫(xiě):

  我們可以直接運(yùn)行它,那么我們會(huì)看到以下畫(huà)面,并且還會(huì)有激情的聲音吆!!!但是我們要將文件配置為絕對(duì)路徑才可以運(yùn)行,因?yàn)閯倓傇趕ettings中的加載的音樂(lè)文件為相對(duì)路徑。

?DEMO

接下來(lái)呢,我們將要制作我方飛機(jī),敵方飛機(jī)和子彈如何讓它們展示在游戲畫(huà)板上,繼而讓它們變得可移動(dòng)起來(lái),請(qǐng)看代碼實(shí)現(xiàn)方案...

從游戲畫(huà)板上添加飛機(jī),首先我們應(yīng)怎樣在屏幕上輸出飛機(jī)???

上述講過(guò),pygame中的 sprite(精靈)可使一張圖片或者一個(gè)靜態(tài)物體動(dòng)起來(lái),那么制作飛機(jī)需要考慮并做些什么呢?

  • 飛機(jī)的初始位置
  • 通過(guò)按鍵 上下左右 來(lái)調(diào)控飛機(jī)的位置移動(dòng)
  • 飛機(jī)只能呆在制作的游戲畫(huà)板中
  • 飛機(jī)的速度
  • 飛機(jī)死亡的加載
  • 設(shè)定一個(gè)狀態(tài)標(biāo)識(shí)飛機(jī)的存活
  • 讓飛機(jī)具有動(dòng)態(tài)的噴氣式效果
  • 那么如何實(shí)現(xiàn)以上的功能呢?接下來(lái)結(jié)合上述的示例代碼我們先將我方飛機(jī)繪制到畫(huà)板上方,并且我們通過(guò)按鍵 J 判定我方飛機(jī)的存活狀態(tài)為死亡,繪制飛機(jī)的死亡畫(huà)面并重置飛機(jī)

    """創(chuàng)建飛機(jī)在pygame中, 所有可移動(dòng)的對(duì)象均叫可看作一個(gè)精靈(sprite)該類并實(shí)現(xiàn)了碰撞方法 spritecollide我方飛機(jī)和敵方飛機(jī)指定掩膜屬性以及生存狀態(tài)標(biāo)志位 添加 self.mask 屬性(可以實(shí)現(xiàn)更精準(zhǔn)的碰撞效果) """# 倒入精靈模塊, 使飛機(jī)可以動(dòng)起來(lái) import pygameclass OurPlane(pygame.sprite.Sprite):def __init__(self, bg_size):super(OurPlane, self).__init__()# 確定我方飛機(jī)背景圖(有倆張,可以讓它們不停的切換,形成動(dòng)態(tài)效果)self.image_one = pygame.image.load("material/image/hero1.png")self.image_two = pygame.image.load("material/image/hero2.png")# 獲取我方飛機(jī)的位置self.rect = self.image_one.get_rect()# 本地化背景圖片的尺寸self.width, self.height = bg_size[0], bg_size[1]# 獲取飛機(jī)圖像的掩膜用以更加精確的碰撞檢測(cè)self.mask = pygame.mask.from_surface(self.image_one)# 定義飛機(jī)初始化位置,底部預(yù)留60像素self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (self.height - self.rect.height - 60)# 設(shè)置飛機(jī)移動(dòng)速度self.speed = 10# 設(shè)置飛機(jī)存活狀態(tài)(True為存活, False為死亡)self.active = True# 加載飛機(jī)損毀圖片self.destroy_images = []self.destroy_images.extend([pygame.image.load("material/image/hero_blowup_n1.png"),pygame.image.load("material/image/hero_blowup_n2.png"),pygame.image.load("material/image/hero_blowup_n3.png"),pygame.image.load("material/image/hero_blowup_n4.png")])def move_up(self):"""飛機(jī)向上移動(dòng)的操作函數(shù),其余移動(dòng)函數(shù)方法類似"""if self.rect.top > 0: # 如果飛機(jī)尚未移動(dòng)出背景區(qū)域self.rect.top -= self.speedelse: # 若即將移動(dòng)出背景區(qū)域,則及時(shí)糾正為背景邊緣位置self.rect.top = 0def move_down(self):"""飛機(jī)向下移動(dòng)"""if self.rect.bottom < self.height - 60:self.rect.top += self.speedelse:self.rect.bottom = self.height - 60def move_left(self):"""飛機(jī)向左移動(dòng)"""if self.rect.left > 0:self.rect.left -= self.speedelse:self.rect.left = 0def move_right(self):"""飛機(jī)向右移動(dòng)"""if self.rect.right < self.width:self.rect.right += self.speedelse:self.rect.right = self.widthdef reset(self):# 初始化飛機(jī)(飛機(jī)掛了, 初始化到初始位置)self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, (self.height - self.rect.height - 60)# 重置飛機(jī)的存活狀態(tài)self.active = True

    上面的代碼寫(xiě)了一個(gè) 我們的飛機(jī) (OurPlane) 類,它初始化了一些屬性以及 上下左右 移動(dòng)的方法和重置方法,接下來(lái)將要運(yùn)用它展示到游戲畫(huà)板上面

    由于飛機(jī)是一直存在的,接下我們主程序 main 下面的死循環(huán)中這樣寫(xiě)

    ?1.在屏幕上繪制飛機(jī) ?2.讓飛機(jī)上下左右動(dòng)起來(lái) ?3.按鍵為 j 繪制飛機(jī)的死亡狀態(tài)

    那么上述的功能都已經(jīng)實(shí)現(xiàn)了,接下來(lái)就開(kāi)始真正的"打飛機(jī)"

    三、接下來(lái)可以制作我方飛機(jī),敵方戰(zhàn)機(jī),子彈等,這些功能均在 src/ 目錄下實(shí)現(xiàn)

    • 我方飛機(jī)根據(jù)按鍵上下左右進(jìn)行移動(dòng),初始化位置,噴氣式圖片加載切換及重置效果等
    ?src/plane.py
    • 敵方飛機(jī)隨機(jī)移動(dòng)出現(xiàn)及重置(制作出我方飛機(jī)之后,敵機(jī)和子彈其實(shí)都是大同小異的)
    ?src/enemy.py
    • 子彈按照我方飛機(jī)正中上方發(fā)射及頻率調(diào)控,重置
    ?src/bullet.py

    在上面的內(nèi)容中,使用面向?qū)ο蟮男问街谱髁擞螒蛑锌梢苿?dòng)的對(duì)象并繼承 pygame.sprite.Sprite?

    四、繼而在 bin/main.py 中進(jìn)行主體功能的實(shí)現(xiàn)

    • 初始化背景圖及大小
    • 我方飛機(jī)移動(dòng)及發(fā)射子彈
    • 敵方飛機(jī)移動(dòng)
    • 我方飛機(jī)和敵方飛機(jī)碰撞檢測(cè)
    • 鍵盤(pán)按鍵監(jiān)測(cè)效果
    • 我方飛機(jī)和敵方飛機(jī)掛了效果繪制
    ?bin/main.py

    五、暢汗淋漓,一氣呵成打飛機(jī)

    組合一下,running起來(lái)

    from bin.main import mainif __name__ == '__main__':"""環(huán)境: python3 + pygamerunning 起來(lái)就可以打飛機(jī)了O(∩_∩)O~."""main()

    原文來(lái)自:https://www.cnblogs.com/leguan1314/p/7927595.html

    github下載:https://github.com/1352282824shy/-Lightning-Fighter-Game

    ?

    轉(zhuǎn)載于:https://www.cnblogs.com/shanghongyun/p/10541727.html

    總結(jié)

    以上是生活随笔為你收集整理的雷霆战机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。