当前位置: 首页 > news >正文

温州建设小学网站首页生鲜网站建设背景

温州建设小学网站首页,生鲜网站建设背景,聊城做网站的公司平台,如何查询网站打开速度变慢学习 Python 之 Pygame 开发魂斗罗#xff08;二#xff09;魂斗罗的需求开始编写魂斗罗1. 搭建主类框架2. 设置游戏运行遍历和创建窗口3. 获取窗口中的事件4. 创建角色5. 完成角色更新函数魂斗罗的需求 魂斗罗游戏中包含很多个物体#xff0c;现在要对这些物体进行总结 类… 学习 Python 之 Pygame 开发魂斗罗二魂斗罗的需求开始编写魂斗罗1. 搭建主类框架2. 设置游戏运行遍历和创建窗口3. 获取窗口中的事件4. 创建角色5. 完成角色更新函数魂斗罗的需求 魂斗罗游戏中包含很多个物体现在要对这些物体进行总结 类名包含的操作包含的属性玩家1类跳跃、行走、落下、更新生命速度伤害方向类型玩家2类跳跃、行走、落下、更新生命速度伤害方向类型敌人类跳跃、行走、落下、更新生命速度伤害方向类型子弹类移动显示方向伤害发射源速度桥类、陷阱类、奖励类、BOSS类……音效类播放停止设置音乐-爆炸效果类显示是否可以摧毁主类…… 物体总结完毕后规划一下窗口的大小下面是我设置的窗口大小 由于地图素材的大小限制下面这个窗口的大小刚刚合适 开始编写魂斗罗 那么我们开始来编写魂斗罗吧 1. 搭建主类框架 同样地先写主类主类是整个游戏运作的类我们也可以不用这样的方式可以使用函数代替 import pygameclass MainGame:window Nonedef __init__(self):passdef run(self):passif __name__ __main__:pass2. 设置游戏运行遍历和创建窗口 魂斗罗游戏不像坦克大战坦克大战中坦克移动是把图片放到不同的位置而魂斗罗中人物移动有移动的动画跳跃也有跳跃的动画我们需要设置帧率通过控制帧率来实现动画效果 首先创建一个常量Constants.py文件用于存放游戏中使用的常量 from enum import Enum# 玩家的四种状态 class State(Enum):STAND 1WALK 2JUMP 3FALL 4# 玩家的方向 class Direction(Enum):RIGHT 1LEFT 2# 设置窗口大小 SCREEN_HEIGHT 600 SCREEN_WIDTH 800 GROUND_HEIGHT 63# 玩家x方向速度 PLAYER_X_SPEED 3设置遍历和创建窗口 def __init__(self):# 初始化展示模块pygame.display.init()SCREEN_SIZE (SCREEN_WIDTH, SCREEN_HEIGHT)# 初始化窗口MainGame.window pygame.display.set_mode(SCREEN_SIZE)# 设置窗口标题pygame.display.set_caption(魂斗罗角色)# 是否结束游戏self.isEnd False# 获取按键self.keys pygame.key.get_pressed()# 帧率self.fps 60self.clock pygame.time.Clock()修改一下run()函数 def run(self):while not self.isEnd:# 设置背景颜色pygame.display.get_surface().fill((0, 0, 0))# 更新窗口pygame.display.update()# 设置帧率self.clock.tick(self.fps)fps self.clock.get_fps()caption 魂斗罗 - {:.2f}.format(fps)pygame.display.set_caption(caption)else:sys.exit()完整主类代码 import sys import pygame from Constants import *class MainGame:window Nonedef __init__(self):# 初始化展示模块pygame.display.init()SCREEN_SIZE (SCREEN_WIDTH, SCREEN_HEIGHT)# 初始化窗口MainGame.window pygame.display.set_mode(SCREEN_SIZE)# 设置窗口标题pygame.display.set_caption(魂斗罗角色)# 是否结束游戏self.isEnd False# 获取按键self.keys pygame.key.get_pressed()# 帧率self.fps 60self.clock pygame.time.Clock()def run(self):while not self.isEnd:# 设置背景颜色pygame.display.get_surface().fill((0, 0, 0))# 更新窗口pygame.display.update()# 设置帧率self.clock.tick(self.fps)fps self.clock.get_fps()caption 魂斗罗 - {:.2f}.format(fps)pygame.display.set_caption(caption)else:sys.exit()if __name__ __main__:MainGame().run()运行一下看看窗口 3. 获取窗口中的事件 在魂斗罗中玩家移动是必不可少的操作因此键盘事件响应是必不可少的 def getPlayingModeEvent(self):# 获取事件列表for event in pygame.event.get():# 点击窗口关闭按钮if event.type pygame.QUIT:self.isEnd True# 键盘按键按下elif event.type pygame.KEYDOWN:self.keys pygame.key.get_pressed()# 键盘按键抬起elif event.type pygame.KEYUP:self.keys pygame.key.get_pressed()获取窗口中的事件用于玩家角色移动、发射子弹等操作 在这个游戏中我规定aswd操控玩家移动j攻击k跳跃 import sys import pygame from Constants import *class MainGame:window Nonedef __init__(self):# 初始化展示模块pygame.display.init()SCREEN_SIZE (SCREEN_WIDTH, SCREEN_HEIGHT)# 初始化窗口MainGame.window pygame.display.set_mode(SCREEN_SIZE)# 设置窗口标题pygame.display.set_caption(魂斗罗角色)# 是否结束游戏self.isEnd False# 获取按键self.keys pygame.key.get_pressed()# 帧率self.fps 60self.clock pygame.time.Clock()def run(self):while not self.isEnd:# 设置背景颜色pygame.display.get_surface().fill((0, 0, 0))# 获取窗口中的事件self.getPlayingModeEvent()# 更新窗口pygame.display.update()# 设置帧率self.clock.tick(self.fps)fps self.clock.get_fps()caption 魂斗罗 - {:.2f}.format(fps)pygame.display.set_caption(caption)else:sys.exit()def getPlayingModeEvent(self):# 获取事件列表for event in pygame.event.get():# 点击窗口关闭按钮if event.type pygame.QUIT:self.isEnd True# 键盘按键按下elif event.type pygame.KEYDOWN:self.keys pygame.key.get_pressed()# 键盘按键抬起elif event.type pygame.KEYUP:self.keys pygame.key.get_pressed()if __name__ __main__:MainGame().run()4. 创建角色 创建一个玩家类实现玩家的移动和射击玩家类需要继承 pygame.sprite.Sprite类用来实现物体的碰撞检测 import pygame from Constants import *class PlayerOne(pygame.sprite.Sprite):def __init__(self, currentTime):pygame.sprite.Sprite.__init__(self)passdef update(self, playerBulletList, keys, currentTime):pass创建玩家类后先把玩家图片加载进来这里需要写一个函数用来处理图片 在常量Constants.py文件中写一个函数用来加载图片 def loadImage(filename, hReverse False):image pygame.image.load(filename)if hReverse:image pygame.transform.flip(image, True, False)rect image.get_rect()image pygame.transform.scale(image,(int(rect.width * 2.5), int(rect.height * 2.5)))image image.convert_alpha()return image这个函数用来设置图片放缩和水平翻转 因为素材中大多数图片都是向右的如果要得到向左的必须要进行翻转为了方便我就没有处理素材直接使用了翻转 文件中翻转和缩放代码在学习 Python 之 Pygame 开发魂斗罗一中已经见过了 完整的常量文件 from enum import Enum import pygameclass State(Enum):STAND 1WALK 2JUMP 3FALL 4SQUAT 5class Direction(Enum):RIGHT 1LEFT 2def loadImage(filename, hReverse False):image pygame.image.load(filename)if hReverse:image pygame.transform.flip(image, True, False)rect image.get_rect()image pygame.transform.scale(image,(int(rect.width * 2.5), int(rect.height * 2.5)))image image.convert_alpha()return image# 设置窗口大小 SCREEN_HEIGHT 600 SCREEN_WIDTH 800 GROUND_HEIGHT 63# 玩家x方向速度 PLAYER_X_SPEED 3这里需要注意一点由于玩家移动时有动画效果所有我们载入的图片是连续的好几张 下面是图片的素材 链接https://pan.baidu.com/s/1X7tESkes_O6nbPxfpHD6hQ?pwdhdly 提取码hdly 有了素材开始读取图片吧修改玩家类的__init__()函数 def __init__(self, currentTime):pygame.sprite.Sprite.__init__(self)# 加载角色图片self.standRightImage loadImage(../Image/Player/Player1/Right/stand.png)self.standLeftImage loadImage(../Image/Player/Player1/Left/stand.png)self.upRightImage loadImage(../Image/Player/Player1/Up/upRight(small).png)self.upLeftImage loadImage(../Image/Player/Player1/Up/upLeft(small).png)self.downRightImage loadImage(../Image/Player/Player1/Down/down.png)self.downLeftImage loadImage(../Image/Player/Player1/Down/down.png, True)self.obliqueUpRightImages [loadImage(../Image/Player/Player1/Up/rightUp1.png),loadImage(../Image/Player/Player1/Up/rightUp2.png),loadImage(../Image/Player/Player1/Up/rightUp3.png),]self.obliqueUpLeftImages [loadImage(../Image/Player/Player1/Up/rightUp1.png, True),loadImage(../Image/Player/Player1/Up/rightUp2.png, True),loadImage(../Image/Player/Player1/Up/rightUp3.png, True),]self.obliqueDownRightImages [loadImage(../Image/Player/Player1/ObliqueDown/1.png),loadImage(../Image/Player/Player1/ObliqueDown/2.png),loadImage(../Image/Player/Player1/ObliqueDown/3.png),]self.obliqueDownLeftImages [loadImage(../Image/Player/Player1/ObliqueDown/1.png, True),loadImage(../Image/Player/Player1/ObliqueDown/2.png, True),loadImage(../Image/Player/Player1/ObliqueDown/3.png, True),]# 角色向右的全部图片self.rightImages [loadImage(../Image/Player/Player1/Right/run1.png),loadImage(../Image/Player/Player1/Right/run2.png),loadImage(../Image/Player/Player1/Right/run3.png)]# 角色向左的全部图片self.leftImages [loadImage(../Image/Player/Player1/Left/run1.png),loadImage(../Image/Player/Player1/Left/run2.png),loadImage(../Image/Player/Player1/Left/run3.png)]# 角色跳跃的全部图片self.upRightImages [loadImage(../Image/Player/Player1/Jump/jump1.png),loadImage(../Image/Player/Player1/Jump/jump2.png),loadImage(../Image/Player/Player1/Jump/jump3.png),loadImage(../Image/Player/Player1/Jump/jump4.png),]self.upLeftImages [loadImage(../Image/Player/Player1/Jump/jump1.png, True),loadImage(../Image/Player/Player1/Jump/jump2.png, True),loadImage(../Image/Player/Player1/Jump/jump3.png, True),loadImage(../Image/Player/Player1/Jump/jump4.png, True),]self.rightFireImages [loadImage(../Image/Player/Player1/Right/fire1.png),loadImage(../Image/Player/Player1/Right/fire2.png),loadImage(../Image/Player/Player1/Right/fire3.png),]self.leftFireImages [loadImage(../Image/Player/Player1/Right/fire1.png, True),loadImage(../Image/Player/Player1/Right/fire2.png, True),loadImage(../Image/Player/Player1/Right/fire3.png, True),]图片读取好后我们需要设置一些索引用来记录当前应该加载哪一张图片 举个简单的例子人物向右行走的图片有三张如下图 我们需要在人物跑动的时候循环加载这三张图片所以要设置一个索引用来记录当前加载到了哪一张如果是第三张那么把索引再变为0这样下次就又开始加载第一张图片了循环下去就可以看到人物跑动的动画了 好那我们就来设置索引 def __init__(self, currentTime):...# 角色左右移动下标self.imageIndex 0# 角色跳跃下标self.upImageIndex 0# 角色斜射下标self.obliqueImageIndex 0...有了下标还要考虑加载图片的间隔这个游戏中在前面我们已经设置了游戏的帧率为60就是一秒加载60张图片如果不设置时间间隔玩家移动的时候加载的图片是闪的因为太快了看不清楚所以要设置间隔 首先记录下上次加载的图片的时间然后在显示玩家图片时用当前的时间减去上次加载图片的时间如果相差一定的间隔那么就让索引1超过图片个数就把索引置为0 下面是设置上一次加载图片的时间变量 def __init__(self, currentTime):...# 上一次显示图片的时间self.runLastTimer currentTimeself.fireLastTimer currentTime...这里要区分一下因为玩家移动的时候也可以射击所以移动射击的图片和移动不射击的图片要分开索引防止混淆 之后设置一下玩家的其他属性 # 选择当前要显示的图片self.image self.standRightImage# 获取图片的rectself.rect self.image.get_rect()# 设置角色的状态self.state State.FALL# 角色的方向self.direction Direction.RIGHT# 速度self.xSpeed PLAYER_X_SPEEDself.ySpeed 0self.jumpSpeed -11# 人物当前的状态标志self.isStanding Falseself.isWalking Falseself.isJumping Trueself.isSquating Falseself.isFiring False# 重力加速度self.gravity 0.7# 玩家上下的朝向self.isUp Falseself.isDown False角色一开始是降落的状态是因为开始的时候角色从天而降 # 人物当前的状态标志 self.isStanding False self.isWalking False self.isJumping True self.isSquating False self.isFiring False# 玩家上下的朝向 self.isUp False self.isDown False这两组属性用来画出当前角色的图片 完整的角色类代码 import pygame from Constants import *class PlayerOne(pygame.sprite.Sprite):def __init__(self, currentTime):pygame.sprite.Sprite.__init__(self)# 加载角色图片self.standRightImage loadImage(../Image/Player/Player1/Right/stand.png)self.standLeftImage loadImage(../Image/Player/Player1/Left/stand.png)self.upRightImage loadImage(../Image/Player/Player1/Up/upRight(small).png)self.upLeftImage loadImage(../Image/Player/Player1/Up/upLeft(small).png)self.downRightImage loadImage(../Image/Player/Player1/Down/down.png)self.downLeftImage loadImage(../Image/Player/Player1/Down/down.png, True)self.obliqueUpRightImages [loadImage(../Image/Player/Player1/Up/rightUp1.png),loadImage(../Image/Player/Player1/Up/rightUp2.png),loadImage(../Image/Player/Player1/Up/rightUp3.png),]self.obliqueUpLeftImages [loadImage(../Image/Player/Player1/Up/rightUp1.png, True),loadImage(../Image/Player/Player1/Up/rightUp2.png, True),loadImage(../Image/Player/Player1/Up/rightUp3.png, True),]self.obliqueDownRightImages [loadImage(../Image/Player/Player1/ObliqueDown/1.png),loadImage(../Image/Player/Player1/ObliqueDown/2.png),loadImage(../Image/Player/Player1/ObliqueDown/3.png),]self.obliqueDownLeftImages [loadImage(../Image/Player/Player1/ObliqueDown/1.png, True),loadImage(../Image/Player/Player1/ObliqueDown/2.png, True),loadImage(../Image/Player/Player1/ObliqueDown/3.png, True),]# 角色向右的全部图片self.rightImages [loadImage(../Image/Player/Player1/Right/run1.png),loadImage(../Image/Player/Player1/Right/run2.png),loadImage(../Image/Player/Player1/Right/run3.png)]# 角色向左的全部图片self.leftImages [loadImage(../Image/Player/Player1/Left/run1.png),loadImage(../Image/Player/Player1/Left/run2.png),loadImage(../Image/Player/Player1/Left/run3.png)]# 角色跳跃的全部图片self.upRightImages [loadImage(../Image/Player/Player1/Jump/jump1.png),loadImage(../Image/Player/Player1/Jump/jump2.png),loadImage(../Image/Player/Player1/Jump/jump3.png),loadImage(../Image/Player/Player1/Jump/jump4.png),]self.upLeftImages [loadImage(../Image/Player/Player1/Jump/jump1.png, True),loadImage(../Image/Player/Player1/Jump/jump2.png, True),loadImage(../Image/Player/Player1/Jump/jump3.png, True),loadImage(../Image/Player/Player1/Jump/jump4.png, True),]self.rightFireImages [loadImage(../Image/Player/Player1/Right/fire1.png),loadImage(../Image/Player/Player1/Right/fire2.png),loadImage(../Image/Player/Player1/Right/fire3.png),]self.leftFireImages [loadImage(../Image/Player/Player1/Right/fire1.png, True),loadImage(../Image/Player/Player1/Right/fire2.png, True),loadImage(../Image/Player/Player1/Right/fire3.png, True),]# 角色左右移动下标self.imageIndex 0# 角色跳跃下标self.upImageIndex 0# 角色斜射下标self.obliqueImageIndex 0# 上一次显示图片的时间self.runLastTimer currentTimeself.fireLastTimer currentTime# 选择当前要显示的图片self.image self.standRightImage# 获取图片的rectself.rect self.image.get_rect()# 设置角色的状态self.state State.FALL# 角色的方向self.direction Direction.RIGHT# 速度self.xSpeed PLAYER_X_SPEEDself.ySpeed 0self.jumpSpeed -11# 人物当前的状态标志self.isStanding Falseself.isWalking Falseself.isJumping Trueself.isSquating Falseself.isFiring False# 重力加速度self.gravity 0.7self.isUp Falseself.isDown Falsedef update(self, playerBulletList, keys, currentTime):pass5. 完成角色更新函数 先根据状态读取下一次操作再更新玩家位置再根据方向和状态标志觉得玩家显示的图片 def update(self, keys, currentTime):# 更新站或者走的状态# 根据状态响应按键if self.state State.STAND:self.standing(keys, currentTime)elif self.state State.WALK:self.walking(keys, currentTime)elif self.state State.JUMP:self.jumping(keys, currentTime)elif self.state State.FALL:self.falling(keys, currentTime)# 更新位置# 记录前一次的位置坐标pre self.rect.xself.rect.x self.xSpeedself.rect.y self.ySpeed# 如果x位置小于0了就不能移动防止人物跑到屏幕左边if self.rect.x 0:self.rect.x pre根据状态标志设置角色图片 # 更新动画# 跳跃状态if self.isJumping:# 根据方向if self.direction Direction.RIGHT:# 方向向右角色加载向右跳起的图片self.image self.upRightImages[self.upImageIndex]else:# 否则方向向左角色加载向左跳起的图片self.image self.upLeftImages[self.upImageIndex]# 角色蹲下if self.isSquating:if self.direction Direction.RIGHT:# 加载向右蹲下的图片self.image self.downRightImageelse:# 加载向左蹲下的图片self.image self.downLeftImage# 角色站着if self.isStanding:if self.direction Direction.RIGHT:if self.isUp:# 加载向右朝上的图片self.image self.upRightImageelif self.isDown:# 加载向右蹲下的图片self.image self.downRightImageelse:# 加载向右站着的图片self.image self.standRightImageelse:# 向左也是同样的效果if self.isUp:self.image self.upLeftImageelif self.isDown:self.image self.downLeftImageelse:self.image self.standLeftImage# 角色移动if self.isWalking:if self.direction Direction.RIGHT:if self.isUp:# 加载斜右上的图片self.image self.obliqueUpRightImages[self.obliqueImageIndex]elif self.isDown:# 加载斜右下的图片self.image self.obliqueDownRightImages[self.obliqueImageIndex]else:# 加载向右移动的图片根据开火状态是否加载向右开火移动的图片if self.isFiring:self.image self.rightFireImages[self.imageIndex]else:self.image self.rightImages[self.imageIndex]else:if self.isUp:self.image self.obliqueUpLeftImages[self.obliqueImageIndex]elif self.isDown:self.image self.obliqueDownLeftImages[self.obliqueImageIndex]else:if self.isFiring:self.image self.leftFireImages[self.imageIndex]else:self.image self.leftImages[self.imageIndex]完整的update()函数 def update(self, playerBulletList, keys, currentTime):# 更新站或者走的状态# 根据状态响应按键if self.state State.STAND:self.standing(keys, currentTime, playerBulletList)elif self.state State.WALK:self.walking(keys, currentTime, playerBulletList)elif self.state State.JUMP:self.jumping(keys, currentTime, playerBulletList)elif self.state State.FALL:self.falling(keys, currentTime, playerBulletList)# 更新位置# 记录前一次的位置坐标pre self.rect.xself.rect.x self.xSpeedself.rect.y self.ySpeed# 如果x位置小于0了就不能移动防止人物跑到屏幕左边if self.rect.x 0:self.rect.x pre# 更新动画# 跳跃状态if self.isJumping:# 根据方向if self.direction Direction.RIGHT:# 方向向右角色加载向右跳起的图片self.image self.upRightImages[self.upImageIndex]else:# 否则方向向左角色加载向左跳起的图片self.image self.upLeftImages[self.upImageIndex]# 角色蹲下if self.isSquating:if self.direction Direction.RIGHT:# 加载向右蹲下的图片self.image self.downRightImageelse:# 加载向左蹲下的图片self.image self.downLeftImage# 角色站着if self.isStanding:if self.direction Direction.RIGHT:if self.isUp:# 加载向右朝上的图片self.image self.upRightImageelif self.isDown:# 加载向右蹲下的图片self.image self.downRightImageelse:# 加载向右站着的图片self.image self.standRightImageelse:# 向左也是同样的效果if self.isUp:self.image self.upLeftImageelif self.isDown:self.image self.downLeftImageelse:self.image self.standLeftImage# 角色移动if self.isWalking:if self.direction Direction.RIGHT:if self.isUp:# 加载斜右上的图片self.image self.obliqueUpRightImages[self.obliqueImageIndex]elif self.isDown:# 加载斜右下的图片self.image self.obliqueDownRightImages[self.obliqueImageIndex]else:# 加载向右移动的图片根据开火状态是否加载向右开火移动的图片if self.isFiring:self.image self.rightFireImages[self.imageIndex]else:self.image self.rightImages[self.imageIndex]else:if self.isUp:self.image self.obliqueUpLeftImages[self.obliqueImageIndex]elif self.isDown:self.image self.obliqueDownLeftImages[self.obliqueImageIndex]else:if self.isFiring:self.image self.leftFireImages[self.imageIndex]else:self.image self.leftImages[self.imageIndex]之后就是对四个状态函数进行完善啦
http://www.w-s-a.com/news/925750/

