摘要:
boost库很强大,我用的比较多的库就是boost::shared_ptr、boost::asio等。现在我写的页游服务器中大量使用了boost中的类和方法,但是由于系统本身自带的boost版本比较老,所以需要自己手动编译最新版本的boost。具体步骤如下:(在这里我们以boost1.53版本为例) (1).到boost官网http://www.boost.org/下载最新版本的boost源码包,具体地址http://sourceforge.net/projects/boost/files/boost/1.53.0/boost_1_53_0.zip/download。 (2).进入到下... 阅读全文
摘要:
B树是一种多路平衡树,我根据《算法导论》中的算法描述实现了C++版本的BTree。关于BTree的各种属性看这里吧,还有别人的实现版本,看这里。我记得书中并没有给出删除的算法,这个部分我是根据书中的描述自己实现的。完成后自己进行过简单的测试,好像没有什么问题。总共是两个文件BTree.h和Test.cpp,BTree的实现在BTree.h文件中。Test.cpp是测试案例。具体代码如下: 1 #ifndef __BTREE_H__ 2 #define __BTREE_H__ 3 4 #include <iostream> 5 6 typedef struct _tagBT... 阅读全文
摘要:
平衡二叉树是一个重要的数据结构,它有很均衡的插入、删除以及查询性能(时间复杂度都是O(logn))。Linux2.4以前的内核中,虚拟内存管理中用的容器就是AVL Tree,之后的版本都改成了RBTree即红黑树。AVL Tree对平衡的要求是比较严格的,它要求左右子数之间的长度差不能大于1,也正由于它的严格导致了AVL Tree的统计性能没有RBTree好。AVL Tree在插入或者删除节点时候出现不平衡情况,根据具体情况进行一次或者多次单旋或者双旋就可以使整棵树达到平衡。具体的旋转规则看这里,删除节点的算法看这里。下面是我根据AVL树的规则用C++实现的代码: 1 #ifndef ... 阅读全文
摘要:
在我做的第一个页游项目中,服务器使用了插件的机制,但是当时的插件都是用C#写,而且如何实现的也不是很清楚。之后的几个页游项目都是自己一个人包揽服务器部分,所以一直没有写插件的需求。下一个页游项目服务器这边需要多人合作,因此我想把其他模块都独立的做成插件的模式,目前也是在探索阶段。通过网上资料查找以及自己的整理,实现了一个简单版本的插件机制。实现代码如下: 文件Object.hpp中实现了所有插件类的基类,所有插件都要继承该类。 1 #ifndef __OBJECT_HPP__ 2 #define __OBJECT_HPP__ 3 4 class Object 5... 阅读全文
摘要:
红黑树是一种有序的平衡二叉树,STL中的map和set容器的底层实现就是红黑树,在《STL源码剖析》中有另一种实现方式。不过STL中的实现相对来说晦涩难懂,而《算法导论》中的算法则比较清晰易懂。这里的这份实现就是《算法导论》中STL算法的一种C++实现。关于红色树的特性以及规则这里还有这里都有详细描述。下面就是我的实现代码: 1 #ifndef __RBTREE_H__ 2 #define __RBTREE_H__ 3 4 #include <iostream> 5 const int RED = 0; 6 const int BLACK = 1;... 阅读全文
摘要:
第1章 用于网络编程的面向对象框架1.1 面向对象框架综述:机会主义复用:把有用的代码复制到自己的程序中。系统化复用:创建并应用多用途的软件架构、模式、框架和组件。1.2 比较各种软件开发和复用技术: 1.2.1 比较框架和类库:框架和类库在实践的应用中时互补的技术。框架给程序提供基础性的结构。但框架聚焦于特定领域,不能满足最广泛的应用需求,因此在框架的应用中结合类库。 1.2.2 比较框架和组件:框架和组件之间的关系是高度协作的,谁也不从属于谁。 1.2.3 比较框架和模式: 1.2.4 比较框架和模型集成式计算:1.3 将框架应用到网络编程:1.4 周游ACE框架:1.5 实例:网络化日志 阅读全文
摘要:
第一章 高级碰撞检测1.1 不规则形状对象的碰撞测试:1.1.1 位图用于碰撞检测:函数原型如下:myBitmapData.hitTest(firstPoint : Point, firstAlphaThreshold : uint, secondObject : Object, secondPoint : Point, secondAlphaThreshold : uint)测试两个位图:if(bmpd1.hitTest(new Point(bmp1.x, bmp1.y), 255, bmpd2, new Point(bmp2.x, bmp2.y), 255)){//bitmap is to 阅读全文
摘要:
第0章 设计课题、中间件方案、ACE为了降低耦合性,降低复杂度,提高复用性,ACE设计成了层次化体系结构。ACE被设计为两层:ACE OS Adaptation层和C++ Wrapper Facades。(1).ACE OS Adaptation层:封装了原始的基于C的OS API,隐藏了和平台相关的细节。展示了统一的OS机制接口,供高级的ACE层使用。(2).ACE C++ Wrapper Facades层:将OS Adaptation层提供的功能用C++类来进行封装。方便使用者调用。(3).ACE Framework层:扩充了ACE C++ Wrapper Facades类,用高级的并发和 阅读全文
摘要:
第三章 三角学3.1 基本三角函数的计算:角的正弦值 = 对边 / 斜边角的余弦值 = 邻边 / 斜边角的正切值 = 对边 / 邻边3.2 角度与弧度的相互装换:弧度 = 角度 * Math.PI / 180角度 = 弧度* 180 / Math.PI3.3 向鼠标旋转://substitute mouseX, mouseY with the x , y point to rotate to dx = mouseX - sprite.x; dy = mouseY - sprite.y; spirte.rotation = Math.atan2(dy, dx) * 180 / Math.PI;3 阅读全文
摘要:
第二章 有意义的命名2.2 名副其实:变量、函数或者类的名称要说明他们的目的。2.3 避免误导:避免使用关键字,避免使用0 o 1 l 等。2.4 做有意义的区分:要区分名称,就要以读者能鉴别不同之处的方式来区分。2.5 使用读得出来的名称:要使用恰当的英语词,而不是傻乎乎的自造词。2.6 使用可搜索的名称:避免使用单字母的名称,或者直接使用数字。2.7 避免使用编码:带编码的名称通常不便发音,容易打错,更容易让人混淆,而且给人增加了解码的负担。(比如:匈牙利命名法)2.8 避免思维映射:2.9 类名:类名应当是名词或者名词短语。类名不应当是动词。2.10 方法名:方法名应当是动词或者动词短语 阅读全文