前言
嗨喽~大家好呀,这里是魔王呐 ❤ ~!
随着人类太空科技的飞速发展,希望水晶被越来越多的科学家当做核心能源来开发使用。
人类社会也因为水晶资源的争夺,开始逐渐分化成两派。
留在地球的普通人成立地球联邦,移居卫星的新人类建立行星同盟,两股势力开始各自发展自己的军备,纷争之势就此展开。
跨越十二星座,一场争夺水晶的战争打响,肆意的战火点燃了静谧的星海。
让我们一起制作地球联邦阵营的战机,保护希望水晶,为人类的希望而战。
【想一键获取素材和源码的,点击文章末尾名片】
目录
- 前言
- 模块准备
- 素材准备
- [需要 源码 . 素材 . 点击领取即可](https://jq.qq.com/?_wv=1027&k=S7pjsRlR)
- 代码展示
- 尾语 💝
模块准备
import pygame, os
import time
import random
素材准备
需要 源码 . 素材 . 点击领取即可
代码展示
因为代码有点多,这里就贴出一小部分代码,完整代码可点击上面或文末名片领取
前期准备
设置开火音乐
effect = pygame.mixer.Sound('sounds/fire.wav')
pygame.mixer.Sound.play(effect)
加载BOSS图片
self.image = pygame.image.load('图片/'+boss_img_name+'.png').convert_alpha()
转换BOSS大小
self.image = pygame.transform.scale(self.image, (1, 12))
生成BOSS矩形框架
self.rect = self.image.get_rect()
self.blood = 1000
boss左右移动的速度
self.speed = 3.5
设置继承精灵
必须设置继承精灵 不然在使用精灵函数时会报错
super().__init__()
获取屏幕对象
self.screen = screen
随机 生成5个编号
alien_num = random.randint(1,5)
随机 加载五个飞机中的某个
self.image = pygame.image.load('图片/alien_' + str(alien_num) + '.png')
# picture = pygame.transform.scale(picture, (1280, 720))
self.image = pygame.transform.scale(self.image,(62,62))
获取飞机的 rect
self.rect = self.image.get_rect()
击落本机获得的分数
self.score = 10
子弹部分
加载子弹的图片
self.bullet_img = pygame.image.load("图片/alien_bullet.png").convert_alpha()
self.bullet_img = pygame.transform.scale(self.bullet_img, (12, 12))
调节子弹尺寸的代码
picture = pygame.transform.scale(picture, (1280, 720))
生成子弹精灵组合
self.bullets = Group()
敌机射击频率
self.shoot_frequency = 0
飞机出现
def move(self):
self.rect.top += 5
暂时不用射击
self.shoot()
self.moveBullet()
发射子弹
def shoot(self):
if self.shoot_frequency % 200 == 0:
bullet = Enemy_Bullet(self.bullet_img, self.rect.midbottom)
self.bullets.add(bullet)
self.shoot_frequency += 1
if self.shoot_frequency > 200:
self.shoot_frequency = 1
删除子弹
def moveBullet(self):
for bullet in self.bullets:
bullet.move()
if bullet.rect.bottom < 0:
self.bullets.remove(bullet)
绘制子弹
def drawBullets(self, scr):
self.bullets.draw(scr)
敌机子弹初始位置设置
self.rect.midbottom = init_pos
self.rect.centery +=36
self.speed = 8
飞机图片
获取屏幕对象
self.screen = screen
获取整张图片
self.image_big = pygame.image.load('图片/hero.png').convert_alpha()
# subsurface 形成大图的子表面框架
获取飞机正面图片
self.image = self.image_big.subsurface(pygame.Rect(120, 0, 318 - 240, 87))
获取飞机正面矩形框架尺寸
self.rect = self.image.get_rect()
获取屏幕对象矩形
self.screen_rect = screen.get_rect()
获取屏幕正中x坐标
self.rect.centerx = self.screen_rect.centerx
获取屏幕底部y坐标
self.rect.centery = self.screen_rect.bottom - self.rect.height
设置飞机初始位置
self.centerX = float(self.rect.centerx)
self.centerY = float(self.rect.centery)
飞机尾焰
self.air = None
设置飞机尾焰位置
self.air_rect = pygame.Rect(self.centerX - 20,self.centerY+int((self.rect.height+72)/2)-10-36,40,72)
玩家所有发射子弹的集合
self.bullets = Group()
self.bullet_image = pygame.image.load('图片/bullet_1.png').convert_alpha()
子弹射击
def shoot(self):
产生一颗子弹实例
bullet = Bullet(self.bullet_image,self.rect.midtop)
在group子弹精灵集合中加入子弹
self.bullets.add(bullet)
子弹删除
def moveBullet(self):
逐个检查子弹精灵集合 到达屏幕顶端的子弹删除
for bullet in self.bullets:
bullet.move()
if bullet.rect.bottom < 0:
self.bullets.remove(bullet)
子弹显示
def drawBullets(self, scr):
将精灵集合中的子弹绘制到屏幕上
self.bullets.draw(scr)
向上飞时,增加喷射火焰
def set_air(self, case):
if case == 'up':
air = pygame.image.load('图片/air.png').convert_alpha()
img = air.subsurface(pygame.Rect(80, 0, 50, 87))
self.air = img
elif case == 'remove':
self.air = None
根据移动方向获取飞机移动状态的图片
def set_image(self, case):
if case=='left':
rect = pygame.Rect(195,0,318-248,87)
image = self.image_big.subsurface(rect)
elif case =='right':
rect = pygame.Rect(195,0,318-248,87)
image = pygame.transform.flip(self.image_big.subsurface(rect), True, False)
elif case == 'up' or case == 'down':
rect = pygame.Rect(120, 0, 318 - 240, 87)
image = self.image_big.subsurface(rect)
self.image = image
class Bullet(pygame.sprite.Sprite):
def __init__(self, bullet_img, init_pos):
pygame.sprite.Sprite.__init__(self)
self.image = bullet_img
self.rect = bullet_img.get_rect()
self.rect.midbottom = init_pos
self.speed = 25
def move(self):
self.rect.top -= self.speed
初始化pygame
pygame.init()
# pygame.mixer.init()
# pygame.mixer_music.load('sounds/enviro.mp3') # 加载播放音乐
# pygame.mixer.music.play(-1) #-1 为循环播放
设置游戏主题
pygame.display.set_caption('雷电飞机')
初始化屏幕大小
screen = pygame.display.set_mode((512,768))
大概效果就是这样
尾语 💝
要成功,先发疯,下定决心往前冲!
学习是需要长期坚持的,一步一个脚印地走向未来!
未来的你一定会感谢今天学习的你。
—— 心灵鸡汤
本文章到这里就结束啦~感兴趣的小伙伴可以复制代码去试试哦 😝