前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Otter数据同步服务部署与数据同步最佳实践

Otter数据同步服务部署与数据同步最佳实践

原创
作者头像
Jerly.Yan
发布于 2024-01-11 13:03:17
发布于 2024-01-11 13:03:17
1.2K0
举报

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

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

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

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

游戏效果是这样的:

游戏规则很简单:

  1. 不要被拦截的工作人员追上
  2. 抱到梅西(接触一定时长)
  3. 定时会增加拦截的工作人员
  4. 可以反复拥抱
  5. 被追上后游戏结束,显示坚持的时间和拥抱的次数

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

运行说明

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install pgzero

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pgzrun iMessi.py

代码简介

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

  • 对于「玩家」来说,就是根据上下左右按键,变换位置坐标;
  • 对于「工作人员」来说,就是根据自身和玩家的相对位置算出移动的方向,不断靠近,如果碰上了就游戏结束
  • 对于「梅西」来说,就是判断是否与玩家碰上,并记录碰上的持续时间

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 加速
self.speedx += self.fx * self.acc
self.speedy += self.fy * self.acc
# 限制最高速度
d = (self.speedx**2 + self.speedy**2)**0.5 / self.speed_max
if d > 1:
    self.speedx /= d
    self.speedy /= d
# 更新坐标
self.x += self.speedx
self.y += self.speedy

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 跑动方向
if keyboard.left:
    self.fx = -1
elif keyboard.right:
    self.fx = 1
else:
    self.fx = 0
if keyboard.up:
    self.fy = -1
elif keyboard.down:
    self.fy = 1
else:
    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.angle
else:
    self.angle_dest = direct        
# 贴图旋转
if abs(self.angle - self.angle_dest) < 5 or abs(self.angle - self.angle_dest) > 355:
    self.angle = self.angle_dest
else:
    if (0 < self.angle - self.angle_dest < 180) or (
        self.angle - self.angle_dest < -180):
        self.angle -= 500 * dt
    else:
        self.angle += 500 * dt

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
otter安装 原
    https://github.com/alibaba/otter/wiki/QuickStart
尚浩宇
2018/08/17
9490
otter安装
                                                                            原
