环球快看点丨用Python写了一个「拥抱梅西」的小游戏
时间:2023-06-23 20:31:06来源:程序员客栈

入门教程、案例源码、学习资料、读者群

请访问: python666.cn


(资料图)

大家好,欢迎来到 Crossin的编程教室 !

最近有个小伙儿因为在比赛中冲进场地拥抱梅西而出名了。

这种行为当然不可取,他也为此付出了代价。但要说我没有一丁点羡慕和佩服那是不可能的。

于是,我也尬蹭一下这个热点,用Python写了一个「拥抱梅西」的小游戏。

游戏效果是这样的:

游戏规则很简单:

不要被拦截的工作人员追上

抱到梅西(接触一定时长)

定时会增加拦截的工作人员

可以反复拥抱

被追上后游戏结束,显示坚持的时间和拥抱的次数

代码已上传,获取请访问:python666.cn/c/9

或在号内回复关键字:梅西

运行说明

代码使用了游戏框架 pygame-zero 进行开发。之前我们也有发过基于这个框架的游戏:

羊了个羊,但是Python简(li)单(pu)版

如果你对于此框架还不熟悉,可以看下这篇介绍:

PONG - 100行代码写一个弹球游戏

因此运行代码前需先安装模块:

pip install pgzero

用此框架代码看起来与一般代码稍有不同,它更像一个配置脚本,其中会出现很多未定义的方法和变量,因此在很多编辑器里会提示有错,但其实是可以运行的,无需手动增加 import。这也是为什么你会看到我视频里的代码截图有大量的下划线。

pgzero有两种方式运行,一种是通过命令行的 pgzrun 命令;另一种是直接在编辑器中运行。参见官方文档:

https://pygame-zero.readthedocs.io/zh_CN/latest/ide-mode.html

本代码用的是第二种直接运行的方式(需新版pgzero),可直接在IDE中执行。

有部分读者反馈此代码在spyder等一些编辑器中无法运行,类似情况可以尝试第一种传统方法,即把最后一行代码 pgzrun.go() 去掉,然后直接在命令行该目录下运行: 

pgzrun iMessi.py

代码简介

如果你对代码的核心逻辑其实比较容易理解。

对于「玩家」来说,就是根据上下左右按键,变换位置坐标;

对于「工作人员」来说,就是根据自身和玩家的相对位置算出移动的方向,不断靠近,如果碰上了就游戏结束

对于「梅西」来说,就是判断是否与玩家碰上,并记录碰上的持续时间

判断是否“碰上”很简单,就是计算一下两个坐标的距离是否小于一定值。

至于角色的移动,粗略的做法是,计算出x轴方向和y轴方向上的速度,然后在update函数中,将原坐标位置加上速度值,得到新的坐标位置。

但在我这次的代码中,为了让跑动更“丝滑”,没有选择直接改变速度,而是根据玩家的按键计算出加速度,然后在update函数中,将原速度值加上加速度值,得到新的速度,再用新的速度去计算新的坐标位置。

# 加速self.speedx += self.fx * self.accself.speedy += self.fy * self.acc# 限制最高速度d = (self.speedx**2 + self.speedy**2)**0.5 / self.speed_maxif d >1:self.speedx /= dself.speedy /= d# 更新坐标self.x += self.speedxself.y += self.speedy

有了这样的设定之后,还有个好处就是可以增加游戏的可玩性,比如你可以设定一种最高速度比玩家快,但是加速度比较小的「工作人员」,玩家就需要通过不停地变换方向来摆脱。

代码中另一个比较复杂的地方是“转向”的细节处理。同样为了更加丝滑,我没有选择直接根据计算出的方向来改变角色贴图方向,而是将计算出的方向作为“目标方向”,然后根据角色当前实际方向与目标方向的偏差,决定是向顺时针还是逆时针方向旋转,直到两个方向小于一定阈值。

# 跑动方向if keyboard.left:self.fx = -1elif keyboard.right:self.fx = 1else:self.fx = 0if keyboard.up:self.fy = -1elif keyboard.down:self.fy = 1else:self.fy = 0# 计算目标方向角度directs = ((135, 180, -135), (90, None, -90), (45, 0, -45))direct = directs[self.fx + 1][self.fy + 1]if direct is None:self.angle_dest = self.angleelse:self.angle_dest = direct        # 贴图旋转if abs(self.angle - self.angle_dest) < 5 or abs(self.angle - self.angle_dest) >355:self.angle = self.angle_destelse:if (0 < self.angle - self.angle_dest < 180) or (self.angle - self.angle_dest < -180):self.angle -= 500 * dtelse:self.angle += 500 * dt

这段会牵扯一点初中几何的知识,想要理清的话建议在纸上画一画。

