pygame实现跳跃发射子弹打怪效果

import pygame
import sys,time,random
from pygame.locals import *
pygame.init()
# 设置按下鼠标的时候一直触发
pygame.key.set_repeat(10, 10)
# 加载背景图片
bg = pygame.image.load('./img/bg.png')
# 加载左方向行走和站立图片
heroLStand = pygame.image.load('img/heroLstand.png')
heroL1 = pygame.image.load('img/heroL1.png')
heroL2 = pygame.image.load('img/heroL2.png')
heroL3 = pygame.image.load('img/heroL3.png')
# 加载右方向行走和站立图片
heroRStand = pygame.image.load('img/heroRstand.png')
heroR1 = pygame.image.load('img/heroR1.png')
heroR2 = pygame.image.load('img/heroR2.png')
heroR3 = pygame.image.load('img/heroR3.png')
# 加载障碍物
zaw1 = pygame.image.load('img/zaw1.png')
zaw2 = pygame.image.load('img/zaw2.png')
zaw3 = pygame.image.load('img/zaw3.png')
# 加载武器图片
wq = pygame.image.load('img/b.png')
effer = pygame.image.load('img/effer.png')
clock = pygame.time.Clock()
# 创建一个画布
canvas = pygame.display.set_mode((1200,600))
# 初始数据# 设置跳跃高度
jumpHeight = 40
# 设置移动速度
moveSpeed = 10
#------------------创建武器类----------------
class Wq():#武器的属性有:皮肤,坐标以及宽高,以及方向def __init__(self,skin,x,y,width,height,direction):self.skin = skinself.x = xself.y = yself.width = widthself.height = heightself.direction = direction# 武器的移动def shoot(self):#如果方向是往右则x值增加if self.direction == "right":for i in range(10):self.x = self.x+2else:# 否则就是往左移动for i in range(10):self.x = self.x-2#------------------创建英雄类----------------
# 英雄类:属性, 皮肤skin,坐标,x,y 宽高width,height
n = 0# 实现动态切换不同的图片
class Hero():def __init__(self,skin,x,y,width,height,direction="right"):self.skin = skinself.x = xself.y = yself.width = widthself.height = heightself.direction = direction# 往左移动的方法def goLeft(self):self.x = self.x-moveSpeed# 往右移动的方法def goRight(self):self.x = self.x+moveSpeed# 往左移动的时候,图片的切换(英雄人物的切换)def leftChange(self):global nif n%3 == 0:# 如果对3取余结果等于0,使用第一张图片self.skin = heroL1elif n%3 == 1:self.skin = heroL2else:self.skin = heroL3n = n+1# 往右移动的时候,图片的切换(英雄人物的切换)def rightChange(self):global nif n%3 == 0:# 如果对3取余结果等于0,使用第一张图片self.skin = heroR1elif n%3 == 1:self.skin = heroR2else:self.skin = heroR3n = n+1 #-----------------创建英雄对象-------------
# heroRStand,10,400,135,200
hero = Hero(heroRStand,10,400,135,200)#----------------创建障碍物类---------------------
# 障碍物的属性:x,y,skin,width,height
# 障碍物的方法: 往左移动的方法
class Zaw():# 障碍物类def __init__(self,x,y,skin,width,height):self.x = xself.y = yself.skin = skinself.width = widthself.height = heightdef walk(self):# 设置往左移动的方法self.x = self.x - 3
# 创建列表存储同时存储多个障碍物对象
zawList = []
createTime = 0# 用来存储创建障碍物对象的时间
# 创建一个方法:批量的生成障碍物对象
def createZaw():# 因为每次创建障碍物对象的时候,都需要看间隔时间,时间符合要求则创建# 更新时间global createTime# 检测时间间隔if time.time()-createTime > 3:# 更新一下创建障碍物的时间createTime = time.time()type = random.randint(1,3)if type == 1:#  如果type的值是1就要创建第一种障碍物zawenemy = Zaw(1200,500,zaw1,46,46)elif type == 2:#  如果type的值是2就要创建第2种障碍物zawenemy = Zaw(1200,500,zaw2,142,103)else:# 创建第3种障碍物zawenemy = Zaw(1200,450,zaw3,180,180)# 将障碍物追加列表zawList.append(zawenemy)#--------------批量创建障碍物对象---------------------
#-----------------创建传送到画布方法-----------
# 让背景往右移动
bginit1 = -1200
bginit2 = 0
def draw():global bginit1,bginit2canvas.blit(bg,(bginit1,0))canvas.blit(bg,(bginit2,0))bginit1 = bginit1+1# 因为整体往右移动故2张背景图片x的值全部都在增加bginit2 = bginit2+1if bginit1>1200:bginit1 = -1200if bginit2>1200:bginit2 = -1200canvas.blit(hero.skin,(hero.x,hero.y))# 将障碍物列表中的所有障碍物传送到画布上for e in zawList:if e.x < -200:# 说明往左移动的到最左边出画布zawList.remove(e)# 从障碍物列表中移出该障碍物else:canvas.blit(e.skin,(e.x,e.y))e.walk()# 将武器绘制到画布上for w in wqList:  if w.x<-200 or w.x>1200:wqList.remove(w)else:canvas.blit(w.skin,(w.x,w.y))w.shoot()    def hit():# 武器和障碍物碰撞for w in wqList:  for e in zawList:     if w.x+w.width >= e.x and w.x<=e.x+e.width\and w.y+150>=e.y:for i in range(4):canvas.blit(effer,(e.x,e.y))wqList.remove(w)zawList.remove(e)# 事件监听方法
isJump = False# 默认False没有跳跃
wqList = []# 武器库
# 设置发射时间间隔
shootTime = 0
def eventDeal():global isJumpif hero.direction == "right":hero.skin = heroRStand# 默认向右站立elif hero.direction == "left":hero.skin = heroLStand    # 遍历所有的事件for e in pygame.event.get():# 点击关闭按钮的时候,关闭窗口处理if e.type == QUIT:pygame.quit()# pygame退出相当于窗口关闭sys.exit()# 系统退出   #---------------上下左右键监听处理-------------------if e.type == KEYDOWN:# 当检测按下按键的时候# 判断按的左键if e.key == K_LEFT:print('您刚才按下了左键')hero.goLeft()# 往左移动hero.leftChange()# 调用往左移动切换图片的效果hero.direction = "left"elif e.key == K_RIGHT:print('您刚才按下了右键')hero.direction = "right"hero.goRight()hero.rightChange()  elif e.key == K_SPACE:# 检测到空格print('您刚才按下课空格键')isJump = True# 当点击空格的时候跳跃状态切换成Trueelif e.key == K_UP:global shootTimeif time.time()-shootTime > 1:shootTime = time.time()# 通过武器类创建武器库w = Wq(wq,hero.x,hero.y+hero.height/8,20,\56,hero.direction)# 将武器追加到武器库wqList.append(w)while True:clock.tick(15)if isJump:hero.y = hero.y-jumpHeightjumpHeight = jumpHeight-2if hero.y == 400:isJump = FalsejumpHeight = 40createZaw()# 程序帮我们创建障碍物       draw()hit()eventDeal()pygame.display.update()

