python开发飞机大战游戏
作者:赵敬喜 发布时间:2022-10-08 05:15:37
标签:python,飞机大战
本文实例为大家分享了python开发飞机大战游戏的具体代码,供大家参考,具体内容如下
import pygame
import random
import math # 数学模块
# 初始化界面
pygame.init()
# 设置窗口大小
windows = pygame.display.set_mode((800, 600))
# 设置窗口标题
pygame.display.set_caption("小赵同学")
# 引入图片 logo
icon = pygame.image.load('logo.jpg')
pygame.display.set_icon(icon)
# 4.游戏获取背景
bgcolor = pygame.image.load('bj.png')
# 5.设置玩家飞机
playerimg = pygame.image.load('fj.png')
X = 350 # 设置玩家X轴
Y = 480 # 设置玩家Y轴
# 停止移动就可以将palyerStep改为0。控制一个变量来指定飞机指定移动
playerStep = 0
# 添加背景音乐
pygame.mixer.music.load('bj.mp3')
pygame.mixer.music.play(-1)
# 添加射中的音效
# bao_music = pygame.mixer.Sound('bj.mp3')
# 分数
score = 0
# 添加字体和大小
font = pygame.font.Font('freesansbold.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))
# 游戏结束的变量
over = False
over_font = pygame.font.Font('freesansbold.ttf', 64)
# 结束的提示语
def check_over():
if over:
text = "Game Over"
render = font.render(text, True, (255, 0, 0))
windows.blit(render, (320, 200))
# 8.添加敌人.
# 11.添加多个敌人
number_enemy = 6
# 敌人类
class Enemy:
def __init__(self):
#
self.img = pygame.image.load('enemy.png')
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)
def distance(bx, by, ex, ey):
a = bx - ex
b = by - ey
return math.sqrt(a * a + b * b) # 开根号
# 保存所有的敌人
enemis = []
for i in range(number_enemy): # 每次循环都都在class Enemy中过一边,所以随机产生一个敌人的参数并且保存到列表中
enemis.append(Enemy())
# 显示敌人并且实现敌人的移动下沉
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 > 436:
over = True
print("游戏结束啦")
enemis.clear()
# 设置飞机及飞机移动范围的函数 == 飞机类型
def fiji_type(): # 设置飞机的坐标和飞机X Y轴最大的移动位置
global X, Y
# 5. 设置飞机
windows.blit(playerimg, (X, Y))
# 6.飞机移动
X += plagerStep
# 预防飞机出界
if X > 680:
X = 680
if X < 0:
X = 0
# * 的类
class Bullet:
def __init__(self):
self.img = pygame.image.load('bullet.png')
self.x = X + 55 # 设置 * 的X轴
self.y = Y + 5 # * 出现在玩家的上方
self.step = 2 # * 移动的速度
# 击中敌人
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 30:
# 射中了
bullets.remove(self)
e.reset() # 重置敌人
# 没击中加10分
score += 10
bullets = [] # 保存现有的 *
# 显示 * 移动
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)
# 3.游戏主循环
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_LEFT:
plagerStep = -3
# 判断按下空格健的反应
elif event.key == pygame.K_SPACE:
# 创建一个 *
b = Bullet()
bullets.append(b)
# 判断松来按键停止,
if event.type == pygame.KEYUP:
plagerStep = 0
# 调用飞机的类型的函数
fiji_type()
# 调用敌人这个函数
enemy()
show_bullets() # 显示 *
# 游戏结束语
check_over()
# 刷新更新数据
pygame.display.update()
# global 设置全局变量
''' 游戏结构
1.设置窗口大小
2.背景图
3.显示飞机
4.移动飞机
5.控制出界
6.获取键盘事件
7.显示敌人
8.敌人移动
9.下沉和随机位置
10.显示多个敌人
11.响应空格键
12.添加 *
13.发射 *
14.射中检测之距离
15.射中检测
16.添加音效
17.添加并显示分数
18.游戏结束
19.结束提示
'''
来源:https://blog.csdn.net/weixin_49150931/article/details/112579924


猜你喜欢
- 1.获取所有数据库名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.获取所有
- python如何为创建大量实例节省内存,具体内容如下案例:某网络游戏中,定义了玩家类Player(id, name, status,....
- 概述 一、 初识setup函数 组件中所用到的:数据、方法等等均要配置在setup中,这也就意味着在Vue2中写的dat
- 介绍An open source load testing tool.一个开源性能测试工具。define user behaviour wi
- 特点这是分类算法贝叶斯算法的较为简单的一种,整个贝叶斯分类算法的核心就是在求解贝叶斯方程P(y|x)=[P(x|y)P(y)]/P(x)而朴
- 利用PHP中的thinkphp5进行项目开发,将view一道项目跟目录下进入到/www/wwwroot/xxxx/application/c
- 1、使用字符串函数replace>>> a = 'hello world'>>> a.r
- 项目需要就在现有的服务器上面重新安装了个mysql服务器,还挺费劲儿呢,因为之前都是在我的笔记本上面试验的,它的系统是Ubuntu的,什么路
- 在没学习开窗函数之前,我们都知道,用了分组之后,查询字段就只能是分组字段和聚合的字段,这带来了极大的不方便,有时我们查询时需要分
- 我们在填写表单的时候,特别是输入密码的时候,经常看到实时显示密码强度的效果,那么这种效果如何通过我们的原生js实现呢?思路:1.密码通常是由
- 1. 检查mysql服务是否启动,如果启动,关闭mysql服务运行命令:ps -ef | grep -i mysql如果开着就运行关闭的命令
- 相信大家都用过浏览器的翻译网页功能,例如对于下图这个英文网页:一键翻译成中文以后是这样的:你可能会觉得这个功能很简单,不就是字符串替换吗?那
- 本文实例为大家分享了Python飞机大战项目,供大家参考,具体内容如下import gcimport randomimport pygame
- 这篇文章主要介绍了python中的Elasticsearch操作汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习
- 接下来,直接给出大家响应的代码,并对每一行进行标注,希望能够帮到大家。需要用到的是库是。numpy 、sklearn。#导入相应的库(对数据
- 所以对应的asp处理代码如下代码如下:dedearr=split(xiangguanid2,chr(13)) '分割成数组
- hasattr()函数hasattr()函数用于判断是否包含对应的属性语法:hasattr(object,name)参数:object--对
- var gb1 = 10; this.gb2 = 20; function gb3() {}; (function() { var ro =
- 这篇文章主要介绍了Python tkinter常用操作代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 如下所示:from keras import backend as Kfrom keras.models import load_model