Python代码下的飞机大战

这篇具有很好参考价值的文章主要介绍了Python代码下的飞机大战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

飞机大战项目

本项目的优点就是,不需要你创建很多复杂的文件夹,单个操作台就可以完成飞机大战游戏的基础版本。如果你感兴趣,就快去试一试吧!素材链接也在下面喽,快去开启你的游戏之旅吧!
素材链接:链接:https://pan.baidu.com/s/1Mb5w-_I-oUi-W0n0jHFYXw
百度网盘提取码:2301

Python代码下的飞机大战,python,pygame,开发语言,网络,笔记,贪心算法,大数据

以下是项目代码:

​ 因为只是为了复习面相对象、函数、所以以下代码可以实现,玩家操控飞机,躲避敌机子弹并击落飞机,同时伴随着爆炸声音,在此我背景音乐选择的是《奇迹再现》,所有的东西,你理解后都可以自己更换,以及后期的功能拓展什么的,你都可以做。操控上下左右(w s a d),发射子弹,空格键。文章来源地址https://www.toymoban.com/news/detail-846640.html

import time
import random

import pygame
from pygame import *

class HeroPlane(pygame.sprite.Sprite):
    #存放所有子弹的组
    bullets=pygame.sprite.Group()


    def __init__(self,screen):
        #这个精灵类的初始方法,必须调用
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("./feiji/hero1.png")


        # 2.0创建一个飞机图片,当做玩家飞机
        self.player = pygame.image.load("./feiji/hero1.png")

        #根据图片的矩形对象
        self.rect =self.image.get_rect()  #rect 矩形
        self.rect.topleft=[Manager.bg_size[0]/2-100/2,600]

        # 飞机速度
        self.speed = 15

        self.screen=screen

        #装子弹的列表
        self.bullets=pygame.sprite.Group()

    def key_control(self):
        # 零时监听键盘事件
        key_pressed = pygame.key.get_pressed()

        if key_pressed[K_w] or key_pressed[K_UP]:
            # print('上')
            self.rect.top -= self.speed
        if key_pressed[K_s] or key_pressed[K_DOWN]:
            # print('下')
            self.rect.bottom += self.speed
        if key_pressed[K_a] or key_pressed[K_LEFT]:
            # print('左')
            self.rect.left -= self.speed
        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            # print('右')
            self.rect.right += self.speed
        if key_pressed[K_SPACE]:
            # print('空格')
            #按下空格发射子弹
            bullet=Bullet(self.screen,self.rect.left,self.rect.top)
            #把子弹放在列表当中
            self.bullets.add(bullet)
            #存放所有飞机的子弹
            HeroPlane.bullets.add(bullet)


    def update(self):
        self.key_control()
        self.display()

    def display(self):
        # 3.0将飞机图片贴到窗口中
        self.screen.blit(self.player, self.rect)
        #更多子弹的坐标
        self.bullets.update()
        # 把所有的子弹全部添加到列表中
        self.bullets.draw(self.screen)

    @classmethod
    def clear_bullets(cls):
        #清空子弹
        cls.bullets.empty()



class EnemyPlane(pygame.sprite.Sprite):
    #敌方所有的子弹
    enemy_bullets=pygame.sprite.Group()

    def __init__(self,screen):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("./feiji/enemy0.png")
        # 2.0创建一个飞机图片,当做玩家飞机
        self.player = pygame.image.load("./feiji/enemy0.png")
        # 定义飞机坐标
        self.rect=self.image.get_rect()  # rect:矩形

        x=random.randrange(1,Manager.bg_size[0],50)
        self.rect.topleft=[x,0]


        # 飞机速度
        self.speed = 5

        self.screen=screen

        #装子弹的列表
        self.bullets=pygame.sprite.Group()

        #敌机移动方向
        self.direction='right'



    def display(self):
        # 3.0将飞机图片贴到窗口中
        self.screen.blit(self.player,self.rect)
        #遍历所有的子弹
        self.bullets.update()

        #把子弹添加到屏幕上
        self.bullets.draw(self.screen)
    def update(self):
        self.auto_move()
        self.auto_fire()
        self.display()


    def auto_move(self):
        if self.direction=='right':
            self.rect.right+=self.speed
        elif self.direction=='left':
            self.rect.right-=self.speed

        if self.rect.right>Manager.bg_size[0]-51:
            self.direction='left'
        elif self.rect.right<0:
            self.direction='right'

        self.rect.bottom+=self.speed  #敌机移动位置改变

    def auto_fire(self):
        '''自动开火 创建子弹对象 添加进列表'''
        random_num=random.randint(1,10)  #通过更改10,值越大敌机发射子弹的密集程度越低
        if random_num==8:
            bullet=EnemyBullet(self.screen,self.rect.left,self.rect.top)
            self.bullets.add(bullet)
            #把子弹添加到类属性的子弹组里
            EnemyPlane.enemy_bullets.add(bullet)

    @classmethod
    def clear_bullets(cls):
        #清空子弹
        cls.enemy_bullets.empty()

