Dream的茶话会|??????情人节必备,和女友一起玩新版飞机大战!万字只为你??????收藏起来吧

情人节必备,和女友一起玩新版飞机大战!
本文目录:

    • 情人节必备,和女友一起玩新版飞机大战!
  • 成果展示!
  • 应用知识
  • 游戏特色
  • 代码展示和说明
    • 背景设定
    • 敌人设定
    • 飞机设定
    • 子弹设定
    • 攻击设定
    • 游戏主程序
  • 完整代码+解析+图片+音乐
  • 最后的福利

hello大家好,我是Dream,今天我又来了,带着我研究了一个星期的宝贝来了好了,进入今天的主题: 用pygame重新定义飞机大战,请大家前排就坐!!
成果展示! Dream的茶话会|??????情人节必备,和女友一起玩新版飞机大战!万字只为你??????收藏起来吧
文章图片


这是展示的图片,是不是很好奇呀,先别着急,先给个点赞+收藏呗,接下来我们一起开淦!
应用知识 ??在这里我们主要用到了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 winspeak = win.Dispatch("SAPI.SpVoice") # 初始化界面 pygame.init() # 设置窗口大小 windows = pygame.display.set_mode((800, 700)) # 设置窗口标题 pygame.display.set_caption("wuyf版打飞机") # 引入图片 logo icon = pygame.image.load('wuyf.png') pygame.display.set_icon(icon)# 4.游戏获取背景 bgcolor = pygame.image.load('监狱3.png') # 5.设置玩家飞机 playerimg = pygame.image.load('我的飞机.png') X = 350# 设置玩家X轴 Y = 480# 设置玩家Y轴 # 停止移动就可以将palyerStep改为0。控制一个变量来指定飞机指定移动 plagerStep = 0 playerStep=0# 添加背景音乐 pygame.mixer.music.load('dawan.mp3') pygame.mixer.music.play(loops=0, start=20) pygame.mixer.music.set_volume(0.3) # 添加射中的音效 # bao_music = pygame.mixer.Sound('卧槽.mp3') # bao_music.set_volume(1) # bao_music.play()# 分数 score = 0 # 添加字体和大小 font = pygame.font.Font('simkai.ttf', 32)# 字体类 def show_score(): # 显示的文字 text = f"Score:{ score}"# 渲染然后显示 显示text True表示24位的字 score_render = font.render(text, True, (0, 255, 0)) # 指定字体放到那个位置 windows .blit(score_render, (10, 10)) text = f"Bigbullets:{ len(Bullets)}"# 渲染然后显示 显示text True表示24位的字 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('wuyifan.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('woc.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('fan哥.jpg') self.x = random.randint(200, 600)# 随机产生X self.y = random.randint(50, 250)# 随机产生Y 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('tb.jpg') self.x = random.randint(0, 600)# 随机产生X self.y = random.randint(0, 250)# 随机产生Y 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):# 每次循环都都在class Enemy中过一边,所以随机产生一个敌人的参数并且保存到列表中 enemis.append(Enemy()) # Enemis= [] # if len(Bullets)>25: #for i in range(6): #Enemis.append(Enemy1()) Enemis = []# 显示敌人并且实现敌人的移动下沉 def enemy():# 循环保存敌人的列表,每个敌人都过在这个for循环里被限制了移动的轨迹 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():# 循环保存敌人的列表,每个敌人都过在这个for循环里被限制了移动的轨迹 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():# 设置飞机的坐标和飞机X Y轴最大的移动位置 global X, Y # 5. 设置飞机 windows.blit(playerimg, (X, Y)) # 6.飞机移动 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# 设置子弹的X轴 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: # 射中了 # bullets.remove(self) e.reset()# 重置敌人 bao_music = pygame.mixer.Sound('怕啥来啥.mp3') bao_music.set_volume(0.3) bao_music.play()# 击中加10分c score += 20 for e in Enemis: if distance(self.x, self.y, e.x, e.y) < 300: # 射中了 # bullets.remove(self) e.reset()# 重置敌人 bao_music = pygame.mixer.Sound('怕啥来啥.mp3') bao_music.set_volume(0.3) bao_music.play()# 击中加10分 score += 20 class bigbig1: def __init__(self): self.img = pygame.image.load('giao.jpg') self.x = X-30# 设置子弹的X轴 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: # 射中了 # bullets.remove(self) e.reset()# 重置敌人 bao_music = pygame.mixer.Sound('怕啥来啥.mp3') bao_music.set_volume(0.3) bao_music.play()# 击中加10分 score += 20 class bigbig2: def __init__(self): self.img = pygame.image.load('giao.jpg') self.x = X+120# 设置子弹的X轴 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: # 射中了 # bullets.remove(self) e.reset()# 重置敌人 bao_music = pygame.mixer.Sound('怕啥来啥.mp3') bao_music.set_volume(0.6) bao_music.play()# 击中加10分 score += 20 class bigbig3: def __init__(self): self.img = pygame.image.load('giao.jpg') self.x = X+270# 设置子弹的X轴 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: # 射中了 # bullets.remove(self) e.reset()# 重置敌人 bao_music = pygame.mixer.Sound('怕啥来啥.mp3') bao_music.set_volume(0.6) bao_music.play()# 击中加10分 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# 往上移动 # 判断子弹是否出了界面 # if c.y < 0: #Bullets.remove(b) for d in big_bullets: windows.blit(d.img, (d.x, d.y)) d.hit()# 查看是否击中了敌人 d.y -= d.step# 往上移动 # 判断子弹是否出了界面 # if c.y < 0: #Bullets.remove(b)

游戏主程序 这里是我们的主循环, if event.type == pygame.KEYDOWN: 实现键盘操控我们的飞机;
**#飞机移动** :fiji_type()
**#调用敌人这个函数** :enemy()enemy1()
# 显示子弹 :show_bullets()
# 游戏结束语 : check_over()
# 刷新更新数据 :pygame.display.update()
running = True while running: # 4.背景 # 每个循环是画一张画组成的 # 画出来bgcolor windows.blit(bgcolor, (0, 0)) # 调用这个字体 show_score() # event.get操作事件 for event in pygame.event.get(): # 判断操作类型是不是QUIT if event.type == pygame.QUIT: # 如果程序为False就会停止则关闭 running = False # 7.控制飞机的移动 # 通过控制键盘的事件来控制(playerStep值)飞机的移动 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入门基础教程全套+小白速成+学不会来找我!
【Dream的茶话会|??????情人节必备,和女友一起玩新版飞机大战!万字只为你??????收藏起来吧】好啦,这就是今天要给大家分享的全部内容了
如果你喜欢的话,就不要吝惜你的一键三连了~??????Dream的茶话会|??????情人节必备,和女友一起玩新版飞机大战!万字只为你??????收藏起来吧
文章图片

    推荐阅读