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

Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

這篇具有很好參考價值的文章主要介紹了Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

版權(quán)聲明:原創(chuàng)不易,本文禁止抄襲、轉(zhuǎn)載,侵權(quán)必究!

一、開發(fā)環(huán)境

開發(fā)環(huán)境 :Windows10 Python3.6.4
第三方庫 :Pygame1.9.6
IDE :PyCharm/Sublime Text

二、功能模塊

素材模塊
游戲圖片素材:
Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

BGM及音效素材:
Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

字體素材:
Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

源碼模塊
子彈模塊
普通子彈部分源碼:

def __init__(self, position):
    super().__init__()
    self.image = pygame.image.load("images/bullet1.png").convert_alpha()
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = position
    self.speed = 12
    self.active = False
    self.mask = pygame.mask.from_surface(self.image)

def move(self):
    self.rect.top -= self.speed
    if self.rect.top < 0:
        self.active = False

超級子彈部分源碼:

def __init__(self, position):
    super().__init__()
    self.image = pygame.image.load("images/bullet2.png").convert_alpha()
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = position
    self.speed = 18
    self.active = False
    self.mask = pygame.mask.from_surface(self.image)

def move(self):
    self.rect.top -= self.speed
    if self.rect.top < 0:
        self.active = False

敵機(jī)子彈部分源碼:

def __init__(self, speed, position):
    super().__init__()
    self.image = pygame.image.load("images/bullet1.png").convert_alpha()
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = position
    self.speed = speed
    self.active = False
    self.mask = pygame.mask.from_surface(self.image)

敵機(jī)模塊:
小型敵機(jī)部分源碼:

class SmallEnemy(Enemy):
    def __init__(self, bg_size):
        super().__init__("images/enemy1.png", 2, bg_size)
        # 小型敵機(jī)毀滅圖片切換
        self.destroy_images = []
        self.destroy_images.extend([pygame.image.load("images/enemy1_down1.png").convert_alpha(),
                                    pygame.image.load("images/enemy1_down2.png").convert_alpha(),
                                    pygame.image.load("images/enemy1_down3.png").convert_alpha(),
                                    pygame.image.load("images/enemy1_down4.png").convert_alpha()])
        # 設(shè)置敵機(jī)原始位置
        self.rect.left, self.rect.top = randint(0, self.width - self.rect.width), randint(-5 * self.height, 0)
        # 表明敵機(jī)目前的狀態(tài)(為True表明敵機(jī)生存,反之為碰撞時毀滅,之后播放毀滅畫面,重新調(diào)用reset方法,將敵機(jī)設(shè)置到初始位置)
        self.active = True
        # 返回英雄除了空白區(qū)域的部分
        self.mask = pygame.mask.from_surface(self.image)

中型敵機(jī)部分源碼:

class MidEnemy(Enemy):
    # 中型敵機(jī)打擊次數(shù)
    energy = 8

    def __init__(self, bg_size):
        super().__init__("images/enemy2.png", 1, bg_size)
        # 中型敵機(jī)毀滅圖片切換
        self.destroy_images = []
        self.destroy_images.extend([pygame.image.load("images/enemy2_down1.png").convert_alpha(),
                                    pygame.image.load("images/enemy2_down2.png").convert_alpha(),
                                    pygame.image.load("images/enemy2_down3.png").convert_alpha(),
                                    pygame.image.load("images/enemy2_down4.png").convert_alpha()])
        # 子彈打擊時效果圖片
        self.image_hit = pygame.image.load("images/enemy2_hit.png").convert_alpha()
        # 設(shè)置敵機(jī)原始位置
        # self.width, self.height = bg_size[0], bg_size[1]
        self.rect.left, self.rect.top = randint(0, self.width - self.rect.width), randint(-10 * self.height,
                                                                                          -self.height)
        self.active = True
        # 返回英雄除了空白區(qū)域的部分
        self.mask = pygame.mask.from_surface(self.image)
        # 擊打次數(shù)屬性
        self.energy = MidEnemy.energy
        # 是否擊中屬性
        self.hit = False

我方戰(zhàn)機(jī)模塊部分源碼:

