首页 >图片操作 > 内容

飞机大战小游戏源码---飞机大战初体验

2023年9月18日 22:49

开发环境:

Windows10,pycharm,python3

源码使用教程:

打开pycharm,创建一个新的项目,文件-->新建项目

项目命名:飞机大战初体验,基本解释器选择python3版本

将飞机大战图像素材解压后复制到项目文件中

飞机大战游戏所需图片素材:

链接:https://pan.baidu.com/s/1bX_gc7mbO3Iy6axu2yKZzA
提取码:zhao

找到文件解压路径,右键复制到“飞机大战初体验”项目文件中

找到项目创建位置,将图像素材粘贴到文件中

成功之后,项目中会出现素材文件如下

创建方法模块;右键飞机大战初体验项目-->选择新建-->点击创建python 文件-->命名为plane_sprites(不用加.py后缀,会自动生成)

将以下代码复制到plane_sprites.py文件中

import randomimport pygameSCREEN_RECT = pygame.Rect(0, 0, 480, 700)FRAME_PER_SEC = 60CREATE_ENEMY_EVENT = pygame.USEREVENTHERO_FIRE_EVENT = pygame.USEREVENT + 1class GameSprite(pygame.sprite.Sprite):    def __init__(self, image_name, speed=1):        super().__init__()        self.image = pygame.image.load(image_name)        self.rect = self.image.get_rect()        self.speed = speed    def update(self):        self.rect.y += self.speedclass Background(GameSprite):    def __init__(self, is_alt=False):        super().__init__("./images/background.png")        if is_alt:            self.rect.y = -self.rect.height    def update(self):        super().update()        if self.rect.y >= SCREEN_RECT.height:            self.rect.y = -self.rect.heightclass Enemy(GameSprite):    def __init__(self):        super().__init__("./images/enemy1.png")        self.speed = random.randint(1, 3)        self.rect.bottom = 0        max_x = SCREEN_RECT.width - self.rect.width        self.rect.x = random.randint(0, max_x)    def update(self):        super().update()        if self.rect.y >= SCREEN_RECT.height:            # print("飞出屏幕,需要从精灵组中删除")            self.kill()    def __del__(self):        # print("敌机挂了 %s" % self.rect)        passclass Hero(GameSprite):    def __init__(self):        super().__init__("./images/me2.png", 0)        self.rect.centerx = SCREEN_RECT.centerx        self.rect.bottom = SCREEN_RECT.bottom - 120        self.bullets = pygame.sprite.Group()    def update(self):        self.rect.x += self.speed        if self.rect.x < 0:            self.rect.x = 0        elif self.rect.right > SCREEN_RECT.right:            self.rect.right = SCREEN_RECT.right    def fire(self):        print("发射子弹")        for i in (0, 1, 2):            bullet = Bullet()            bullet.rect.bottom = self.rect.y - i * 20            bullet.rect.centerx = self.rect.centerx            self.bullets.add(bullet)class Bullet(GameSprite):    def __init__(self):        super().__init__("./images/bullet1.png", -2)    def update(self):        super().update()        if self.rect.bottom < 0:            self.kill()    def __del__(self):        print("子弹被销毁")

创建main模块;右键飞机大战初体验项目-->选择新建-->点击创建python 文件-->命名为plane_main-->将以下代码复制到main程序中

import pygamefrom plane_sprites import *class PlaneGame(object):    def __init__(self):        print("游戏初始化")        self.screen = pygame.display.set_mode(SCREEN_RECT.size)        self.clock = pygame.time.Clock()        self.__create_sprites()        pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)        pygame.time.set_timer(HERO_FIRE_EVENT, 500)    def __create_sprites(self):        bg1 = Background()        bg2 = Background(True)        self.back_group = pygame.sprite.Group(bg1, bg2)        self.enemy_group = pygame.sprite.Group()        self.hero = Hero()        self.hero_group = pygame.sprite.Group(self.hero)    def start_game(self):        print("游戏开始")        while True:            self.clock.tick(FRAME_PER_SEC)            self.__event_handler()            self.__check_collide()            self.__update_sprites()            pygame.display.update()    def __event_handler(self):        for event in pygame.event.get():            if event.type == pygame.QUIT:                PlaneGame.__game_over()            elif event.type == CREATE_ENEMY_EVENT:                # print("敌机出场")                enemy = Enemy()                self.enemy_group.add(enemy)            elif event.type == HERO_FIRE_EVENT:                self.hero.fire()        keys_pressed = pygame.key.get_pressed()        if keys_pressed[pygame.K_RIGHT]:            self.hero.speed = 3        elif keys_pressed[pygame.K_LEFT]:            self.hero.speed = -3        else:            self.hero.speed = 0    def __check_collide(self):        pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)        enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)        if len(enemies) > 0:            self.hero.kill()            PlaneGame.__game_over()    def __update_sprites(self):        self.back_group.update()        self.back_group.draw(self.screen)        self.enemy_group.update()        self.enemy_group.draw(self.screen)        self.hero_group.update()        self.hero_group.draw(self.screen)        self.hero.bullets.update()        self.hero.bullets.draw(self.screen)    @staticmethod    def __game_over():        print("游戏结束")        pygame.quit()        exit()if __name__ == '__main__':    game = PlaneGame()    game.start_game()

此处出现报错是因为还没有安装pygame软件包,将鼠标放在报错处,提示 安装软件包pygame 点击等待安装即可;安装成功,报错提示消失,在main程序中右击鼠标点击运行即可;

出现初体验飞机大战小游戏如下图就成功啦~~~


参考文章:https://blog.csdn.net/m0_62064241/article/details/121308784

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,在此表示感谢。

特别提醒:

1、请用户自行保存原始数据,为确保安全网站使用完即被永久销毁,如何人将无法再次获取。

2、如果上次文件较大或者涉及到复杂运算的数据,可能需要一定的时间,请耐心等待一会。

3、请按照用户协议文明上网,如果发现用户存在恶意行为,包括但不限于发布不合适言论妄图

     获取用户隐私信息等行为,网站将根据掌握的情况对用户进行限制部分行为、永久封号等处罚。

4、如果文件下载失败可能是弹出窗口被浏览器拦截,点击允许弹出即可,一般在网址栏位置设置

5、欢迎将网站推荐给其他人,网站持续更新更多功能敬请期待,收藏网站高效办公不迷路。

      



登录后回复

共有0条评论