自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zilaishuichina的专栏

本博客所有代码仅供学习交流使用,请勿用于其他用途。转载请注明出处http://blog.csdn.net/zilaishuichina

  • 博客(54)
  • 资源 (14)
  • 收藏
  • 关注

原创 代码自动生成工具(三)-Xml读表代码自动生成工具

之前提到了一个工具类XmlReader这里我们实现一个可以对Xml文件,自动生成其对应的读表代码本工具需要boost库支持,本人用的是1.55.0首先人为约定两个xml结点属性名称的保留关键字:pk=“”,rk=“”pk的值是本结点的某一个字段的名字,用来表示本结点在其父结点中,采用map来管理,键值就是该字段的值rk的值是本结点中某两个字段的名字,用来表示本结点在其父结点中,采用rangmap来

2018-01-18 10:48:22 3711 2

原创 工具类库系列(十六)-rangmap

rangmap是一个对map的简单封装,用于实现对若干个互不重叠的闭区间的 增删改查我们通常会有这样的需求,比如:若干个IP地址的闭区间:127.0.0.50 -127.0.0.100,127.0.0.101-127.0.0.149,127.0.0.200-127.0.0.249,这个不同的ip区间可能是对应了3个不同的房间中的机器,每个区间对应一个房间现在需要搜索 某一个具体

2018-01-15 15:07:07 607

原创 工具类库系列(十五)-XmlReader

XmlReader是用来支持xml文件读取的一个工具类很简单,也就是封装一下boost的property_treeXmlReader.h#ifndef __XmlReader_h__#define __XmlReader_h__#include #include #include namespace common { namespace tool {

2018-01-15 14:18:31 1226

原创 代码自动生成工具(二)-miniproto的java库实现

前文介绍了miniproto,这里介绍其java库的实现1、容器先吐槽一下java的容器。java本着一切皆对象的思想,导致容器中不能放基本数据类型,只能放基本数据类型的封装类对象。也就是说List是非法的,List才合法。因此miniproto中对于array/set/map这种类型的字段来说,不可避免的会出现拆装箱操作,比较蛋疼。2、泛型再吐槽一下j

2017-06-25 16:32:43 870

原创 代码自动生成工具(二)-miniproto的c#库实现

前文介绍了miniproto,这里介绍其c#库的实现。Zigzag编码和Varint编码就不再赘述,可以参考miniproto的c++库实现。1、ProtoTool编解码工具类,该工具类针对不同数据类型,给出一系列的编解码功能实现。下面给出代码,对照代码做出注释说明。具体实现就不贴了,可以去下载完整项目。

2017-06-25 16:32:05 941

原创 代码自动生成工具(二)-miniproto的c++库实现

