C++
one bite
这个作者很懒,什么都没留下…
展开
-
支持三态CheckBox的 MFC TreeCtrl 控件扩展
前言: 如果选择 MFC 来做界面, 那么, MFC 中各种功能有限的控件一定让你蛋疼不已. 比如, TreeCtrl 的 CheckBox 居然不支持三态以及 CheckBox 居然不能垂直居中对齐. 下面我将为大家介绍如何实现一个支持三态 CheckBox 的 TreeCtrl 控件, 谨作抛砖引玉.首先, 从 CtreeCtrl 派生一个类, 姑且命名为 CExTreeCtrl.原创 2012-08-26 19:57:36 · 2656 阅读 · 2 评论 -
C++ 消息循环
消息循环是非常有用的工具,各平台都能见到它的身影,比如 CFRunLoop、Android Looper、Windows 消息循环等。有时候出于一些原因,我们并不想使用平台相关 API 或者三方库,就想自制一个简易的消息循环将就用,该怎么实现呢.........原创 2022-06-10 13:49:36 · 1426 阅读 · 0 评论 -
C++ Random Pick with Weight
在做五子棋 AI 的时候,遇到要根据权重从一组数里边选出一个这个问题。这个问题恰好也是 leetcode 第 528 道题,可以自己写算法解题,幸运的是,标准库就有这个功能:#include <random>int random_pick(double const* w, int k) { std::random_device rd; return std::discrete_distribution<int>{w, w+k}(rd);}自己写大概如下原创 2020-10-13 23:03:12 · 298 阅读 · 0 评论 -
C++ Dirichlet 分布
在做五子棋 AI 的时候,遇到一处要使用 dirichlet 分布。查阅了一下资料还挺复杂的,不过好在可以使用 gamma 分布来生成:#include <random>void dirichlet(double* out, int k, double a) { std::gamma_distribution<double> gamma(a); std::random_device rd; double *y = alloca(sizeof(doub原创 2020-10-13 21:50:31 · 414 阅读 · 0 评论 -
LMAX Disruptor
LMAX Disruptor 已经是好几年前的框架了,无论是官方还是网上已经有不少其原理分析的文章了,都2020年了,为什么还要写关于它的文章呢?几年前了解到 LMAX Disruptor 架构后,我便产生了将它移植到 C++ 上的想法。一方面是想看如此高性能的框架,移植到 C++ 会不会性能更高;另一方面是想通过源码移植了解它架构中更为基本的东西。后来虽然移植也完成了,文章也看了,但我发现它框架中最基本的东西依然没有理解。网上的文章,包括官方的,对于其无锁队列设计的解析,都是围绕它本身的结构(ring原创 2020-09-30 00:40:37 · 810 阅读 · 0 评论 -
五子棋AI - 局面状态
上一篇文章已经有了蒙特卡洛树搜索算法了,再加上五子棋的局面状态的话,基本就是一个简单的 AI 了。这篇文章主要介绍如何实现局面状态。根据五子棋的玩法,我认为五子棋的局面状态应该包含如下数据:当前行棋方 当前局面是否终结 输赢结果 当前棋盘的状态(棋子位置)对于行棋方的表示,我采用 1 表示黑方,-1 表示白方,这样我就可以使用 player = -player 来交换行棋方(有点符...原创 2020-10-12 00:21:04 · 1655 阅读 · 13 评论 -
五子棋AI - 蒙特卡洛树搜索
动机自高中时代做了一个带简单AI的五子棋游戏后,一直以来实现一个更加厉害的五子棋AI算是我的小目标。之前也尝试过使用 MinMax 算法,最终结果不甚理想。当然并不是算法问题,而是搭配这个算法需要许多领域知识,这些知识我并不了解,以至于结果与我的期望相去甚远。我心目中满意的五子棋AI是这样的:不需要像 MinMax 那样去编写一个局面评估函数 算法看上去很简单很傻也没关系,但可以通过...原创 2019-12-17 19:16:14 · 3724 阅读 · 3 评论 -
C++ 二进制转BCD码
二进制转BCD码, 进而可以转为十进制字符串表示.templatestd::vector bcd( const std::bitset& bits ){ std::vector buf; buf.push_back( 0 ); for( auto i = bits.size(); i-- != 0; ) { int carries0 = bi原创 2017-02-09 18:14:38 · 2104 阅读 · 2 评论