整个代码下载位置:https://download.csdn.net/download/Gjanuary/88384893

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/90700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传统遗产与技术相遇,古彝文的数字化与保护

古彝文是中国彝族的传统文字&#xff0c;具有悠久的历史和文化价值。然而&#xff0c;由于古彝文的形状复杂且没有标准化的字符集&#xff0c;对其进行文字识别一直是一项具有挑战性的任务。本文介绍了古彝文合合信息的文字识别技术&#xff0c;旨在提高古彝文的自动识别准确性…

十七,IBL-打印各个Mipmap级别的hdr环境贴图

预滤波环境贴图类似于辐照度图&#xff0c;是预先计算的环境卷积贴图&#xff0c;但这次考虑了粗糙度。因为随着粗糙度的增加&#xff0c;参与环境贴图卷积的采样向量会更分散&#xff0c;导致反射更模糊&#xff0c;所以对于卷积的每个粗糙度级别&#xff0c;我们将按顺序把模…

【单片机】11-步进电机和直流电机

1.直流电机 1.什么是电机 电能转换为动能 2.常见电机 &#xff08;1&#xff09;交流电机【大功率】&#xff1a;两相【200W左右】&#xff0c;三相【1000W左右】 &#xff08;2&#xff09;直流电机【小功率】&#xff1a;永磁【真正的磁铁】&#xff0c;励磁【电磁铁】 &…

3种Renko图表形态FPmarkets3秒轻松判断价格走势

Renko图表形态在交易中的应用并不逊色于其他技术分析方法。相较于普通的烛台图表&#xff0c;使用Renko图表时&#xff0c;有些经典模式更容易被发现和识别&#xff0c;FPmarkets总结这些模式包括&#xff1a; 首先是头和肩膀形态。这是一种价格反转形态&#xff0c;由两个较小…

华为智能企业远程办公安全解决方案(1)

华为智能企业远程办公安全解决方案&#xff08;1&#xff09; 课程地址方案背景需求分析企业远程办公业务概述企业远程办公安全风险分析企业远程办公环境搭建需求分析 方案设计组网架构设备选型方案亮点 课程地址 本方案相关课程资源已在华为O3社区发布&#xff0c;可按照以下…

Java编码技巧:验证码

目录 1.1、EasyCaptcha&#xff08;优选&#xff0c;支持种类多&#xff0c;样式多&#xff0c;使用简单&#xff09;1.1.1、作用1.1.2、官方信息1.1.3、使用案例1.1.4、依赖1.1.5、代码1.1.6、效果1.1.7、拓展 1.2、kaptcha1.2.1、作用1.2.2、官方信息1.2.3、使用案例1.2.4、依…