class MyPlane(pygame.sprite.Sprite):

    def __init__(self, bg_size):
        super().__init__()
        # 獲取英雄圖片(兩幅圖片實(shí)現(xiàn)動態(tài)效果)
        self.image1 = pygame.image.load("images/me1.png").convert_alpha()
        self.image2 = pygame.image.load("images/me2.png").convert_alpha()
        # 英雄毀滅圖片切換
        self.destroy_images = []
        self.destroy_images.extend([pygame.image.load("images/me_destroy_1.png").convert_alpha(),
                                    pygame.image.load("images/me_destroy_2.png").convert_alpha(),
                                    pygame.image.load("images/me_destroy_3.png").convert_alpha(),
                                    pygame.image.load("images/me_destroy_4.png").convert_alpha()])
        # 獲取英雄大小,寬度和高度
        self.rect = self.image1.get_rect()
        # 設(shè)置英雄位置
        self.width, self.height = bg_size[0], bg_size[1]
        self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, self.height - self.rect.height - 60
        # 設(shè)置英雄速度
        self.speed = 10
        # 設(shè)置英雄生存狀態(tài)
        self.active = True
        # 設(shè)置飛機(jī)無敵
        self.invincible = False
        # 返回英雄除了空白區(qū)域的部分
        self.mask = pygame.mask.from_surface(self.image1)

技能模塊部分源碼:

class BulletSupply(pygame.sprite.Sprite):
    def __init__(self, bgsize):
        super().__init__()
        self.image = pygame.image.load("images/bullet_supply.png").convert_alpha()
        self.rect = self.image.get_rect()
        self.width, self.height = bgsize[0], bgsize[1]
        self.rect.left, self.rect.bottom = randint(0, self.width - self.rect.width), -100
        self.speed = 5
        self.active = False
        self.mask = pygame.mask.from_surface(self.image)

    def move(self):
        if self.rect.top < self.height:
            self.rect.top += self.speed
        else:
            self.active = False

    def reset(self):
        self.active = True
        self.rect.left, self.rect.bottom = randint(0, self.width - self.rect.width), -100


主模塊
游戲初始化部分源碼:

def __init__(self):
    # 1.變量定義
    self.__variate__define()
    # 2.pygame和音樂初始化
    pygame.init()
    pygame.mixer.init()
    # 3.創(chuàng)建游戲窗口
    self.screen = pygame.display.set_mode(self.bg_size)
    pygame.display.set_caption("飛機(jī)大戰(zhàn)")
    # 4.獲取背景圖片
    self.background = pygame.image.load("images/background.png").convert()
    # 5.創(chuàng)建游戲時鐘
    self.clock = pygame.time.Clock()
    # 6.載入音樂模塊
    pygame.mixer.music.load("sound/game_music.ogg")
    pygame.mixer.music.set_volume(0.2)  # 設(shè)置音量
    self.bullet_sound = pygame.mixer.Sound("sound/bullet.wav")
    self.bullet_sound.set_volume(0.2)
    self.bomb_sound = pygame.mixer.Sound("sound/use_bomb.wav")
    self.bomb_sound.set_volume(0.2)

控制英雄飛機(jī):

def __keypress_hanlder(self):
    """檢測用戶的鍵盤操作,控制英雄飛機(jī)"""
    key_pressed = pygame.key.get_pressed()
    if key_pressed[K_w] or key_pressed[K_UP]:
        self.hero.moveUp()
    if key_pressed[K_s] or key_pressed[K_DOWN]:
        self.hero.moveDown()
    if key_pressed[K_a] or key_pressed[K_LEFT]:
        self.hero.moveLeft()
    if key_pressed[K_d] or key_pressed[K_RIGHT]:
        self.hero.moveRight()

創(chuàng)建敵機(jī)源碼:

def add_small_enemy(self, group1, group2, num):
    """創(chuàng)建小型敵機(jī)對象,num為對象個數(shù),將其添加到精靈組中"""
    for i in range(num):
        e1 = enemy_plane.SmallEnemy(self.bg_size)
        group1.add(e1)
        group2.add(e1)

def add_mid_enemy(self, group1, group2, num):
    """創(chuàng)建中型敵機(jī)對象"""
    for i in range(num):
        e1 = enemy_plane.MidEnemy(self.bg_size)
        group1.add(e1)
        group2.add(e1)

def add_big_enemy(self, group1, group2, num):
    """創(chuàng)建大型敵機(jī)對象"""
    for i in range(num):
        e1 = enemy_plane.BigEnemy(self.bg_size)
        group1.add(e1)
        group2.add(e1)

子彈生成部分源碼:

def __create_bullet(self):
    # 生成普通子彈
    self.bullet1 = []
    self.bullet1_index = 0
    self.BULLET_NUM = 4
    for i in range(self.BULLET_NUM):
        self.bullet1.append(bullet.Bullet1(self.hero.rect.midtop))

定義游戲難度部分源碼:

def __create_start_image(self):
        # 定義難度屬性
        self.easy = True
        self.common = False
        self.difficult = False
        # 飛機(jī)大戰(zhàn)主題
        self.start = False
        self.theme_font = pygame.font.Font("font/font.ttf", 50)
        self.theme_text = self.theme_font.render("Plane   War", True, self.WHILE)
        self.theme_text_rect = self.theme_text.get_rect()
        self.theme_text_rect.left, self.theme_text_rect.top = (120, 40)
        # 游戲開始字體
        self.start_font = pygame.font.Font("font/font.ttf", 40)
        self.start_text = self.start_font.render("Start Game", True, self.WHILE)
        self.start_text_rect = self.start_text.get_rect()
        self.start_text_rect.left, self.start_text_rect.top = (150, 200)
        # 簡單字體
        self.easy_font = pygame.font.Font("font/font.ttf", 40)
        self.easy_text = self.easy_font.render("easy", True,  self.BLACK)
        self.easy_text_rect = self.easy_text.get_rect()
        self.easy_text_rect.left, self.easy_text_rect.top = (200, 400)
        # 一般字體
        self.common_font = pygame.font.Font("font/font.ttf", 40)
        self.common_text = self.common_font.render("common", True,  self.WHILE)
        self.common_text_rect = self.common_text.get_rect()
        self.common_text_rect.left, self.common_text_rect.top = (180, 450)
        # 困難字體
        self.difficult_font = pygame.font.Font("font/font.ttf", 40)
        self.difficult_text = self.difficult_font.render("difficult", True, self.WHILE)
        self.difficult_text_rect = self.difficult_text.get_rect()
        self.difficult_text_rect.left, self.difficult_text_rect.top = (180, 510)

三、游戲效果

游戲開始效果:
Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

游戲戰(zhàn)斗效果:
Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

游戲結(jié)束效果:
Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

四、完整項(xiàng)目下載

點(diǎn)我下載

五、作者Info

Author:小鴻的摸魚日常,Goal:讓編程更有趣!

專注于算法、爬蟲,網(wǎng)站,游戲開發(fā),數(shù)據(jù)分析、自然語言處理,AI等,期待你的關(guān)注,讓我們一起成長、一起Coding!

版權(quán)說明:本文禁止抄襲、轉(zhuǎn)載 ,侵權(quán)必究!文章來源地址http://www.zghlxwxcb.cn/news/detail-514288.html