前文介绍了miniproto,这里介绍其c++库的实现1、Zigzag编码一个正负数转换的算法,可以将负数映射成正数,并且使得转换后的数字利于压缩0 --> 0-1 --> 11 --> 2-2 -->  32 --> 4对应代码实现: uint32 ProtoTool::Zigzag(int32 value) { uint32 res

2017-06-25 16:31:10 1063

原创 代码自动生成工具(二)-miniproto介绍

google的protobuf大家都知道,本人在使用的过程中,遇到一些protobuf不能满足本人实际开发需求的情况。因此实现了这个miniproto,有限的兼容protobuf的语法规则,完全兼容protobuf的编码规则。首先我们列一下 miniproto 都支持那些功能1、支持生成c++,c#,java,这3种语言的代码2、未支持反射(java不算)3、对于消息结

2017-06-25 16:30:19 1911

原创 数据库MySql类库系列(九)-DBServicePool

第七个工具类:DBServicePool是针对前文提到的DBService的一个管理器用于多线程环境下,可能需要创建多个DBService,使得每个线程可以独享一个所以有了这样一个DBService的管理器提供Start,Stop,用来运行/停止所有DBService对象提供Ping,用来维持所有DBService对象的心跳提供一个需接口Service,子类可以实现

2017-03-09 14:29:06 504

原创 工具类库系列(十四)-FileData

第十四个工具类:FileData用于文本文件读取/保存,以及在内存中修改文本文件内容。读取:ifstream保存:ofstream修改内容:以string类型,获取/设置,文本文件内容最大支持文件大小1M上代码:FileData.h#ifndef __FileData_h__#define __FileData_h__

2017-03-09 13:35:40 1435

原创 数据库MySql类库系列(八)-预处理执行Sql方式的示例

本文是对之前预处理执行Sql方式的示例程序TestDB基于前文的DBService,PrepareOperatorSelect,PrepareOperatorUpdate首先是数据表定义:一个简单的账号表,包括3个字段:帐号名(最长20个字符,主键),账号密码(最长20个字符),账号id(无符号整数,自增字段)sql如下:CREATE TABLE `account`

2017-03-07 13:14:21 1354

原创 数据库MySql类库系列(七)-PrepareOperatorSelect

第六个工具类:PrepareOperatorSelect负责处理:预处理执行sql方式下的,查找,以及获取查找结果的需求。用到了之前的DBOperator。提供主要的接口:1、BindSql:预处理带占位符的sql语句2、BindParameter,BindResult:绑定sql语句中占位符对应的参数,BindParameter用于绑定查询

2017-03-07 12:39:00 478

原创 数据库MySql类库系列(六)-PrepareOperatorUpdate

第五个工具类,PrepareOperatorUpdate负责处理:预处理执行sql方式下的,增、删、改的需求。用到了之前的DBOperator。提供主要的接口:1、BindSql:预处理带占位符的sql语句2、BindParameter:绑定sql语句中占位符对应的参数,这里使用了不定参数的方式,支持7种格式控制符:int%i

2017-03-07 11:41:35 336

原创 数据库MySql类库系列(五)-直接执行Sql方式的示例

本文是对之前直接执行Sql方式的示例程序TestDB基于前文的DBService,QueryOperatorSelect,QueryOperatorUpdate首先是数据表定义:一个简单的账号表,包括3个字段:帐号名(最长20个字符,主键),账号密码(最长20个字符),账号id(无符号整数,自增字段)sql如下:CREATE TABLE `account` ( `a

2017-03-07 10:47:27 746

原创 数据库MySql类库系列(四)-QueryOperatorSelect

第四个工具类,QueryOperatorSelect负责处理:直接执行sql方式下的,查找,以及获取查找结果的需求。用到了之前的DBOperator,主要是封装其ExecQuery接口。另外提供获取查询结果的相应接口:从结果集中取出一行数据:FetchResult。取出一行数据之后,在这一行数据中,取每个字段的值:GetColumn。(由于本人的业务需要

2017-03-06 18:25:59 632

原创 数据库MySql类库系列(三)-QueryOperatorUpdate

第三个工具类,QueryOperatorUpdate负责处理:直接执行sql方式下的,增、删、改的需求。用到了之前的DBOperator,主要是封装其ExecQuery接口。代码很简单QueryOperatorUpdate.h#ifndef __QueryOperatorUpdate_H__#define __QueryOperatorUpda

2017-03-06 18:07:39 463

原创 数据库MySql类库系列(二)-DBService

第二个工具类:DBService用于数据库服务类的基类。主要处理数据库连接的建立(Start),断开(Stop),维持心跳(Ping)。基于之前的DBOperator实现。该基类提供两个需接口,ProcessStart,ProcessStop,交由子类去实现子类自己的初始化工作,和释放工作。建立连接(Start)时,会断开现有连接(如果有的话,会先调用Pro

2017-03-06 17:59:40 4147

原创 数据库MySql类库系列(一)-DBOperator

第二个库:libdb,封装了MySql的c api第一个工具类:DBOperator,比较纯粹的,就是封装MySql的c api主要是为了提供一些更友好一些的接口,供上层逻辑使用封装了出错时的错误信息输出到log(log使用的是之前工具类库中的Logger)提供两类接口:1、直接执行sql的方式:直接执行sql的方式就是,每次都需要进行字符串拼接,用每一

2017-03-06 16:19:07 3589 1

原创 工具类库系列(十三)-ObjectSharedPtrMap2

第十三个工具类:ObjectSharedPtrMap2这是继ObjectMap之后,第三个Object对象管理类,管理的是对象的智能指针对象功能与上一个ObjectSharedPtrMap类似1、线程安全。2、多线程环境下:有多个线程在迭代,其他线程在删除时,迭代不失效3、多线程环境下:有多个线程在迭代,多个迭代互不干扰上代码:ObjectSha

2017-02-21 10:23:12 342

原创 工具类库系列(十二)-ObjectSharedPtrMap

第十二个工具类:ObjectSharedPtrMap这是继ObjectMap之后,第二个Object对象管理类,管理的是对象的智能指针对象并且同样确保:1、线程安全。2、多线程环境下:有一个线程在迭代,其他线程在删除时,迭代不失效上代码:ObjectSharedPtrMap.h#ifndef __ObjectSharedPtrMap_h__#def

2017-02-20 10:30:58 360

原创 工具类库系列(十一)-ObjectMap

第十一个工具类:ObjectMapObjectMap 是一个上篇提到的 objectid64 的一个idid映射关系表,由map实现该类用于需求中时常会出现的 1对1  或者 1对多 映射关系,比如:1对1:一个网络链接对象 对应 一个玩家对象, 一个玩家对象 也对应一个 网络链接对象1对多:一个玩家对象 对应 一个游戏公会对象同时实现了:1

2017-02-17 14:25:48 3200

原创 工具类库系列(十)-Object

第十个工具类:ObjectObject是作为很多类的基类来使用的用来实现提供给的每个类对象一个唯一的内存guid的功能,方便做mapObject封装一个无符号长整型的m_id,定义一个全局的object_guid,从1开始自增,在Object的构造函数中自增,保留0用来表示对象不存在在多线程环境下,为了保证object_guid自增的线程安全,用

2017-02-17 13:53:59 680

原创 工具类库系列(九)-ReflectEnum

第九个工具类:ReflectEnum用于枚举的反射,需要boost库spirit的支持C++是不支持的反射的,在一些日志输出的时候,输出一个枚举变量,只能输出这个变量当前的值,而这个值对应的那个枚举字符串是什么,就不好输出了,或者人肉反射,一长串的switch...case这个工具类,就是为了解决这个问题,可以根据枚举变量的值,输出对应的枚举字符串,增加输出内容

2017-01-13 11:36:33 462 1

原创 工具类库系列(八)-WinService

第八个工具类:WinService这是一个windows下用的工具类,用于将exe(通常是服务程序)注册成windows系统服务windows环境下运行的服务端程序,一般就会以系统服务的形式运行1、在无人值守的情况下,可以设置,出错后自动重启2、注销当前用户,进程不会被关闭,因为系统服务是运行在SYSTEM用户下的3、可以设置开机自动启动,维护方便,不用开机之后

2017-01-10 17:23:56 537

原创 工具类库系列(七)-Logger

第七个工具类:Logger就是用于输出日志的一个工具类,很简单,就是封装了一下boost库的log不熟悉boost的log库的同学,可能就需要提前熟悉一下本工具类,就是默认用exe的文件名比如“Test.exe”加上“_log”,组成一个文件夹名称“Test.exe_log”,在Test.exe的同级目录下,创建这个文件夹“Test.exe_log”,所有的

2017-01-09 16:46:49 1675

原创 工具类库系列(六)-TimeTool

第六个工具类,TimeTool用于秒精度的时间获取:距离一个参考时间所经历的秒数,用于时间戳以及计算两个时间戳,按照特定时间分割点分割后的差值比如:一般游戏项目中通常都会有这样的需求:某个任务,1周之内只能接取5次,周6早上6点算下一周开始,次数清零,某个活动,每月5号开启下一轮等等所以通常就会存在需要计算玩家的本次操作(比如申请接任务),距离

2017-01-06 19:34:49 1615

原创 工具类库系列(五)-Timer

第五个工具类,Timer用于毫秒精度的计时本来想直接用的是boost的timer但是boost的timer调用的其实就是clock()而clock在多核多线程的环境下,如果需要计时的代码段是多线程并发执行的话,计算出来的时间是有很大偏差的所以就只能自己实现一个windows下本身也有QueryPerformanceFrequency跟Quer

2017-01-05 15:28:11 368

原创 代码自动生成工具(一)-Csv读表代码自动生成工具

之前提到了自定义的Csv格式的表格读取的一个工具类CsvReader这里我们实现一个可以对任意符合我们人为规定的格式的Csv文件,自动生成其对应的读表代码本工具需要boost库支持,本人用的是1.55.0这里首先定义Csv中支持的几种列类型:FieldType:包括有/无符号整数,小数,字符串,子结构enum FieldType{ FT_int = 0,

2017-01-05 13:54:24 2244

原创 工具类库系列(四)-CsvReader

第四个工具类:CsvReaderCsvReader是用来支持读取Csv表格用的Csv格式其实就是一个有固定格式的txt,一行每一列用英文','隔开游戏项目中,很多游戏静态表。策划提供的是Csv表格,可以用Excel编辑方便。客户端Unity也倾向于读取Csv表格,纯文本,格式简单,读取方便然后为了读取更方便,我们人为规定了Csv前3行的内容有

2017-01-04 14:34:35 13739

原创 工具类库系列(三)-IniReader

第三个工具类:IniReader就是读ini配置文件的一个工具类,很简单,就是封装了一下boost库的ptreeIniReader.h#ifndef __IniReader_h__#define __IniReader_h__#include #include namespace common{ namespace tool{ class Ini

2017-01-04 11:45:41 2719

原创 工具类库系列(二)-ExePath

第二个工具类:ExePath其实不是一个类了,就是一个全局函数,用来获取exe的当前路径项目中很多比如读取config,读取资源,生成log,都需要exe的当前路径作为参考这个功能在windows/linux下有不同的实现方式:windows下面主要使用GetModuleFileNamelinux下面主要使用readlink上代码:ExePath.h

2017-01-04 10:48:56 1116

原创 工具类库系列(一)-StringTool

好久没写了,最近闲了下来,把这段时间的代码整理整理,将常用的代码按功能整理成一些静态库,便于以后复用今天是第一个库:libtool,其实就是一些工具类的集合第一个工具类:StringToolstd::string已经很强大了,但是在实际项目中,还是会遇到一些需求,需要用string提供的接口组装一些字符串相关的功能,整理如下1:将一个字符串的首字母大

2017-01-03 20:09:43 3184

原创 游戏开发(三)——WIN32 黑白棋(三)——游戏画面的现实

这是第三部分:画面的显示这部分其实就比较简单的,说白了就是api的堆砌。主要了解下windows的消息机制,以及怎么画图主要是分别封装了下对棋盘,棋子,以及当前轮到谁,当前比分是多少,就是游戏画面上不同的部分的绘制。void DrawReversiBoard();void DrawReversiPieces(EnumReversiPiecesType

2014-08-06 22:10:34 2172

原创 游戏开发(三)——WIN32 黑白棋(二)——AI

今天是第二部分:玩家和AI玩家主要是实现悔棋的功能AI主要是搜索、最大最小算法,枝剪算法1、每一步落子的步骤,为了可以悔棋typedef struct ReversiStep{    ReversiBitBoard m_LastMap;    ReversiStep& operator= (const ReversiStep& temp)    {

2014-08-06 16:51:13 7703

原创 游戏开发(三)——WIN32 黑白棋(一)——棋局逻辑的设计

今天以黑白棋为例,开始给一个win32的小游戏设计,这里打算分3部分介绍1、棋局的现实2、AI的现实3、游戏画面的现实提供一下完整项目下载其中第一部分为黑白棋游戏的主要逻辑:1、棋盘,以及棋盘上的棋子的存储形式。这里用到了位图。2、是否可以落子的判断(黑白棋是只有你落子的位置,在横竖斜八个方向中任意一个方向,能吃掉对方的子,你才可以落在该位置,八个方向都

2014-07-28 20:14:49 7464 1

原创 自己的底层代码库(十八)——一些工具函数代码

之前的博文中一些提到但是没有单独列出来提供头文件的 函数。MemOffset,ContainerOfTEMPLATE_COMMA这里具体给一下:tool.h#ifndef _tool_h_#define _tool_h_#include //计算结构成员在结构中的偏移量#define MemOffset(ClassName, Memb

2014-07-17 11:49:21 944

原创 游戏开发(二)——控制台 俄罗斯方块

俄罗斯方块游戏设计中主要需要注意的几点:1:依然是坐标的定义:定义为左上角为(0,0),向右为x正方向,向下为y正方向2:游戏画面是分两个区域的。左边是游戏区域,就是俄罗斯方块下落的区域。右边一个小的显示下一个方块是什么的区域。但是,方块出现并开始下落时,并不是一个方块直接出现在画面顶部,而是从最上面一行开始,一行一行的逐行落下来。比如一个竖长条,并不是一出现就直接占了4行

2014-07-15 11:40:37 3382 4

原创 游戏开发(一)——控制台 贪吃蛇

贪吃蛇游戏设计中主要需要注意的几点:1:坐标的定义:定义为左上角为(0,0),向右为x正方向,向下为y正方向2:蛇的设计,蛇身:m_body,这里用的是链表(是之前写好的双链表),一个节点就是蛇身的一节每节蛇身的属性包括x,y坐标:column_x,row_y,x表示在地图上的第几列,y表示在地图上的第几行蛇有一个属性叫朝向,也就是当前在往上、下、左、右的哪个方向移动:

2014-07-09 14:42:21 3090

原创 自己的底层代码库(十七)——随机数池

实际开发过程中,可能会遇到这样的需求:在0到x范围内,生成n(n 这里给出一个简单的实现,其实就是以空间换时间的。定义长x的数组,对这个数组采用洗牌法打乱顺序,然后顺序的取前n个。Rand()一下则为重新洗牌。TRandPool.h#ifndef _TRandPool_h_#define _TRandPool_h_#include #incl

2014-07-09 12:27:13 1627

原创 自己的底层代码库(十六)——数组模板

这里放上一个数组模板,主要是封装了一下一维数组,和二维数组的

2014-07-09 12:19:15 1395

原创 自己的底层代码库(十五)——对象队列

这也参照对象池的设计思想,队列实际上就是一个对象池但是队列没有对象池的malloc,free,只有PushObj,PopObjm_Used列表只能先进先出,不能随机访问,不能遍历它具有和对象池一模一样的分配子TObjectAllocator,队列结点由Allocator动态分配直接上代码TObjectQueue.h#ifndef _TObjectQueue_

2013-11-04 14:25:49 600

MiniProto2.0

miniproto2.0。 有限的兼容protobuf的语法规则 和 编码规则。包括protobuf2.0和3.0的编码规则。 实现proto结构的序列化、反序列化功能。 代码生成工具,需要boost库支持(主要用了spirit库做文本解析),本人用的是boost.1.64.0。 生成后的代码,仅需要miniproto自身提供的lib(对应c++)、dll(对应c#)、jar(对应java),不需要其他第三方库。 完善了1.0的代码,增加支持更多的数据类型和容器类型 详细介绍请参考https://blog.csdn.net/zilaishuichina/article/details/73088878

2018-06-06

Xml读取代码自动生成工具

本工程用于xml文件的读取代码的自动生成 详情请参阅http://blog.csdn.net/zilaishuichina/article/details/79089392

2018-01-18

Csv读取代码自动生成工具(2.0)

本工程用于特定格式的csv文件的读取代码的自动生成 详情请参阅http://blog.csdn.net/zilaishuichina/article/details/54020204

2018-01-15

MiniProto1.0

本项目暂命名miniproto1.0。 有限的兼容protobuf的语法规则 和 编码规则。包括protobuf2.0和3.0的编码规则。 实现proto结构的序列化、反序列化功能。 代码生成工具,需要boost库支持(主要用了spirit库做文本解析),本人用的是boost.1.64.0。 生成后的代码,仅需要miniproto自身提供的lib(对应c++)、dll(对应c#)、jar(对应java),不需要其他第三方库。

2017-06-25

Csv读取代码自动生成工具

本工程用于特定格式的csv文件的读取代码的自动生成 详情请参阅http://blog.csdn.net/zilaishuichina/article/details/54020204

2017-01-09

黑白棋(win32实现)

以黑白棋为例,做的一个win32的小游戏。 压缩包里是详细代码,项目是vs2010的,其他IDE请自行创建项目然后添加源文件。 详细介绍可以参考我的博客:http://blog.csdn.net/zilaishuichina/article/details/38235313 注:代码仅供学习交流使用,请勿用于其他用途。

2014-08-06

Apache内存池内幕

1. 内存池概述 2 2. 内存池分配结点 3 3. 内存池分配子ALLOCATOR 6 3.1. 分配子概述 6 3.2. 分配子创建与销毁 8 3.3. 分配子内存分配 10 3.4. 分配子内存释放 13 3.5. 分配子内存管理流程 15 4. 内存池 16 4.1. 内存池概述 16 4.2. 内存池的初始化 19 5. APACHE内存池中分配结点补充说明 20 6. 内存池中CURRENT_FREE_INDEX的作用的解释 23 7. 内存分配子的CURRENT_FREE_INDEX成员作用 24 7.1. 背景 24 7.2. 历史 24 7.3. CURRENT_FREE_INDEX与MAX_FREE_INDEX的作用 24 7.4. 关于CURRENT_FREE_INDEX溢出的问题 25 7.5. 溢出问题的解决 27 8. 简单应用 27

2012-11-27

STL源码剖析.pdf

STL源码剖析(The Annotated STL Sources)

2010-03-05

BS界面规范.pdf

本文主要描述B/S应用程序开发中前台界面的规范,从显示设计和交互设计等方面阐述如何设计开发对用户友好的界面。

2010-03-05

PC游戏编程人机博弈

一、引言 二、棋盘表示 三、走法产生 四、基本搜索技术 五、估值基础 六、实例研究 七、搜索算法的改进 八、估值核心的优化 九、其他重要话题 十、五子棋对弈的程序实例

2010-03-05

MYSQL 5.1 参考手册

这是MySQL参考手册的翻译版本,关于MySQL参考手册,请访问dev.mysql.com。

2010-03-05

tc图形函数详解

tc图形函数详解.chm<br>来源:IT浪子 收集整理:Andy 完成于2002.10.19<br>Http://ChinaGPA.com GPA之家<br>如有问题欢迎E-mail:zhgpa@sohu.com给我<br>Copyright©GPA工作室 Andy 本站文章归本站所有<br>如果转载请注明出处 ChinaGPA.com GPA工作室 Andy<br>

2008-02-26

Visual C++角色扮演游戏程序设计

[Visual C++角色扮演游戏程序设计].pdf

2008-01-30

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除