相关文章:

  • 做二手房产网站多少钱用户权限配置wordpress
  • 做亚马逊网站需要租办公室吗小型企业网站模板
  • 网站全屏视频怎么做个人公司注册网上申请
  • 如何k掉别人的网站搜索引擎优化与关键词的关系
  • 百度推广 网站吸引力做网站开发的薪酬怎么样
  • js网站开发工具软件营销方案
  • 做网站的天空网云南省建设厅网站怎么进不去
  • 天津网站排名提升网络营销推广策略包括哪些
  • 网站建设与管理 ppt网站打开是别人的
  • 图片网站怎么做排名怎么分析一个网站seo
  • 伪原创对网站的影响深圳装修公司排名100强
  • 网站建设公司效果个人可以做医疗信息网站吗
  • 网站使用arial字体下载微网站 建设
  • 文化馆网站建设意义营销型国外网站
  • 公司网站定位建议wordpress怎么用模板
  • 中国十大热门网站排名计算机选什么专业最好
  • 怀化建设企业网站太原网站关键词排名
  • 空间注册网站网站制作是怎么做的
  • 数码家电商城网站源码一个网站的成本
  • 网站伪静态是什么意思麻涌东莞网站建设
  • 理县网站建设公司郑州仿站定制模板建站
  • 手机网站建设网站报价诸城人才网招聘网
  • 一起做网站怎么下单临沂网站制作
  • 公司网站案例企业网站 模版
  • 做的好的响应式网站有哪些网站界面设计案例
  • 上海创意型网站建设icp备案网站信息
  • 网站没收录中山手机网站制作哪家好
  • 代驾软件开发流程wordpress 博客主题 seo
  • 成都的教育品牌网站建设网站广告js代码添加
  • 网站找人做seo然后网站搜不到了网站建设seoppt