#子弹类
#属性
class Bullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        #精灵类初始化
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('./feiji/bullet.png')

        #获得矩形对象
        self.rect=self.image.get_rect()
        self.rect.topleft=[x+100/2-22/2,y-22]

        #窗口
        self.screen=screen
        #速度
        self.speed=20
    def update(self):
        #修改子弹坐标
        self.rect.top-=self.speed
        #如果子弹移出屏幕上方 则销毁子弹对象
        if self.rect.top<-22:
            self.kill()


#敌方子弹类
#属性
class EnemyBullet(pygame.sprite.Sprite):
    def __init__(self,screen,x,y):
        # 精灵类初始化
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('./feiji/bullet1.png')

        # 获得矩形对象
        self.rect = self.image.get_rect()
        self.rect.topleft = [x + 50 / 2 - 8 / 2, y+39]

        # 窗口
        self.screen = screen
        # 速度
        self.speed = 20

    def update(self):
        # 修改子弹坐标
        self.rect.top += self.speed
        # 如果子弹移出屏幕上方 则销毁子弹对象
        if self.rect.top >Manager.bg_size[1]:
            self.kill()


class GameSound(object):
    def __init__(self):
        pygame.mixer.init() # 音乐模块初始化
        pygame.mixer.music.load('./feiji/qjzx.mp3')
        pygame.mixer.music.set_volume(0.5) #声音大小

        self._bomb=pygame.mixer.Sound('./feiji/baozha.mp3')

    def playBackgroundMusic(self):
        pygame.mixer.music.play(-1)  #开始播放音乐 -1是无限循环,括号里填多少就播放几次

    def playBomeSound(self):
        pygame.mixer.Sound.play(self._bomb)


class Bomb(object):
    #初始化碰撞
    def __init__(self,screen,type):
        self.screen =screen
        if type=='enemy':
            #加载爆炸资源
            self.mImage=[pygame.image.load('./feiji/enemy0_down'+str(v)+'.png')for v in range(1,5)]
        else:
            self.mImage=[pygame.image.load('./feiji/hero_blowup_n'+str(v)+'.png') for v in range(1,5)]
        #设置爆炸索引
        self.mIndex=0
        #爆炸设置
        self.mPos=[0,0]
        #是否可见
        self.mVisible=False

    #设置位置
    def action(self,rect):
        #触发爆炸方法draw
        #爆炸的坐标
        self.mPos[0]=rect.left
        self.mPos[1]=rect.top
        #打开爆炸的开关
        self.mVisible=True

    def draw(self):
        if not self.mVisible:
            return
        self.screen.blit(self.mImage[self.mIndex],(self.mPos[0],self.mPos[1]))
        self.mIndex+=1
        if self.mIndex>=len(self.mImage):
            #如果下标已经最后,代表爆炸结束
            #下标重置
            self.mIndex=0
            self.mVisible=False

#地图
class GameBackground(object):
    #初始化地图
    def __init__(self,screen):
        self.mImage1=pygame.image.load('./feiji/b1.jpg')
        self.mImage2 = pygame.image.load('./feiji/b1.jpg')
        #窗口
        self.screen=screen
        #辅助移动地图
        self.y1=0
        self.y2=-Manager.bg_size[1] #-936

    #移动地图
    def move(self):
        self.y1+=2
        self.y2+=2
        if self.y1>=Manager.bg_size[1]:
            self.y1=0
        if self.y2 >=0:
            self.y2 = -Manager.bg_size[1]

    #绘制地图
    def draw(self):
        self.screen.blit(self.mImage1,(0,self.y1))
        self.screen.blit(self.mImage2, (0, self.y2))