到了這里,關(guān)于Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【python】 pygame學(xué)習(xí)示例 --飛機(jī)大戰(zhàn)小游戲制作

    【python】 pygame學(xué)習(xí)示例 --飛機(jī)大戰(zhàn)小游戲制作

    python版本:3.8.5 所需模塊:pygame random os pygame版本:20.1 開發(fā)環(huán)境:pycharm專業(yè)版 硬件環(huán)境:win11 8G內(nèi)存以上 使用python的第三方庫–pygame 制作飛機(jī)大戰(zhàn)小游戲 小游戲的內(nèi)容包括: 玩家player的移動 子彈的發(fā)射 隕石的隨機(jī)掉落(包括旋轉(zhuǎn) 大小 下落角度) 玩家 子彈 隕石的碰撞交互

    2024年02月04日
    瀏覽(23)
  • 第一篇【傳奇開心果系列】Python的游戲庫pygame技術(shù)點(diǎn)案例示例:深度解讀實(shí)戰(zhàn)開發(fā)飛機(jī)大戰(zhàn)經(jīng)典游戲案例

    第一篇【傳奇開心果系列】Python的游戲庫pygame技術(shù)點(diǎn)案例示例:深度解讀實(shí)戰(zhàn)開發(fā)飛機(jī)大戰(zhàn)經(jīng)典游戲案例

    開發(fā)飛機(jī)大戰(zhàn)游戲不僅能滿足廣大玩家的娛樂需求,提供寓教于樂的學(xué)習(xí)機(jī)會,也是技術(shù)實(shí)踐、創(chuàng)新實(shí)驗(yàn)和商業(yè)探索的重要載體,具有多維度的社會與經(jīng)濟(jì)價值。 開發(fā)飛機(jī)大戰(zhàn)游戲具有多方面的意義,涵蓋娛樂、教育、技術(shù)實(shí)踐與創(chuàng)新等多個層面: 娛樂價值 : 休閑娛樂 :

    2024年04月23日
    瀏覽(104)
  • 基于Python的飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)

    基于Python的飛機(jī)大戰(zhàn)游戲的設(shè)計(jì)與實(shí)現(xiàn)

    收藏關(guān)注不迷路 ?? 飛機(jī)大戰(zhàn)是一種非常傳統(tǒng)的電腦游戲,也是非常經(jīng)典的游戲之一,經(jīng)常可以在電腦,手機(jī),以及各類便攜式游戲機(jī)中見到。傳統(tǒng)的老式飛行游戲以平面,灰白畫面為主。而現(xiàn)在,隨著計(jì)算機(jī)性能的飛速發(fā)展,我們目前可以在計(jì)算機(jī)上見到種類更加繁多的

    2024年02月04日
    瀏覽(32)
  • python小游戲畢設(shè) 飛機(jī)大戰(zhàn)設(shè)計(jì)與實(shí)現(xiàn)

    python小游戲畢設(shè) 飛機(jī)大戰(zhàn)設(shè)計(jì)與實(shí)現(xiàn)

    ?? Hi,各位同學(xué)好呀,這里是L學(xué)長! ??今天向大家分享一個今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品 飛機(jī)大戰(zhàn)小游戲設(shè)計(jì)與實(shí)現(xiàn) ?? 學(xué)長根據(jù)實(shí)現(xiàn)的難度和等級對項(xiàng)目進(jìn)行評分(最低0分,滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):3分 利用Python制作的一個簡易版類\\\"飛機(jī)大

    2024年02月10日
    瀏覽(30)
  • python+pygame之飛機(jī)大戰(zhàn)-第一版源代碼分析

    目錄 一、源代碼 二、源代碼梳理分析: (一)代碼的主要結(jié)構(gòu) 1、引用需要的模塊 2、定義的類 3、定義main()函數(shù):主程序 (二)代碼分析收獲 最好的學(xué)習(xí)方法是學(xué)習(xí)別人的代碼,加上自己以前比較喜歡雷電這款游戲,所以就從飛機(jī)大戰(zhàn)入手了,從網(wǎng)上下的源代碼和圖片素材

    2023年04月10日
    瀏覽(25)
  • python---簡單游戲制作(飛機(jī)大戰(zhàn))

    python---簡單游戲制作(飛機(jī)大戰(zhàn))

    1.開發(fā)軟件 pycharm 編程軟件 pygame 第三方庫 sprite Group 2.技術(shù)介紹 ? ? ?pycharm: PyCharm是一種Python IDE,帶有一整套可以幫助用戶在使用Python語言開發(fā)時提高其效率的工具,比如調(diào)試、語法高亮、Project管理、代碼跳轉(zhuǎn)、智能提示、自動完成、單元測試、版本控制。此外,該IDE提供

    2024年02月12日
    瀏覽(26)
  • python——飛機(jī)大戰(zhàn)小游戲

    python——飛機(jī)大戰(zhàn)小游戲

    目錄 1、導(dǎo)入模塊 2、窗口操作 3、事件操作 4、長按事件 5、添加游戲背景 6、添加英雄飛機(jī) 7、獲取飛機(jī)的圖片矩形 8、基本游戲窗口 9、添加游戲窗口圖片 10、英雄飛機(jī)登場 11、英雄飛機(jī)裝備子彈并發(fā)射 1、enemy_plane 2、game_main 3、game_map 4、game_score 5、hero_plane 6、plane_bullet 先安

    2024年02月03日
    瀏覽(28)
  • Python飛機(jī)大戰(zhàn)小游戲

    Python飛機(jī)大戰(zhàn)小游戲

    游戲規(guī)則:鍵盤上下左右鍵控制飛機(jī)移動 游戲展示圖片: 源碼: 第一個py命名為:plane_main.py 第二py命名為:plane_sprites.py 素材圖片image關(guān)注私信我獲取?。?!

    2024年02月10日
    瀏覽(27)
  • python小游戲開發(fā)(飛機(jī)大戰(zhàn))

    python小游戲開發(fā)(飛機(jī)大戰(zhàn))

    目錄 一:背景? ? ?? 1. pygame 模塊初識 二.項(xiàng)目設(shè)計(jì)內(nèi)容 開發(fā)一款飛機(jī)大戰(zhàn)游戲,要求: (1)實(shí)現(xiàn)飛機(jī)的移動、子彈發(fā)射,對本次游戲有一個初步的編寫及認(rèn)識。 (2)飛機(jī)的持續(xù)按鍵移動和飛機(jī)自爆優(yōu)化。 (3)進(jìn)行基類的抽取,使代碼更具有層次性和簡化重復(fù)代碼。 (

    2024年02月16日
    瀏覽(27)
  • Pygame —— 一個好玩的游戲 Python 庫

    Pygame —— 一個好玩的游戲 Python 庫

    在電子游戲的世界里,每一個精彩跳躍、每一個刺激沖刺、每一次動聽的背景音樂,都是通過精心設(shè)計(jì)的代碼和資源組合出來的奇幻體驗(yàn)。 想象一下,如果你能夠制作自己的電子游戲,將內(nèi)心的奇思妙想實(shí)現(xiàn)在屏幕上,那會是多么令人興奮和自豪的事情。這個夢想,并不遙遠(yuǎn)

    2024年02月20日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包