python实现飞机大战_python-pygame:实现飞机大战详情(含源码)

准备文件

需要模块模块pygame

pygame简介

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

pygame的安装

使用命令 pip install pygame

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

密码:tebp

实现思路

原图

重要函数及部分代码展示

重要函数

启用pygame界面与音频组件组件,绘制一个480*700主界面:

pygame.init()

pygame.mixer.init()

bg_size = width, height = 480, 700

screen = pygame.display.set_mode(bg_size)

导入素材,以下为导入素材所用函数:

pygame.image.load(“图片路径”).convert_alpha() //以alpha通道导入图片,识别图片去白色背景,用于导入飞机子弹素材。

pygame.image.load(“图片路径”).convert() //常规导入图片,用于导入背景素材。

pygame.mixer.music.load(“图片路径”) //导入音乐素材。

pygame.mixer.music.set_volume() //设置声音大小。

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

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

碰撞检测

pygame.sprite.spritecollide(素材1,素材2, False, pygame.sprite.collide_mask)

如果两个素材接触到则返回一个bool值False

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

提取码:n09t

部分代码

# 检测子弹是否击中敌机

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

玩家飞机对象:

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

结果演示

给出初步实现效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值