class Manager(object):
    bg_size=(624,830)
    #创建敌机定时器的id
    create_enemy_id=10
    #游戏结束倒计时的id
    game_over_id=11
    #游戏是否结束
    is_game_over=False
    #创建倒计时
    over_time=3


    def __init__(self):
        pygame.init()
        #创建窗口
        self.screen=pygame.display.set_mode(Manager.bg_size,0,32)
        #创建背景图片
        # self.background=pygame.image.load('./feiji/background.png')
        self.map=GameBackground(self.screen)
        #初始化一个装玩家精灵的group
        self.player=pygame.sprite.Group()
        # 初始化一个装敌机精灵的group
        self.enemys = pygame.sprite.Group()
        # 初始化一个装玩家爆炸的对象
        self.player_bomb=Bomb(self.screen,'player')
        # 初始化一个装敌机爆炸的对象
        self.enemy_bomb = Bomb(self.screen, 'enemy')
        # 初始化一个声音播放的对象
        self.sound=GameSound()

    def exit(self):
        print('退出')
        pygame.quit()
        exit()

    def show_over_text(self):
        #游戏结束 倒计时后重新开始
        self.drawText('gameover %d'% Manager.over_time,100,Manager.bg_size[1]/2,textHeight=50,fontColor=[255,0,0])

    def game_over_timer(self):
        self.show_over_text()
        #倒计时-1
        Manager.over_time-=1
        if Manager.over_time==0:
            #参数2改为0 定时间停止
            pygame.time.set_timer(Manager.game_over_id,0)
            #倒计时后重新开始
            Manager.over_time=3
            Manager.is_game_over=False
            self.start_game()

    def start_game(self):
        #重新开始游戏 有些类属性要清空
        EnemyPlane.clear_bullets()
        HeroPlane.clear_bullets()   #会调用之前的静态方法并清空
        manager=Manager()
        manager.main()


    def new_player(self):
        #创建飞机对象 添加玩家的组
        player=HeroPlane(self.screen)
        self.player.add(player)

    def new_enemy(self):
        #创建敌方飞机对象 添加敌机的组
        enemy=EnemyPlane(self.screen)
        self.enemys.add(enemy)

    #绘制文字
    def drawText(self,text,x,y,textHeight=30,fontColor=(255,0,0),backgroundColor=None):
        #通过字体文件获取字体对象
        font_obj=pygame.font.Font('./feiji/PlayfairDisplaySemibold.ttf',textHeight)
        #配置要显示的文字
        text_obj=font_obj.render(text,True,fontColor,backgroundColor)
        #获取要显示的对象rect
        text_rect=text_obj.get_rect()
        #设置显示对象的坐标
        text_rect.topleft=(x,y)
        #绘制字到指定的位置区域
        self.screen.blit(text_obj,text_rect)



    def main(self):
        #播放音乐
        self.sound.playBackgroundMusic()
        #创建一个玩家
        self.new_player()
        #开启创建敌机的定时器
        pygame.time.set_timer(Manager.create_enemy_id,1000)  #每隔1000毫秒创造一个敌机
        while True:
            #把背景图片贴到窗口
            # self.screen.blit(self.background,(0,0))
            #移动地图
            self.map.move()
            #把地图贴到窗口上
            self.map.draw()

            #绘制文字
            self.drawText('hp:10000',0,0)
            if Manager.is_game_over:
                #判断游戏结束才显示文字
                self.show_over_text()

            #循环遍历所有的事件
            for event in pygame.event.get():
                # 判断事件类型
                if event.type == QUIT:
                    self.exit()
                elif event.type==Manager.create_enemy_id:
                    #创建一个敌机
                    self.new_enemy()
                elif event.type==Manager.game_over_id:
                    #定时器触发事件
                    self.game_over_timer()


            #调用爆炸对象
            self.player_bomb.draw()
            self.enemy_bomb.draw()

            #玩家飞机和敌方子弹碰撞的判断
            if self.player.sprites():
                isover=pygame.sprite.spritecollide(self.player.sprites()[0],EnemyPlane.enemy_bullets,True)
                if isover:
                    Manager.is_game_over=True  #标志游戏结束
                    pygame.time.set_timer(Manager.game_over_id,1000)  #开始游戏倒计时
                    print('中弹')
                    self.player_bomb.action(self.player.sprites()[0].rect)
                    #把玩家飞机从精灵组中移除
                    self.player.remove(self.player.sprites()[0])
                    #爆炸声音
                    self.sound.playBomeSound()


            #判断碰撞
            iscollide=pygame.sprite.groupcollide(self.player,self.enemys,True,True)

            if iscollide:
                Manager.is_game_over=True #标志游戏结束
                pygame.time.set_timer(Manager.game_over_id,1000)  #开启游戏倒计时
                items=list(iscollide.items())[0]
                print(items)
                x=items[0]
                y=items[1][0]
                #玩家爆炸图片
                self.player_bomb.action(x.rect)
                #敌机爆炸图片
                self.enemy_bomb.action(y.rect)
                #爆炸的声音
                self.sound.playBomeSound()

            # 玩家子弹和所有敌机的碰撞判断
            is_enemy=pygame.sprite.groupcollide(HeroPlane.bullets,self.enemys,True,True)
            if is_enemy:
                items=list(is_enemy.items())[0]
                y=items[1][0]
                #敌机爆炸的图片
                self.enemy_bomb.action(y.rect)
                #爆炸的声音
                self.sound.playBomeSound()


            #玩家飞机子弹数量的显示
            self.player.update()
            #敌机和子弹的显示
            self.enemys.update()

            #刷新窗口内容
            pygame.display.update()
            pygame.init()
            clock = pygame.time.Clock()

            # 在游戏循环中使用clock.tick()方法来替代time.sleep()函数
            clock.tick(60)