数据同步利器-otter的搭建使用说明「建议收藏」
导历史表还需要程序代码实现吗? 还在用mysql的主从复制吗? Otter都能为你解决。
全栈程序员站长
2022/09/06
2.9K0
数据同步利器-otter的搭建使用说明「建议收藏」
Otter-入门篇3(Node搭建)
Otter-入门篇3(Node搭建) 前言 哈咯大家好呀!今天是对otter准备的最后一个流程,配置好node,并且吧manager,zookeeper和node组合起来形成一个完整可以进行Mysql
喵了个咪233
2018/03/02
2.3K0
Otter-入门篇3(Node搭建)
otter用于跨云RDS之间配置双主实时同步
客户需要将华为云rds for MySQL和天翼云rds for MySQL做一个双向同步,当华为云rds宕机的时候,可以切换到天翼云继续提供服务,而且此时,天翼云的数据也可以自动同步到华为云rds,平时只使用华为云的rds,和双A方案有点差异,需要注意的是rds环境不能安装任何的软件,所以,我目前想到的方案有:
AiDBA宝典
2023/04/26
3.4K0
otter用于跨云RDS之间配置双主实时同步
Otter-入门篇2(Manager安装配置)
Otter-入门篇2(Manager安装配置) 前言 上一节已经简单介绍了Otter的基本信息,本节我们就来开准备搭建一个我们自己的Otter环境,因为一个Otter需要Manage+node+数据库
喵了个咪233
2018/03/02
1.5K0
Otter-入门篇2(Manager安装配置)
Canal高可用架构部署
canal 是阿里的一款开源项目,纯 Java 开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB)。
陶陶技术笔记
2021/03/24
4.3K2
Canal高可用架构部署
Otter-入门篇4(单向同步实践)
Otter-入门篇4(单向同步实践)# 前言## 在前几节我们已经做好了关于otter的准备工作,配置好了zookeeper,manage和node,本节就来完成otter第一个实际功能,单相数据同步
喵了个咪233
2018/03/02
2K0
Otter-入门篇4(单向同步实践)
Greenplum 实时数据仓库实践(5)——实时数据同步
构建实时数据仓库最大的挑战在于从操作型数据源实时抽取数据,即ETL过程中的Extract部分。我们要以全量加增量的方式,实时捕获源系统中所需的所有数据及其变化,而这一切都要在不影响对业务数据库正常操作的前提下进行,目标是要满足高负载、低延迟,难点正在于此,所以需要完全不同于批处理的技术加以实现。当操作型数据进入数据仓库过渡区或ODS以后,就可以利用数据仓库系统软件提供的功能特性进行后续处理,不论是Greenplum、Hive或是其他软件,这些处理往往只需要使用其中一种,相对来说简单一些。
用户1148526
2021/12/17
4K0
Greenplum 实时数据仓库实践(5)——实时数据同步
MySQL如何实时同步数据到ES?试试这款阿里开源的神器!
canal主要用途是对MySQL数据库增量日志进行解析,提供增量数据的订阅和消费,简单说就是可以对MySQL的增量数据进行实时同步,支持同步到MySQL、Elasticsearch、HBase等数据存储中去。
用户4172423
2020/11/11
3.5K1
MySQL如何实时同步数据到ES?试试这款阿里开源的神器!
Canal Admin 高可用集群使用教程
Canal 1.1.4 版本引入了 Canal Admin,提供了统一管理 Canal Server 的 WebUI 界面。Canal Admin 的核心概念主要有:
Se7en258
2021/10/09
3.6K0
Canal Admin 高可用集群使用教程
阿里Canal框架(数据同步中间件)初步实践
早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获取增量变更进行同步,由此衍生出了增量订阅&消费的业务,从此开启了一段新纪元。
java架构师
2019/05/15
1.2K0
Otter介绍及(Manager)安装「建议收藏」
名称:otter [‘ɒtə(r)] 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数据库. 一个分布式数据库同步系统.。
全栈程序员站长
2022/09/20
1.1K0
MySQL从零到一解读增量同步数据到elasticsearch canal adapter方式(binlog)实现
本文是作者在单机上面从零到一实现增量同步MySQL数据到elasticsearch canal adapter方式(binlog)实现。
数据和云
2019/05/14
1.8K0
Canal数据同步工具
​ Canal就是一个很好的数据库同步工具。canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。
OY
2022/03/18
1.7K0
Canal数据同步工具
去哪儿网数据同步平台技术演进与实践
井显生,2019年加入去哪儿,现负责国内机票出票、退款、改签核心业务。在领域驱动设计(DDD)、高并发有大量实践经验。
数据社
2021/08/27
1.1K0
去哪儿网数据同步平台技术演进与实践
利用 Canal 将 MySQL 数据实时同步至 Kafka 极简教程
笔者使用 Canal 将 MySQL 数据同步至 Kafka 时遇到了不少坑,还好最后终于成功了,这里分享一下极简教程,希望能帮到你。
披头
2023/09/10
2.4K0
利用 Canal 将 MySQL 数据实时同步至 Kafka 极简教程
Canal+Otter - Canal篇(1)
Canal是阿里开源产品之一,是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,Canal主要支持了MySQL的binlog解析。
干货满满张哈希
2021/04/12
1.8K0
Canal+Otter - Canal篇(1)
拉取 binlog,自动数据同步,老板要给涨工资....
1、同步双写:字面意思,同步+双写。比如老库模型重构,数据迁移到新库,迁移过程中,如果有数据变更,既要写到老库,也要写到新库,两边同步更新。
微观技术
2022/02/10
5290
拉取 binlog,自动数据同步,老板要给涨工资....
数据同步工具
公司要搞数据平台,首当其冲的是把旧库的数据导入到新库中,原本各种数据库大部分都提供了导入导出的工具,但是数据存储到各个地方,mongdb,hbase,mysql,oracle等各种各样的不同数据库,同步起来头都大了
全栈程序员站长
2022/09/13
3.1K0
使用canal增量订阅MySQL binlog
【转载请注明出处】:https://cloud.tencent.com/developer/article/1634327
后端老鸟
2020/05/28
3K0
使用canal增量订阅MySQL binlog
推荐阅读
相关推荐
otter安装 原
更多 >
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档