py飞机大战

news/2024/10/18 18:15:07/

飞机大战

学习来自:B站“麦叔编程”

--兴趣使人快乐!


源码

# coding:utf-8
'打飞机ybt'
import pygame
import random
import mathfrom time import sleep
# 初始化,必选项
pygame.init()#设置窗口大小
win= pygame.display.set_mode((800,600)) #宽高#设置标题
pygame.display.set_caption('ybt打飞机')#加载图片
icon= pygame.image.load('ufo.png')#设置图标
pygame.display.set_icon(icon)#加载背景图片
bg= pygame.image.load('bg.png')# #添加分数和设置字体
score=0
#freesansbold.ttf是pygame自带的字体,32是字体大小
font = pygame.font.Font('freesansbold.ttf',32)
def show_score():s = f"score: {score}" #f字符串表示可以直接嵌入变量# s,是输入的文本;True表示要是24位的颜色,(0,255,0)是三原色坐标#font.render字体颜色设置score_render = font.render(s,True,(0,255,0))#放入背景位置win.blit(score_render,(10,10))#添加游戏结束字体
#游戏结束
over=False
font1 = pygame.font.Font('freesansbold.ttf',64)
def gameOver():if over:gameover = font1.render("Game Over",True,(0,255,0))win.blit(gameover,(200,250))#添加背景音乐
# pygame.mixer.music.load('bg.wav') #加载音乐
# pygame.mixer.music.play(-1) #单曲循环
#添加击中音效
hits = pygame.mixer.Sound('exp.wav')#引入飞机图片
fly=pygame.image.load('player.png')
#设置飞机初始坐标
flyx = 400
flyy = 500
#设置飞机迈步
flyStep=0#定义敌人类
class Enemy(object):def __init__(self):self.img =pygame.image.load('enemy.png')self.x = random.randint(100, 700)self.y= random.randint(70, 250)self.step = random.randint(1,4)#敌人被击中后恢复位置,其实就是随机又放回去了def reset(self):self.x = random.randint(100, 700)self.y= random.randint(70, 250)enemies = []    #设置敌人类收集列表
for i in range(5):enemies.append(Enemy())#敌人方法
def enemyM():global overfor i in enemies:win.blit(i.img,(i.x,i.y))i.x += i.stepif (i.x > 736 or i.x <0):i.step*=-1   #*-1改变增量正负号i.y+=40if i.y >=450:over =Trueprint ("game over")enemies.clear() #列表清空敌人#计算飞机到敌人的距离;勾股定理#欧几里得距离
def distance(bx, by, ex, ey):a = bx - exb = by - eyreturn math.sqrt(a*a + b*b) #sqrt方法开根号,当然也可以**0.5  #不太明天为什么计算斜边(先记住方法即可)#定义子弹类
class Bullet(object):def __init__(self):self.img = pygame.image.load('bullet.png')self.x = flyx +16  #子弹挪到飞机中间self.y = flyy + 10  #子弹挪到飞机上方self.step = 30#击中def hit(self):global scorefor i in enemies:if distance(self.x,self.y,i.x,i.y) < 30:#判断子弹到敌人的距离小于30#击中后移除敌人hits.play()  #播放击中音乐bullets.remove(self)i.reset()   #重置敌人位置score+=1breakbullets = [] #子弹类收集列表
#显示子弹方法
def showBullets():for b in bullets:win.blit(b.img,(b.x,b.y))b.hit() #尝试是否击中b.y -=b.step#如果出界就移除if b.y <0:bullets.remove(b)#设置飞机左右临界值和移动增减量
def flyM():global flyx     #设置左右宽度移动为全局变量flyx+=flyStep#设置右边界if flyx > 736:  #飞机大小占64flyx=736#设置左边界if flyx < 0:flyx = 0#执行主程序
while True:win.blit(bg,(0,0))  #引入背景图,并设置坐标(打开的界面右上角是0,0坐标),# 必须放到其他图片前边,要不然背景图会被覆盖show_score() #放入分数方法for i in pygame.event.get():  # 返回事件,如:点击鼠标,关闭游戏页面等if i.type == pygame.QUIT:  # if 事件类型==pygame.QUIT游戏退出break# pygame.KEYDOWN  通过键盘事件控制if i.type == pygame.KEYDOWN:  # 按键盘就移动if i.key == pygame.K_RIGHT:  # RIGHT向右的方向键flyStep = 3elif i.key == pygame.K_LEFT:  # LEFT 向右方向键flyStep = -3elif i.key == pygame.K_SPACE:   #空格print ('子弹发射')#子弹类列表实例化b = bullets.append(Bullet())if i.type == pygame.KEYUP:  # 不按就不动flyStep = 0#引入飞机图,设置飞机初始宽高win.blit(fly,(flyx,flyy))flyM()enemyM()showBullets()gameOver()pygame.display.update() #界面更新,必须放到最后

