python实现飞机大战(面向过程)
作者:QLUGCL 发布时间:2022-04-18 10:44:17
标签:python,飞机大战
本文实例为大家分享了python实现飞机大战的具体代码,供大家参考,具体内容如下
游戏的实现本质是多个图片的快速切换,类似动画一样,达到动态的效果。
比如 * 的发射,实际上是一个 * 的照片根据列表中存储的位置多次粘贴到界面上。
还有飞机的移动是首先收集到移动信息将坐标变化,然后下一次覆盖页面的时候进行粘贴。
import pygame
import time
from pygame.locals import *
hero_x = 150
hero_y = 600
# * 夹
mybullet = []
# 导弹夹
bomb_list = []
enemy_x = 0
enemy_y = 0
flag = 0
enemy_life = "live"
hero_life = "live"
# 飞机 *
a = pygame.image.load("./feiji/enemy1_down1.png")
b = pygame.image.load("./feiji/enemy1_down2.png")
c = pygame.image.load("./feiji/enemy1_down3.png")
d = pygame.image.load("./feiji/enemy1_down4.png")
e = pygame.image.load("./feiji/enemy1_hit.png")
a1 = pygame.image.load("./feiji/hero_blowup_n1.png")
b1 = pygame.image.load("./feiji/hero_blowup_n2.png")
c1 = pygame.image.load("./feiji/hero_blowup_n3.png")
d1 = pygame.image.load("./feiji/hero_blowup_n4.png")
hero_explode = [a1, b1, c1, d1]
explode = [a, b, c, d, e]
num = 0
hnum = 0
count = 0
def enemy_plant(screen, enemy, bomb):
global enemy_x
global enemy_y
global flag
global num
global count
global bomb_list
global enemy_life
if enemy_life == "live":
if flag == 1 and enemy_x >= 0:
enemy_x -= 20
else:
flag = 0
if flag == 0 and enemy_x <= 320:
enemy_x += 20
else:
flag = 1
screen.blit(enemy, (enemy_x, enemy_y))
elif enemy_life == "death":
screen.blit(explode[num], (enemy_x, enemy_y))
bomb_list.clear()
num += 1
if num == 4:
enemy_life = "live"
num = 0
if count % 10 == 0:
bomb_list.append({"x": enemy_x + 30, "y": enemy_y + 20})
count += 1
for b in bomb_list:
screen.blit(bomb, (b["x"], b["y"]))
b["y"] += 10
def hero_plant(screen, hero, bullet):
global hero_x
global hero_y
global enemy_life
global hero_explode
global enemy_x
global enemy_y
global hnum
global bomb_list
global hero_life
for b in bomb_list:
# 注意区间的取值
if b["x"] <= hero_x + 30 and b["x"] >= hero_x and b["y"] >= hero_y and b["y"] <= hero_y + 30:
hero_life = "death"
break
if hero_life == "death":
mybullet.clear()
screen.blit(hero_explode[hnum], (hero_x, hero_y))
hnum += 1
if hnum == 4:
hnum = 0
hero_life = "live"
if hero_life == "live":
screen.blit(hero, (hero_x, hero_y))
# 事件捕获,将捕获的事件放在列表中
# 快速运行然后接受命令造成连续性的画面,有的时候可能为空。
for event in pygame.event.get():
# 关闭游戏
if event.type == pygame.QUIT:
# 退出游戏
exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
hero_x += 10
elif event.key == pygame.K_LEFT:
hero_x -= 10
elif event.key == pygame.K_DOWN:
hero_y += 10
elif event.key == pygame.K_UP:
hero_y -= 10
elif event.key == pygame.K_SPACE:
print("发射 * ")
mybullet.append({"x": hero_x + 30, "y": hero_y - 20})
for i in mybullet:
# 注意出界的 * 所以要大于0
if i["x"] <= enemy_x + 20 and i["x"] >= enemy_x and i["y"] <= 20 and i["y"] >= 0:
enemy_life = "death"
screen.blit(bullet, (i["x"], i["y"]))
# * 模式
# screen.blit(bullet, (i["x"]-20, i["y"]))
# screen.blit(bullet, (i["x"]+20, i["y"]))
# 这样就可以自动控制上升和时间间隔了
i["y"] -= 10
def main():
'''流程控制'''
# 1 创建一个游戏窗口
# display方法:展示相关的都会用到这个方法
# 参数1:元组(长,高)像素
# 参数2:有无特殊功能
# 参数3:像素深度
screen = pygame.display.set_mode((400, 800), 0, 32)
# 加载背景图片
background = pygame.image.load("./feiji/background.png")
# 加载飞机图片
hero = pygame.image.load("./feiji/hero1.png")
# 加载 * 照片
bullet = pygame.image.load("./feiji/plane.png")
# 加载导弹
bomb = pygame.image.load("./feiji/bomb-1.gif")
# 加载敌人飞机照片
enemy = pygame.image.load("./feiji/enemy1.png")
# 图片添加到屏幕
# blit剪切,粘贴
# screen 类似指针的使用带动目的地址的数据改动
while True:
screen.blit(background, (0, 0))
# 显示英雄飞机
hero_plant(screen, hero, bullet)
# 显示敌人飞机
enemy_plant(screen, enemy, bomb)
# 数据更新加载出来
pygame.display.update()
# 图片多显示一会
time.sleep(0.1)
main()
来源:https://blog.csdn.net/qq_43813373/article/details/107104241
0
投稿
猜你喜欢
- 本项目是利用五年左右的世界地震数据,通过python的pandas库、matplotlib库、basemap库等进行数据可视化,绘制出地震散
- load与loads简介:在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是s
- 引用Nmap库实现扫描功能,本节课比较简单一看就会。编写环境:Python2.x编写:首先安装Nmap程序,并添加环境变量pip insta
- 本文实例讲述了Python Web框架之Django框架cookie和session用法。分享给大家供大家参考,具体如下:part 1 概念
- 今天我们实现疲劳检测。 如果眼睛已经闭上了一段时间,我们会认为他们开始打瞌睡并发出警报来唤醒他们并引起他们的注意。我们测试一段视频来展示效果
- pip install psycopg2出现错误:Looking in indexes: https://pypi.tuna.tsinghu
- 二分查找法(Binary Search)是一种在有序数组中查找某一特定元素的算法,它的思想是将数组从中间分成两部分,判断目标元素在哪一部分中
- 在单个HTML元素上利用CSS2.1实现拥有3张背景图片和2张内容图效果,或者多重边框的效果。这种渐进增强的方式适用于所有支持CSS2.1伪
- CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的×××方式。我的理解是,比如你访问过招商银行的
- javascript sort()排序用法sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串UniCode码。
- 一、实现过程终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关转义序列是以ESC开头,即用\033来完成(ESC
- 前言利用SVD是可以对图像进行压缩的,其核心原因在于,图像的像素之间具有高度的相关性。代码# -*- coding: utf-8 -*-
- 对于web开来说,用户登陆、注册、文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想
- 在实际处理数据时,因系统内存有限,我们不可能一次把所有数据都导出进行操作,所以需要批量导出依次操作。为了加快运行,我们会采用多线程的方法进行
- 问题描述:用 Python 实现函数 count_words(),该函数输入字符串 s 和数字 n,返回 s 中 n 个出现频率
- print函数是Python的入门,每一个学习python的人都绕不开这个函数,下面介绍一下这个函数的用法。打开电脑,选择python软件,
- 前言正常图片转化成素描图片无非对图片像素的处理,矩阵变化而已。目前很多拍照修图App都有这一功能,核心代码不超30行。如下利用 Python
- 阅读上一篇:浏览器中的内存泄露 4.内存泄露的解决方案显式类型转换 首先说说最容易处理的情况 对于类型转换造成的错误,我们可以通过显式类型转
- 使用python将图片改为灰度图或黑白图有三种方式,分别是是使用cv2库和PIL库来实现,详细过程如下所示。1. 使用cv2库将图片改为灰度
- 任意给出一个数,求该数以内的所有质数.(使用筛选法做的)先看看什么叫做质数?质数的定义:一个大于1的自然数,除了1与它自身外,再没有其它的正