青海省公路建设管理局官方网站搜多多搜索引擎入口
- 作者: 五速梦信息网
- 时间: 2026年03月21日 09:54
当前位置: 首页 > news >正文
青海省公路建设管理局官方网站,搜多多搜索引擎入口,哪个网站微博做的最好,百度网站推广价格有很多同学问我还有其他什么小游戏吗#xff0c;游戏是怎么做的#xff0c;难不难。我就用两篇文章来介绍一下#xff0c;如何使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小游戏玩转不停↓ 更多小游戏可以评论区讨论哦#xff0c;喜欢…有很多同学问我还有其他什么小游戏吗游戏是怎么做的难不难。我就用两篇文章来介绍一下如何使用Python做游戏。 兔子与灌 俄罗斯方块 休闲五子棋 走迷宫 推箱子 消消乐 超多小游戏玩转不停↓ 更多小游戏可以评论区讨论哦喜欢支持的话点击下方↓ 关注 私信 “小游戏” 得源代码哦小游戏源码腾讯文档-在线文档https://docs.qq.com/doc/DU2t4VW1aQU9DcGdZ 用PyGame做游戏非常简单我们今天第一篇文章让大家实现一个可以在地图上移动的小猪。 基本框架 首先无论你是做什么游戏别管三七二十一先把下面这段代码复制粘贴到你的编辑器里面。所有游戏都需要这几行代码 import pygamedef main():pygame.init()pygame.display.set_caption(未闻Code青南做的游戏) # 游戏标题win pygame.display.set_mode((800, 600)) # 窗口尺寸宽800高600running Truewhile running:for event in pygame.event.get():if event.type pygame.QUIT: # 点击左上角或者右上角的x关闭窗口时停止程序running False main() 运行效果如下图所示 加载素材 现在我们随便找两张图片一张作为背景一张作为主角。尺寸不用太在意差不多就可以了因为我们可以用代码动态调整。下面两张图是我随便找的素材大家注意图中红框框住的地方是这两张图片的尺寸。 我们使用如下代码加载图片 img_surf pygame.image.load(图片地址).convert_alpha() 其中的 .convert_alpha() 是保留png图片的透明背景。如果你加载的图片不png图片可以把 convert_alpha() 改成 convert() 。 如果要修改图片尺寸使用如下代码 img_surf pygame.transform.scale(img_surf, (宽, 高)) 要把图片显示在窗口中使用下面两行代码 win.blit(素材对象, (素材左上角的横坐标, 素材左上角的纵坐标)) pygame.display.flip() 完整的代码如下 import pygamedef main():pygame.init()pygame.display.set_caption(未闻Code青南做的游戏) # 游戏标题win pygame.display.set_mode((800, 600)) # 窗口尺寸bg_small pygame.image.load(bg.png).convert_alpha()bg_big pygame.transform.scale(bg_small, (800, 600))pig pygame.image.load(pig_in_car.png).convert_alpha()running Truewhile running:for event in pygame.event.get():if event.type pygame.QUIT: # 点击左上角或者右上角的x关闭窗口时停止程序running Falsewin.blit(bg_big, (0, 0)) # 背景图最先加载坐标是(left, top)win.blit(pig, (200, 300))pygame.display.flip()main() 运行效果如下图所示 需要注意的是 win.blit 和 pygame.display.flip() 都要放到while循环里面。其中 win.blit 的第一个参数是我们刚刚加载的素材对象。第二个参数是一个元组标记这个图片左上角在画布上面的坐标。整个画布左上角对应坐标 (0, 0) 。由于背景图的尺寸也是 (800, 600) 所以背景图的左上角放到 (0, 0) 就刚好可以铺满整个画布。 哪里找素材 我们做的是一个像素风格的游戏可以到 itch.io 上面找素材 这个网站提高了大量的游戏素材并且绝大部分素材在个人非商业用途的情况下是免费的。你找到自己喜欢的素材以后就可以直接下载整个过程你甚至都不需要登录比国内的垃圾素材网站可良心多了。 怎么我的素材长这样 你下载了素材以后可能会发现一件非常奇怪的事情怎么素材全部画在一张图上 实际上这就是业界惯例做素材的人会把每一类素材排列到一张图片上你要用的时候需要自己去裁剪。例如所有植物放在一张图上所有雕像放在一张图上地基贴图也放在一张图上。 上面我们演示用的背景图初看起来是一张绿色的图但是它实际上包含了多个地基元素请注意我用红框框住的部分 在正式游戏中我们要把每一个基本元素拆出来重新组合起来使用。重组的时候有些元素要复制多份重复使用有些元素要旋转缩放。最终组合成下面这样看起来 好看 的地图 一般来说像素风格的素材尺寸大多是 16x16 32x32 64x64 128x128 。素材作者正常情况下会提供裁剪说明。如果没有提供的话你也可以肉眼观察然后猜一猜。 例如我要从雕像素材里面剪切出红框框住的女神像 那么我可以这样写代码 img_surf pygame.image.load(雕像素材.png).convert_alpha() goddess img_surf.subsurface(( 女神像左上角的横坐标 , 女神像左上角的纵坐标, 女神像的宽, 女神像的高)) 运行效果如下图所示 可能有同学问为什么女神的坐标是这样的呢我只能说这个坐标是我试了很多次试出来的。 使用小精灵来管理对象 除了背景图我们添加的每一个元素都是一个对象例如上面的小猪和女神像。原则上来讲上面的代码就足够让你把游戏做得漂亮了想加什么东西就不停加载图片素材然后放到合适的位置就可以了。 但我们可以使用面向对象的设计方法让代码更容易维护也更简单。PyGame里面有一个类叫做 Sprite 我们可以为每一个对象实现一个类继承 Sprite 然后把对象的素材设置成 .surf 属性把对象的位置设置为 .rect 属性。例如上面的代码我们修改一下 import pygameclass Bg(pygame.sprite.Sprite):def init(self):super(Bg, self).init()bg_small pygame.image.load(bg.png).convert_alpha()grass_land bg_small.subsurface((0, 0, 128, 128))self.surf pygame.transform.scale(grass_land, (800, 600))self.rect self.surf.get_rect(left0, top0) # 左上角定位class Pig(pygame.sprite.Sprite):def init(self):super(Pig, self).init()self.surf pygame.image.load(pig_in_car.png).convert_alpha()self.rect self.surf.get_rect(center(400, 300)) # 中心定位class Goddess(pygame.sprite.Sprite):def init(self):super(Goddess, self).init()building pygame.image.load(building.png).convert_alpha()self.surf building.subsurface(((7 * 64 - 10, 0, 50, 100)))self.rect self.surf.get_rect(center(500, 430)) # 女神像的中心放到画布(500, 430)的位置def main():pygame.init()pygame.display.set_caption(未闻Code青南做的游戏) # 游戏标题win pygame.display.set_mode((800, 600)) # 窗口尺寸bg Bg()goddess Goddess()pig Pig()all_sprites [bg, goddess, pig] # 注意添加顺序后添加的对象图层在先添加的对象的图层上面running Truewhile running:for event in pygame.event.get():if event.type pygame.QUIT: # 点击左上角或者右上角的x关闭窗口时停止程序running Falsefor sprite in all_sprites:win.blit(sprite.surf, sprite.rect)pygame.display.flip()if name main:main() 运行效果如下图所示 注意代码中的 all_sprites [bg, goddess, pig] 这里我使用的是列表。后面会有更高级的数据结构 SpriteGroup 来储存他们。今天使用列表就足够了。 素材对象.get_rect() 会返回一个坐标定位对象这个对象有多个属性例如 .left , .top , .center , .width , .height 。在不传参数的情况下默认 .left0 , .top0 PyGame会自动根据这个对象的尺寸计算 .width .height 和 .center 。我们可以通过传入参数的形式主动设定。当你设定左上角的时候它自动就能算出中心点的坐标当你传入中心坐标的时候它自动就能算出左上角的坐标。 理论上来讲在每个类里面素材对象可以用任何名字不一定要用 .surf 。坐标定位对象也不一定要用 .rect 只要你在 win.blit 的时候对应起来就可以了。但是如果你统一使用 .surf 和 .rect 会给你带来很多好处。这一点我们到物体碰撞那个地方再讲。因此我建议你就使用这两个名字。 让小猪动起来 既然是游戏那肯定要按键盘让主角动起来。否则跟一幅画有什么区别呢大家注意 main() 函数里面的 while running 这个循环如果你在循环里面加上一行代码 print(111) 你会发现当你运行这个游戏的时候 111 会一直不停的打印出来。 PyGame本质上就是通过 win.blit 不停地画图由于这个 while 循环每秒要运行很多次如果每次运行的时候我们让 win.blit 的第二个参数也就是素材对象的坐标有细微的差异那么在人眼看起来这个素材对象就在运动了。 我们的目标是按住键盘的上下左右方向键小猪向4个不同的方向移动。在PyGame里面获得键盘按住不放的键使用如下代码实现 keys pygame.key.get_pressed() 它返回的是一个长得像列表的对象但不是列表当我们要判断某个键是否被按下的时候只需要判断 if keys[想要判断的键] 如果返回 True 说明被按住了。基于这个原理我们来写两段代码。首先修改 Pig 类新增一个 .update 方法 class Pig(pygame.sprite.Sprite):def init(self):super(Pig, self).init()self.surf pygame.image.load(pig_in_car.png).convert_alpha()self.rect self.surf.get_rect(center(400, 300)) # 中心定位def update(self, keys):if keys[pygame.K_LEFT]:self.rect.move_ip((-5, 0)) # 横坐标向左elif keys[pygame.K_RIGHT]:self.rect.move_ip((5, 0)) # 横坐标向右elif keys[pygame.K_UP]:self.rect.move_ip((0, -5)) #纵坐标向上elif keys[pygame.K_DOWN]:self.rect.move_ip((0, 5)) # 纵坐标向下# 防止小猪跑到屏幕外面if self.rect.left 0:self.rect.left 0if self.rect.right 800:self.rect.right 800if self.rect.top 0:self.rect.top 0if self.rect.bottom 600:self.rect.bottom 600 .update 方法接收一个参数 keys 就是我们按键返回的长得像列表的对象。然后判断是哪个方向键被按下了。根据被按下的键 .rect 坐标定位对象修改相应方向的值。 rect.move_ip 这里的 ip 是 inplace 的简写也就是修改 .rect 这个属性自身。它的参数是一个元组对应横坐标和纵坐标。横纵坐标小于0表示向左或者向上大于0表示向右或者向下。 原来的 main() 函数只需要在 win.blit 之前增加两行代码 keys pygame.key.get_pressed() pig.update(keys) 完整代码如下 import pygameclass Bg(pygame.sprite.Sprite):def init(self):super(Bg, self).init()bg_small pygame.image.load(bg.png).convert_alpha()grass_land bg_small.subsurface((0, 0, 128, 128))self.surf pygame.transform.scale(grass_land, (800, 600))self.rect self.surf.get_rect(left0, top0) # 左上角定位class Pig(pygame.sprite.Sprite):def init(self):super(Pig, self).init()self.surf pygame.image.load(pig_in_car.png).convert_alpha()self.rect self.surf.get_rect(center(400, 300)) # 中心定位def update(self, keys):if keys[pygame.K_LEFT]:self.rect.move_ip((-5, 0))elif keys[pygame.K_RIGHT]:self.rect.move_ip((5, 0))elif keys[pygame.K_UP]:self.rect.move_ip((0, -5))elif keys[pygame.K_DOWN]:self.rect.move_ip((0, 5))# 防止小猪跑到屏幕外面if self.rect.left 0:self.rect.left 0if self.rect.right 800:self.rect.right 800if self.rect.top 0:self.rect.top 0if self.rect.bottom 600:self.rect.bottom 600class Goddess(pygame.sprite.Sprite):def init(self):super(Goddess, self).init()building pygame.image.load(building.png).convert_alpha()self.surf building.subsurface(((7 * 64 - 10, 0, 50, 100)))self.rect self.surf.get_rect(center(500, 430)) # 女神像的中心放到画布(500, 430)的位置def main():pygame.init()pygame.display.set_caption(未闻Code青南做的游戏) # 游戏标题win pygame.display.set_mode((800, 600)) # 窗口尺寸bg Bg()goddess Goddess()pig Pig()all_sprites [bg, goddess, pig] # 注意添加顺序后添加的对象图层在先添加的对象的图层上面running Truewhile running:for event in pygame.event.get():if event.type pygame.QUIT: # 点击左上角或者右上角的x关闭窗口时停止程序running Falsekeys pygame.key.get_pressed()pig.update(keys)for sprite in all_sprites:win.blit(sprite.surf, sprite.rect)pygame.display.flip()if name main:main() 最后的运行效果如下面这个视频所示 PyGame做游戏真的非常简单只要会加载素材就能做出一个还能看得过去的游戏。今天我们学会了怎么添加素材怎么捕获键盘事件。 PyGame可以读取Gif图片但是你会发现加载进来以后Gif不会动。下一篇文章我们来讲讲如何让你控制的角色动起来例如控制一个小娃娃移动的时候它的脚也跟着动。以及对象的碰撞检测。
- 上一篇: 青海企业网站建设开发管理软件开发
- 下一篇: 青海省建设厅查询网站连云港优化网站团队
相关文章
-
青海企业网站建设开发管理软件开发
青海企业网站建设开发管理软件开发
- 技术栈
- 2026年03月21日
-
青海媒体网站建设公司可以做动漫的网站有哪些
青海媒体网站建设公司可以做动漫的网站有哪些
- 技术栈
- 2026年03月21日
-
青海建设厅网站通知余杭区高端网站建设
青海建设厅网站通知余杭区高端网站建设
- 技术栈
- 2026年03月21日
-
青海省建设厅查询网站连云港优化网站团队
青海省建设厅查询网站连云港优化网站团队
- 技术栈
- 2026年03月21日
-
青海省建设厅职业注册官方网站深圳软件产业基地
青海省建设厅职业注册官方网站深圳软件产业基地
- 技术栈
- 2026年03月21日
-
青海省建设网站价格低网络推广公司怎么运作
青海省建设网站价格低网络推广公司怎么运作
- 技术栈
- 2026年03月21日