if __name__ == '__main__':
    manager=Manager()
    manager.main()




到了这里,关于Python代码下的飞机大战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pygame飞机大战小游戏(python大作业)

      python大作业,在查看了老师给的链接发现教学视频不完整,所以借用了同学的《Python编程 从入门到实践》中的一个项目,学习模仿。 二、游戏具体介绍 这是一款由辉辉亲自打造的太空对战小游戏。 游戏背景:在广袤无垠的太空里有一群蓝精灵(不是)有一群邪恶的坏人,

    2024年02月11日
    浏览(58)
  • Python实验,用pygame做飞机大战游戏设计

    摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功能。Python是一种跨平台的、开源的、免费的、解释型的高级编程语言。它具有丰富的、强大的库, 能够

    2024年02月07日
    浏览(43)
  • 【python】 pygame学习示例 --飞机大战小游戏制作

    python版本:3.8.5 所需模块:pygame random os pygame版本:20.1 开发环境:pycharm专业版 硬件环境:win11 8G内存以上 使用python的第三方库–pygame 制作飞机大战小游戏 小游戏的内容包括: 玩家player的移动 子弹的发射 陨石的随机掉落(包括旋转 大小 下落角度) 玩家 子弹 陨石的碰撞交互

    2024年02月04日
    浏览(54)
  • Python开发小游戏:写一个飞机大战只需要500行代码!

    ‘’’ :param background_image_path: 背景图片的路径地址 :param size: 游戏窗口的大小 :param title: 游戏窗口的标题 :param font_name: 指定字体 :param font_size: 指定字体大小 :param speed: 背景图滚动整个窗口一次所用时间,单位为ms ‘’’ self.size = size self.screen = pygame.display.set_mode(size) self.tit

    2024年04月11日
    浏览(49)
  • Python3+pygame实现有趣好玩的飞机大战游戏(附源码及素材)

    版权声明:原创不易,本文禁止抄袭、转载,侵权必究! 开发环境 :Windows10 Python3.6.4 第三方库 :Pygame1.9.6 IDE :PyCharm/Sublime Text 素材模块 游戏图片素材: BGM及音效素材: 字体素材: 源码模块 子弹模块 普通子弹部分源码: 超级子弹部分源码: 敌机子弹部分源码: 敌机模

    2024年02月11日
    浏览(60)
  • 飞机大战python代码

    下面附有源代码,一个简单运用python的应用。 图片可自己自由调配 部分模块需要去从python的软件包去下载,可以去从清华和北大还有阿里的云仓库中获取镜像链接,下载速度会快点。 源代码如下并有详细注释:

    2024年02月03日
    浏览(29)
  • python飞机大战实战演练代码

    # 以下是飞机大战的精灵组函数

    2024年02月08日
    浏览(46)
  • python小游戏开发(飞机大战)

    目录 一:背景       1. pygame 模块初识 二.项目设计内容 开发一款飞机大战游戏,要求: (1)实现飞机的移动、子弹发射,对本次游戏有一个初步的编写及认识。 (2)飞机的持续按键移动和飞机自爆优化。 (3)进行基类的抽取,使代码更具有层次性和简化重复代码。 (

    2024年02月16日
    浏览(48)
  • python游戏开发项目之飞机大战(2)

    1.先获取所有事件 注:用来获取当前发生的所有事件,并将其存储在event_list列表中。 2.实现正常退出游戏 注:if event.type == pygame.QUIT这行代码是一个条件判断语句,用来检查当前遍历到的事件类型是否是pygame.QUIT,表示尝试关闭游戏窗口,加上这个模块后我们运行出的界面就

    2024年04月26日
    浏览(35)
  • 300行代码,教你用Python写个飞机大战

     闲赋在家,甚是无聊,便萌发了研究经典小游戏:飞机大战的念头,想必大家可能玩过微信的这款小游戏,给我的感觉是这款游戏怎么可以做得这么好呢,操作简单,容易上手,简直是“老少皆宜”啊~ 既然这款游戏这么棒,能否自己动手用 Python 来实现呢?事实证明是可以

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包