最后,是关于这个游戏的一个小视频,给大家图一乐:

欢迎大家关注+三连~

代码已上传,获取请访问:python666.cn/c/9

或在号内回复关键字:梅西

Crossin的新书《码上行动:零基础学会PYTHON编程(CHATGPT版)》已经上市了。

本书力求做到浅显易懂,让完全没有编程经验的零基础“小白”也能学会Python。内容从环境搭建这种最基础的步骤开始讲起,逐渐深入到常见的实际应用当中。在讲解知识点的同时配有相应的代码示例,让读者可以边学边练加深理解。书中还创新地使用 ChatGPT 作为编程学习的辅助,带领读者探索AI时代下学习编程的新模式。

公众号的读者朋友们购买后可在后台联系我,加入读者交流群,Crossin会为你开启陪读模式,解答你在阅读本书时的一切疑问。

感谢转发和点赞的各位~

_往期文章推荐_

英语不好能不能学编程?如需了解付费精品课程及教学答疑服务请在Crossin的编程教室内回复: 666

标签:

  • 上一篇文章: 全国铁路今天预计发送旅客1620万人次
  • 下一篇文章: 最后一页
  • 生活指南
  • “洞庭清波”,激荡起绿色发展春潮——湖南纵深推进“洞庭清波”专项行动 当前滚动

    “洞庭清波”,激荡起绿色发展春潮——湖南纵深推进“洞庭清波”专项行

  • 下雨烦心的句子_以“雨”形容心烦的句子

    可不可以说我坚强不下去了呢。夕下雨,打雷加闪电,是不是要拆散我与他

  • 当前动态:HTML怎么添加滚动条?如何使用HTML5实现滚动条滑动效果?

    HTML怎么添加滚动条?需要准备的材料分别有:电脑、浏览器、html编辑

  • 易方达裕浙3个月定开债券(017705)成立,获净认购79.91亿元

    2023年6月16日,易方达基金公告,易方达裕浙 3 个月定开债券(017705

  • 每日热门:我国成立绿色建筑全国重点实验室推动建筑业清洁低碳转型

    我国成立绿色建筑全国重点实验室推动建筑业清洁低碳转型---为破解绿色

  • 验电笔怎么测断掉点(测电笔怎么测断线) 天天看点

    验电笔测断掉点把电线上通上一跟火线,不能通零线,然后把电笔沿着电线

  • 陕西省2023年秦岭松材线虫病防控隔离带建设全面启动 焦点快报

    2023年6月,陕西省秦岭松材线虫病防控隔离带建设全面启动。目前已完成

  • 权威发布|淄博市经济开发区建设巡礼主题系列新闻发布会临淄专场召开_资讯

    大众网记者赵秋瑶淄博报道6月16日,淄博市政府新闻办公室举行淄博市经

  • 当前关注:出国签证的介绍信

    出国签证的介绍信(精选4篇)出国签证的介绍信篇1致美国驻华大使馆:,

  • 全球消息!2023斯诺克世锦赛半决赛时间是什么时候?2022斯佳辉得了什么冠军?

    2023斯诺克世锦赛半决赛时间是什么时候?四月二七日晚举行半决赛中国

  • 周口野生动物园怎么样?周囗野生动物园门票多少?|天天播报

    周口野生动物园怎么样?红猴、节尾狐猴、猕猴、绿猴、黑帽吊猴。周口

  • 肖战偷是什么意思? 肖战dyf事件什么意思?

    肖战偷是什么意思?肖战偷这个梗主要是和肖战的粉丝有关,肖战的粉丝

  • 中国球员吴易昺击败ATP男单世界排名第25位的澳大利亚名将克耶高斯|天天微资讯

    在北京时间昨天凌晨结束的2023年ATP250斯图加特公开赛男单首轮争夺

  • 股市操盘手常用的洗盘手法有哪些?股市洗盘好还是不好?_世界报资讯

    股市操盘手常用的洗盘手法有哪些?一、打压洗盘先行拉高之后实施反手

  • 哪个银行的存款利息高一点?银行存款方式有哪几种?_当前关注

    哪个银行的存款利息高一点?1、邮政银行利息最高的就是邮政储蓄银行

  • 今日观点!司法鉴定费用谁承担?司法鉴定鉴定时限是多久?

    司法鉴定费用谁承担?司法鉴定费用由谁承担,谁提出做司法鉴定的,谁

  • 民生
    • 新一代中型集装箱船外高桥口岸交付运营 将首航

    • 这次袁泉也输了!罕见撞衫张雨绮,气质美也不敌霸气的时髦感 环球热头条

    • 【全球热闻】赛龙舟、包粽子......各地如何过端午?热闹场面来啦

    • 党务工作包括哪些内容及职责 党务工作包括哪些内容