总结

坐标系总结
0,0)原点
|——————————————————————————————————————————————————800
|
|
|	
|
|
|
|
|				
|——————————————————————————————————————————————————(800,600600
难点问题
遗留问题咨询的打飞机游戏问题:
1.为什么要使用斜边判断飞机与怪物的距离欧式距离判断
2.png大小使用什么工具查看ps工具

http://www.ppmy.cn/news/246795.html

相关文章

Python-飞机大战(二)

本文主要介绍飞机大战的思路&#xff0c;代码会在文章末尾给出。 分为两个文件&#xff1a;plane_main和plane_spirite。 此游戏不是很难。在设计父类时&#xff0c;我将父类定义为一个抽象类&#xff0c;抽象方法是update(self)。 图片是在B站上黑马教程下面的链接中找到的。 …

【Python 飞机大战】

#背景&#xff0c;音乐等位置用a&#xff0c;b&#xff0c;c&#xff0c;d 表示&#xff0c;直接修改abcd对应的文件位置即可使用 # 与敌机相撞后会扣分&#xff0c;但未编写复活&#xff0c;或无敌&#xff0c;在扣分判定范围内持续扣分 #路径为绝对路径可自行更改为相对路径 …

飞机大战(Java)

飞机大战 游戏规则:游戏可以产生小的敌机、大的敌机、小蜜蜂,这三类都是随机概率出现的,游戏打开的时候,鼠标单击,游戏开始, 自动发射子弹,英雄机跟随鼠标移动,当鼠标移到窗口外时,游戏暂停,当鼠标又移回时,游戏继续,子弹打中敌机和小蜜 蜂,当生命降到0时,消失,敌机 撞击到英雄…

Python飞机大战(完整版)

简介&#xff1a;一共分为2个py文件&#xff0c;分别是主类、和精灵类 飞机大战图片地址&#xff1a;链接: https://pan.baidu.com/s/18T6n9JFIDxBqYX9CnHi7ZQ 密码: tqbr 注释&#xff1a;项目启动后如果报libpng warning: iCCP: known incorrect sRGB profile无须处理&#…

Python升级版飞机大战

Python升级版飞机大战&#xff0c;程序运行截图&#xff1a; 敌方共有大中小3款飞机&#xff0c;分为高中低三种速度; 子弹的射程并非全屏,而大概是屏幕长度的80%;消灭小飞机需要1发子弹,中飞机需要8发,大飞机需要20发子弹;每消灭一架小飞机得1000分,中飞机6000分,大飞机10000…

飞机大战一触即发

1&#xff1a;飞机的移动&#xff0c;发射子弹&#xff0c;手雷&#xff0c;生命值&#xff0c;生命条\n\n2&#xff1a;敌飞机有3种形态&#xff08;小&#xff0c;中&#xff0c;大&#xff09;不同的飞机大小不一样&#xff0c;生命值不一样&#xff0c;爆炸动画也不一样\n\…

飞机小游戏流畅版

提示&#xff1a;新人入坑&#xff0c;采用的新手模板草草写就&#xff0c;望谅解 文章目录 前言一、代码原理和功能二、成果展示1.源代码 总结 前言 在做课下的游戏设计作业时&#xff0c;因为一时乐趣加入了一些功能&#xff0c;最后的完成代码可玩性不错&#xff0c;于是决…

疯狂的世界

最近看《中国二十年重案追踪-造假案》&#xff0c;其讲的都是近年来大的造假案件。有造假币&#xff0c;有造假药&#xff0c;有造假车票&#xff0c;甚至还有造假老虎的。其中既有目不识丁的农民&#xff0c;也有优秀有文化的人。所有造假案的共同点都是利令智昏。 由斯皮尔伯…