🐲情人节必备,和女友一起玩新版飞机大战!
👻👻👻hello大家好,我是Dream,今天我又来了,带着我研究了一个星期的宝贝来了🤣🤣🤣好了,进入今天的主题:
用pygame重新定义飞机大战,请大家前排就坐!!
💦成果展示!
🚀这是展示的图片,是不是很好奇呀,先别着急,先给个点赞+收藏呗,接下来我们一起开淦!
💦应用知识
??在这里我们主要用到了Python中的pygame模块来实现的,同时应用了random和math以及win32com.client库 ??为确保游戏平衡,我们设定了如下规则: ??1.设置三款子弹,分别是轻型子弹,重型子弹和全屏子弹,其中: 轻型子弹每次在屏幕中只能同时存在三枚,数量不受限,只能打一个目标; 重型子弹最多可以打11枚,每次可以攻击多个目标; 全屏子弹总共有两发,全屏受到攻击 ??2.在这里我设置了新的图标,设定两位敌人,分别是我们熟悉的小伙伴。
??3.我们自由操控战斗机进行左右上下移动,通过子弹消灭敌机进行得分,只要敌机不飞到游戏屏幕低端游戏便可以继续下去!
💦游戏特色
👑1.“帅气的背景图片”,可以看到这背景图非常的贴近主题呀:
👑2.有趣的角色设定,让我们帅气吴兄担任被打的角色,实属大快人心
👑3.好玩搞笑的语音: 大碗牢饭作为背景音乐,实属增加欢快的气氛; 每次不同子弹击落不同的敌人会有不同的搞笑语音发出
👑4.子弹种类的不同和分数的设定又为游戏提供了操作性空间
💦代码展示和说明
🚩这个游戏的代码我总共写了四百多行吧,花了一周左右的时间,反复改了很多次,就是希望把最好的带给大家??????
🐹背景设定
这里用pygame.image.load实现背景的选取;pygame.mixer.music.load完成背景音乐的制作;以及font.render完成字体的设定,注释详细,大家可以慢慢看:
import pygame
import random
import math
import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")
pygame.init()
windows = pygame.display.set_mode((800, 700))
pygame.display.set_caption("吴亦凡版打飞机")
icon = pygame.image.load('吴亦凡.png')
pygame.display.set_icon(icon)
bgcolor = pygame.image.load('监狱3.png')
playerimg = pygame.image.load('我的飞机.png')
X = 350
Y = 480
plagerStep = 0
playerStep=0
pygame.mixer.music.load('大碗牢饭.mp3')
pygame.mixer.music.play(loops=0, start=20)
pygame.mixer.music.set_volume(0.3)
score = 0
font = pygame.font.Font('simkai.ttf', 32)
def show_score():
text = f"Score:{score}"
score_render = font.render(text, True, (0, 255, 0))
windows .blit(score_render, (10, 10))
text = f"Bigbullets:{len(Bullets)}"
score_render = font.render(text, True, (0, 255, 0))
windows.blit(score_render, (10, 50))
over = False
over_font = pygame.font.Font('simkai.ttf', 64)
def check_over():
if over:
bgcolor = pygame.image.load('吴亦凡.webp')
windows.blit(bgcolor, (175, 150))
my_font = pygame.font.SysFont("simkai.ttf", 100)
text = "Game over"
render =my_font.render(text, True, (255, 0, 0),(0, 255, 0))
windows.blit(render, (200, 50))
defeat_music = pygame.mixer.Sound('卧槽.mp3')
defeat_music.set_volume(0.5)
defeat_music.play()
🐹敌人设定
🏃这里完成对敌人类的编写,pygame.image.load制作出敌人的外形; enemis = [] 以列表来储存产生的敌机,在之后便于对敌机状态的操作; a = bx - ex b = by - ey return math.sqrt(a * a + b * b) # 开根号 🏃这里运用数学知识,根据三角形两边长求斜边的长度,算出斜边的长度代表子弹敌人间的距离,从而实现撞击爆炸功能;
class Enemy:
def __init__(self):
self.img = pygame.image.load('凡哥.jpg')
self.x = random.randint(200, 600)
self.y = random.randint(50, 250)
self.step = random.randint(2, 4)
def reset(self):
self.x = random.randint(200, 600)
self.y = random.randint(50, 180)
class Enemy1:
def __init__(self):
self.img = pygame.image.load('田斌.jpg')
self.x = random.randint(0, 600)
self.y = random.randint(0, 250)
self.step = random.randint(2, 3)
def reset(self):
self.x = random.randint(200, 600)
self.y = random.randint(50, 180)
def distance(bx, by, ex, ey):
a = bx - ex
b = by - ey
return math.sqrt(a * a + b * b)
enemis = []
for i in range(6):
enemis.append(Enemy())
Enemis = []
def enemy():
global over
for e in enemis:
windows.blit(e.img, (e.x, e.y))
e.x += e.step
if e.x > 750 or e.x < 0:
e.step *= -1
e.y += 40
if e.y > 460:
over = True
print("游戏结束啦")
enemis.clear()
def enemy1():
global over
for e in Enemis:
windows.blit(e.img, (e.x, e.y))
e.x += e.step
if e.x > 750 or e.x < 0:
e.step *= -1
e.y += 40
if e.y > 460:
over = True
print("游戏结束啦")
🐹飞机设定
🏃这里实现对我们飞机移动范围的控制,使其移动范围适合我们屏幕的大小: windows.blit(playerimg, (X, Y)) 定义其在X和Y轴进行移动; if X > 680: 预防飞机出界
def fiji_type():
global X, Y
windows.blit(playerimg, (X, Y))
X += plagerStep
Y += playerStep
if X > 680:
X = 680
if X < 0:
X = 0
if Y> 640:
Y = 640
if Y< 0:
Y = 0
🐹 子弹设定
🏃在这里我们设定出三款子弹,以及规定他们射击不同目标的得分和发出的声音: self.img = pygame.image.load(‘giao.jpg’) 设定子弹的形状 if distance(self.x, self.y, e.x, e.y) < 300: 设定爆炸条件 bao_music = pygame.mixer.Sound(‘怕啥来啥.mp3’) 设定不同子弹击中目标的声音
class bigbig:
def __init__(self):
self.img = pygame.image.load('giao.jpg')
self.x = X -180
self.y = Y + 5
self.step =6
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
e.reset()
bao_music = pygame.mixer.Sound('怕啥来啥.mp3')
bao_music.set_volume(0.3)
bao_music.play()
score += 20
for e in Enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
e.reset()
bao_music = pygame.mixer.Sound('怕啥来啥.mp3')
bao_music.set_volume(0.3)
bao_music.play()
score += 20
class bigbig1:
def __init__(self):
self.img = pygame.image.load('giao.jpg')
self.x = X-30
self.y = Y + 5
self.step = 6
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
e.reset()
bao_music = pygame.mixer.Sound('怕啥来啥.mp3')
bao_music.set_volume(0.3)
bao_music.play()
score += 20
class bigbig2:
def __init__(self):
self.img = pygame.image.load('giao.jpg')
self.x = X+120
self.y = Y + 5
self.step = 6
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
e.reset()
bao_music = pygame.mixer.Sound('怕啥来啥.mp3')
bao_music.set_volume(0.6)
bao_music.play()
score += 20
class bigbig3:
def __init__(self):
self.img = pygame.image.load('giao.jpg')
self.x = X+270
self.y = Y + 5
self.step = 6
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
e.reset()
bao_music = pygame.mixer.Sound('怕啥来啥.mp3')
bao_music.set_volume(0.6)
bao_music.play()
score += 20
🐹攻击设定
🏃这里是不同子弹射击不同目标时的状态:
def show_bullets():
for b in bullets:
windows.blit(b.img, (b.x, b.y))
b. hit()
b.y -= b.step
if b.y < 0:
bullets.remove(b)
for c in Bullets:
windows.blit(c.img, (c.x, c.y))
c.hit()
c.y -= c.step
for d in big_bullets:
windows.blit(d.img, (d.x, d.y))
d.hit()
d.y -= d.step
🐹游戏主程序
🏃这里是我们的主循环, if event.type == pygame.KEYDOWN: 实现键盘操控我们的飞机; 🏃**#飞机移动** :fiji_type() 🏃**#调用敌人这个函数** :enemy()enemy1() 🏃 # 显示子弹 :show_bullets() 🏃 # 游戏结束语 : check_over() 🏃 # 刷新更新数据 :pygame.display.update()
running = True
while running:
windows.blit(bgcolor, (0, 0))
show_score()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
plagerStep = 3
elif event.key == pygame.K_DOWN:
playerStep = 3
elif event.key == pygame.K_UP:
playerStep = -3
elif event.key == pygame.K_LEFT:
plagerStep = -3
elif event.key == pygame.K_c:
if len(bullets)<3:
b = Bullet()
bullets.append(b)
elif event.key == pygame.K_SPACE:
if len (Bullets) >10:
bao_music = pygame.mixer.Sound('导师.mp3')
bao_music.set_volume(1 )
bao_music.play()
Enemis.append(Enemy1())
elif len(Bullets) <50:
c=BigBullet()
Bullets.append(c)
elif event.key == pygame.K_v:
if len(big_bullets) < 10:
c = bigbig()
d =bigbig1()
e=bigbig2()
f=bigbig3()
g=bigbig4()
big_bullets.append(c)
big_bullets.append(d)
big_bullets.append(e)
big_bullets.append(f)
big_bullets.append(g)
💦完整代码+解析+图片+音乐
这里是此程序所有需要的东西了,需要的小伙伴自取一下,可以直接拿去用: 用pygame重新定义飞机大战,搞笑+创新十足+源码解析图片音频+拿去直接用! 快给你的小伙伴们露两手吧!
🐸最后的福利
??????最后一点小福利带给大家:如果想快速上手python的小伙伴们,这个详细整理PPT可以迅速帮助大家打牢python基础,需要的小伙伴们可以下载一下 Python入门基础教程全套+小白速成+学不会来找我!
好啦,这就是今天要给大家分享的全部内容了 如果你喜欢的话,就不要吝惜你的一键三连了~??????
|