python实现飞机大战详情(含源码)

准备文件

需要模块模块pygame

  • pygame简介
    Pygame是跨平台Python模块,专为电子游戏设计,包含图像、声音。建立在SDL基础上,允许实时电子游戏研发的模块。

  • pygame的安装
    使用命令 pip install pygame

所需素材(包括音频,图片素材):https://pan.baidu.com/s/1lq8CDvvhgymB_5h2wzKc8Q
密码:tebp

实现思路python实现飞机大战详情(含源码)_第1张图片

原图

重要函数及部分代码展示

重要函数

  1. 启用pygame界面与音频组件组件,绘制一个480*700主界面:
pygame.init()
pygame.mixer.init()
bg_size = width, height = 480, 700
screen = pygame.display.set_mode(bg_size)
  1. 导入素材,以下为导入素材所用函数:
    pygame.image.load(“图片路径”).convert_alpha() //以alpha通道导入图片,识别图片去白色背景,用于导入飞机子弹素材。
    pygame.image.load(“图片路径”).convert() //常规导入图片,用于导入背景素材。

    pygame.mixer.music.load(“图片路径”) //导入音乐素材。
    pygame.mixer.music.set_volume() //设置声音大小。

  2. 创建飞机,子弹之类的对象并为其初始化,添加移动的方法,例:

import pygame

class MyPlane(pygame.sprite.Sprite):
    def __init__(self, bg_size):
     #初始化与导入素材
     	pass

    def moveUp(self):
    #向上移动方法
   		pass
    def moveDown(self):
       #向下移动方法
    	pass
    def moveLeft(self):
     	pass
    def moveRight(self):
		pass

    def reset(self):
       #重置即销毁方法
    	 pass

  1. 碰撞检测
    pygame.sprite.spritecollide(素材1,素材2, False, pygame.sprite.collide_mask)
    如果两个素材接触到则返回一个bool值False

  2. 详细代码见:链接:https://pan.baidu.com/s/19m0xiNEFfgNNfokydDGxRg
    提取码:n09t

部分代码

  1.     # 检测子弹是否击中敌机
        for b in bullets:
            if b.active:
                b.move()
                screen.blit(b.image, b.rect)
                enemy_hit = pygame.sprite.spritecollide(b, enemies, False, pygame.sprite.collide_mask)
                if enemy_hit:
                    b.active = False
                    for e in enemy_hit:
                        if e in mid_enemies or e in big_enemies:
                            e.hit = True
                            e.energy -= 1
                            if e.energy == 0:
                                e.active = False
                        else:
                            e.active = False
    
  2. 玩家飞机对象:
import pygame
#继承pygame.sprite.Sprite类
class MyPlane(pygame.sprite.Sprite):
    def __init__(self, bg_size):
        pygame.sprite.Sprite.__init__(self)
		#导入素材
        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()
        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
         设置移动速度
        self.speed = 10
        #设置状态
        self.active = True
        self.invincible = False
        self.mask = pygame.mask.from_surface(self.image1)

    def moveUp(self):
        if self.rect.top > 0:
            self.rect.top -= self.speed
        else:
            self.rect.top = 0

    def moveDown(self):
        if self.rect.bottom < self.height - 60:
            self.rect.top += self.speed
        else:
            self.rect.bottom = self.height - 60

    def moveLeft(self):
        if self.rect.left > 0:
            self.rect.left -= self.speed
        else:
            self.rect.left = 0

    def moveRight(self):
        if self.rect.right < self.width:
            self.rect.left += self.speed
        else:
            self.rect.right = self.width

    def reset(self):
        self.rect.left, self.rect.top = \
                        (self.width - self.rect.width) // 2, \
                        self.height - self.rect.height - 60
        self.active = True
        self.invincible = True

结果演示

给出初步实现效果如下:

python实现飞机大战详情(含源码)_第2张图片

你可能感兴趣的:(python,pygame实例,飞机大战游戏)