SLAM从入门到精通(amcl定位使用)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 学习slam&#xff0c;一般就是所谓的边定位、边制图的知识。然而在实际生产过程中&#xff0c;比如扫地机器人、agv、巡检机器人、农业机器人&…

聊一聊JDK21-虚拟线程

目录 前言 Virtual Threads的开始 为什么需要Virtual Threads JDK19 预览版初次出现 JDK21 Virtual Threads的正式发布 Virtual Threads 该怎么使用 简单聊聊Virtual Threads的实现 使用时候的注意事项 本地尝鲜一下JDK21及Virtual Threads 结语 前言 2023年9月19日…

字符串改错题(找出代码中所有错误,将一个字符串倒序)

#include "string.h" main() {char *pSrc "hello,world";char *pDest NULL; int iLen strlen(pSrc);pDest (char*)malloc(iLen);char *pD pDest;char* pS pSrc[iLen]; while(iLen--!0){pD pS--;}printf("%s", pDest);return 0; }在使用 m…

C理解(五):编译,链接库,宏,关键字,变量

编译 编译过程 文件.c->(预处理)->文件.i->(编译)->文件.S->(汇编)->文件.o->(链接)->elf程序 预处理 内容:加载头文件(#include),清除注释(//,./*),替换条件编译(#if #elif #endif #ifdef),替换宏定义(#define) …

探索社会工程的深度:从定义到高级攻击策略

在广阔的网络安全领域&#xff0c;社会工程作为一种微妙的威胁而出现&#xff0c;它利用人类的漏洞来访问敏感信息或实施欺诈。网络安全背景下的社会工程的定义很明确&#xff1a;它包括使用欺骗手段操纵个人泄露机密或个人信息&#xff0c;然后将这些信息用于欺诈目的。 此类…

【AI视野·今日CV 计算机视觉论文速览 第257期】Fri, 29 Sep 2023

AI视野今日CS.CV 计算机视觉论文速览 Fri, 29 Sep 2023 Totally 99 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers Learning to Transform for Generalizable Instance-wise Invariance Authors Utkarsh Singhal, Carlos Esteves, Ameesh M…

WebGL笔记:绘制多个点,三角形,以及画各种不同的线条

绘制多点 1 &#xff09; WebGL 缓冲区 我们在用js定点位的时候&#xff0c;肯定是要建立一份顶点数据的&#xff0c;这份顶点数据是给着色器的&#xff0c;因为着色器需要这份顶点数据绘图然而&#xff0c;我们在js中建立顶点数据&#xff0c;着色器肯定是拿不到的&#xff…

《Python趣味工具》——ppt的操作(刷题版)

前面我们对PPT进行了一定的操作&#xff0c;并将其中的文字提取到了word文档中。现在就让我们来刷几道题巩固巩固吧&#xff01; 文章目录 1. 查看PPT&#xff08;上&#xff09;2. 查看PPT&#xff08;中&#xff09;3. 查看PPT&#xff08;下&#xff09;4. PPT的页码5. 大学…

安防监控/视频汇聚平台EasyCVR云端录像不展示是什么原因?该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

Excel技巧之【锁定工作簿】

Excel工作簿是Excel工作区中一个或多个工作表的集合&#xff0c;我们知道Excel可以设置锁定工作表&#xff0c;防止意外或被他人修改&#xff0c;但可能有小伙伴不知道&#xff0c;Excel工作簿也同样可以设置锁定&#xff0c;防止更改。 那工作簿锁定后会怎么样呢&#xff1f;…

【数据结构】顺序查找,折半查找,分块查找的知识点总结及相应的代码实现

目录 1、顺序查找 定义及步骤 代码实现 2、折半查找 定义及步骤 代码实现 折半查找判定树 3、分块查找 定义及步骤 1、顺序查找 定义及步骤 顺序查找的定义&#xff1a;从数据集合的起始位置开始&#xff0c;逐一比较每个数据元素&#xff0c;直到找到所要查找…

uni-app 实现凸起的 tabbar 底部导航栏

效果图 在 pages.json 中设置隐藏自带的 tabbar 导航栏 "custom": true, // 开启自定义tabBar(不填每次原来的tabbar在重新加载时都回闪现) 新建一个 custom-tabbar.vue 自定义组件页面 custom-tabbar.vue <!-- 自定义底部导航栏 --> <template><v…

react.js在visual code 下的hello World

想学习reacr.js &#xff0c;就开始做一个hello world。 我的环境是visual code &#xff0c;所以我找这个环境下的例子。参照&#xff1a; https://code.visualstudio.com/docs/nodejs/reactjs-tutorial 要学习react.js &#xff0c;还得先安装node.js&#xff0c;我在visual …

github代码提交过程详细介绍

1、下载github上面的代码 &#xff08;1&#xff09;在github网站上&#xff0c;找到想要下载的代码仓库界面&#xff0c;点击Code选项就可以看到仓库的git下载地址&#xff1b; &#xff08;2&#xff09;使用命令下载&#xff1a;git clone 地址&#xff1b; 2、配置本地git…