抽卡逻辑自述

抽卡逻辑自述

参考《剑与远征》

卡牌颜色以及合成

颜色合成
绿色可分解,得到粉尘和银瓜子, 最基础的卡
蓝+同样的三张蓝色可合成一张蓝+
同种族的三张蓝+可以合成一张紫(可以选择合成其中蓝+的某个紫色)
紫+同英雄的两张紫色可以合成一张紫+
同种族的三张紫+可以合成一张黄(可选择合成其中紫+的某个角色)
黄+黄与同角色的紫+可以合成黄+
同种族的两张黄+可以合成一张红(可以选择合成其中黄+的某个角色)
红+同种族的红与黄+结合可以合成红+
红+与两张同英雄的紫+可以合成一张白
一张白与同英雄的紫+可以升星, 共5星

简单来说:

……

阅读全文

层级时间轮 | skynet 定时器

skynet定时器

要解析一个程序代码,先了解数据结构,这是基础,再看函数。 拿skynet定时器举例子。

数据结构

//定时器事件 用于抛出定时器事件到消息队列里。理解这个数据结构需要先了解skynet的框架原理,
//不理解这个数据结构也不影响下面的论述
struct timer_event {
	int32_t handle;
	int session;
};

//定时器节点
struct timer_node {
	struct timer_node *next;
	uint32_t expire;
};

//定时器链表
struct link_list {
	struct timer_node head;
	struct timer_node *tail;
};

//层级时间轮
//存放所有定时器的地方
struct timer {
	struct link_list near[TIME_NEAR]; //最近的定时器
	struct link_list t[4][TIME_LEVEL];//更久远的定时器
	struct spinlock lock;           //全局锁
	uint32_t time;                  //当前滴答数
	uint32_t starttime;             //程序开始时间 绝对时间 时间戳,单位 s 秒
	uint64_t current;               //当前时间 相对时间 1cs 厘秒 =  10ms 毫秒
	uint64_t current_point;         //系统(pc)运行时间 相对时间 单位: cs 厘秒
};

上面定时器的基本数据结构了解了,再来看下面的函数, 基本思路是一样的。

……

阅读全文

层级时间轮 | skynet 定时器

skynet定时器

要解析一个程序代码,先了解数据结构,这是基础,再看函数。 拿skynet定时器举例子。

数据结构

//定时器事件 用于抛出定时器事件到消息队列里。理解这个数据结构需要先了解skynet的框架原理,
//不理解这个数据结构也不影响下面的论述
struct timer_event {
	int32_t handle;
	int session;
};

//定时器节点
struct timer_node {
	struct timer_node *next;
	uint32_t expire;
};

//定时器链表
struct link_list {
	struct timer_node head;
	struct timer_node *tail;
};

//层级时间轮
//存放所有定时器的地方
struct timer {
	struct link_list near[TIME_NEAR]; //最近的定时器
	struct link_list t[4][TIME_LEVEL];//更久远的定时器
	struct spinlock lock;           //全局锁
	uint32_t time;                  //当前滴答数
	uint32_t starttime;             //程序开始时间 绝对时间 时间戳,单位 s 秒
	uint64_t current;               //当前时间 相对时间 1cs 厘秒 =  10ms 毫秒
	uint64_t current_point;         //系统(pc)运行时间 相对时间 单位: cs 厘秒
};

上面定时器的基本数据结构了解了,再来看下面的函数, 基本思路是一样的。

……

阅读全文

利用时间轮实现定时器

理解定时器

适用场景

  1. 定时任务(每隔1s钟打印一次数据)
  2. 超时控制(xx分钟没有动作就断开连接)
  3. 频率限制(最快只能每5s调用一次API)

定时器常用的数据结构有如下几种:

  • 链表
  • 双向有序链表
  • 最小堆
  • 时间轮
  • 层级时间轮

链表

链表用于存储所有的定时器。每次都需要遍历链表,从里面找出过期的任务,简单粗暴不采用。

……

阅读全文

利用时间轮实现定时器

理解定时器

适用场景

  1. 定时任务(每隔1s钟打印一次数据)
  2. 超时控制(xx分钟没有动作就断开连接)
  3. 频率限制(最快只能每5s调用一次API)

定时器常用的数据结构有如下几种:

  • 链表
  • 双向有序链表
  • 最小堆
  • 时间轮
  • 层级时间轮

链表

链表用于存储所有的定时器。每次都需要遍历链表,从里面找出过期的任务,简单粗暴不采用。

……

阅读全文

利用云服务器搭建个人博客

vps选择

最近关注了一个vps推广网站。价格合适,于是买了一个128元/年的云服务器。既可以用来做代理,又可以搭建个人博客 配置是2G/1M/40G(运存/带宽/硬盘)

使用技术

  • nginx: 静态博客
  • v2ray: 代理
  • https + nginx
  • freenome: 域名
  • DNS解析
  • git: 拉去github静态博客

总结

整套流程走下来放在自己购买的服务器上才有这个网站属于自己的感觉, 有种满足感。之前部署在gitpage上的博客不准备撤销。这样两个域名都可以访问我的博客

……

阅读全文

利用云服务器搭建个人博客

vps选择

最近关注了一个vps推广网站。价格合适,于是买了一个128元/年的云服务器。既可以用来做代理,又可以搭建个人博客 配置是2G/1M/40G(运存/带宽/硬盘)

使用技术

  • nginx: 静态博客
  • v2ray: 代理
  • https + nginx
  • freenome: 域名
  • DNS解析
  • git: 拉去github静态博客

总结

整套流程走下来放在自己购买的服务器上才有这个网站属于自己的感觉, 有种满足感。之前部署在gitpage上的博客不准备撤销。这样两个域名都可以访问我的博客

……

阅读全文

Nginx | 给网站添加证书

Https

最近在购买的云服务器上把个人博客搭建起来了,实际上是hugo生成静态网页,nginx加载静态网页。现在只能通过http访问,缺少个https。 要搭建一个https的网站需要证书。之前在网上找的教程太麻烦,又是生成证书,又是放到指定地方。我想有个一键生成证书的软件或工具。功夫不负有心人,终于让我找到CertBot。

……

阅读全文

Nginx | 给网站添加证书

Https

最近在购买的云服务器上把个人博客搭建起来了,实际上是hugo生成静态网页,nginx加载静态网页。现在只能通过http访问,缺少个https。 要搭建一个https的网站需要证书。之前在网上找的教程太麻烦,又是生成证书,又是放到指定地方。我想有个一键生成证书的软件或工具。功夫不负有心人,终于让我找到CertBot。

……

阅读全文

Golang | http注解路由

Http服务器

Golang有一个很强大的官方http库了,使用上很方便。也有一些很强大的三方http框架, 比如gin,beego等等。 自以为,框架在提供便利,提升开发效率的同时,也限制了我们的想象力。 相对beego而言我更喜欢gin这样的简单高效框架,给我们提供了一些基础设施。剩下的有什么功能需要自己写进去就好了。

……

阅读全文