- 博客(11)
- 资源 (13)
- 问答 (1)
- 收藏
- 关注
原创 函数对象
重载了()操作符的类对象就称为函数对象,它具有函数调用类似的行为,如下所示:class Test20630{public: void operator()(int a, int b) { if (a > b) cout << "test20630 a>b" << endl; else if (a < b) cout << "test20630 a<...
2020-06-30 18:58:52 119
原创 模板的特化
通过特化可以让模板适用一些更加特殊的情况,增强模板的可用性。简单测试代码如下:template<typename T>class Test20629{public: void display(T para) { cout << "para " << para << endl; }};template<>void Test20629<int>::display(int para)...
2020-06-29 17:45:11 124
原创 任务系统
任务系统是指游戏里面的接取任务,执行任务和完成任务的系统。一个任务可以看做成一个事件,一个事件由很多个分支组成,一个分支又包含条件部分和执行部分(当条件部分都通过时,就会跳转到执行部分执行)。当访问npc时,就会根据就根据当前任务的状态而去执行某个分支,一般来说某个时刻只有0个或者1个分支能够满足条件。...
2020-06-28 19:00:37 835
原创 查找
1.查找局部最小的数class Solution {public: int getLessIndex(vector<int> arr) { int n=arr.size(); if(n==0) return -1; else if(n==1) return 0; else if(arr[0]<arr[1]) return 0; else if(arr[n-1]<arr[n-2]) retur...
2020-06-27 12:03:09 150
原创 各种排序算法
1.冒泡排序整个排序过程为大的元素不断往后交换,每一轮排序排好一个元素。class BubbleSort {public: int* bubbleSort(int* A, int n) { int i=0; while(i<n-1) { int j=0; while(j<n-i-1) { if(A[j]>...
2020-06-23 22:47:16 196 1
原创 小技巧(7)打包消息
当遇到字段多且可能在多个地方需要用到的时候把它封装成一个函数会显得清晰简洁的多。以proto消息为例:void pack_gamedata(TestData& data){ data.set_test1(×××); data.set_test2(×××); ...}在需要用到地方调用即可:TestData test;pack_gamedata(test);...
2020-06-20 23:20:46 179
原创 类成员变量的初始化
当一个类拥有一个类成员,会先对类成员进行构造,然后再构造自己。class Test206191{public: Test206191() { cout << "construct 6191" << endl; }};class Test20619{public: Test20619() { cout << "construct 619" << endl; }pr...
2020-06-19 20:25:26 200
原创 限时类活动开发
限时活动是指在某段时间内存在的活动,比如用于公告一些新道具的产出,累积充值或者累积登陆送奖励,限购礼包,完成某些任务给奖励等。这种限时类活动可以做成一个通用的功能,策划只需要配置,就可以开启活动。实现方式如下://限时活动管理器class LimitActivMgr{};//公告类限时活动,用于打广告class LimitActivBase{};//累积类限时活动,比如累积充值多少两金子就送多少两金子class LimitActivAccu :public Limi.
2020-06-14 22:08:23 294
原创 环形队列
在游戏服务器中,很常见的做法就是把消息放进循环队列中,使用循环队列来管理消息。一个简单的循环队列实现如下:template <typename T, int QueueSize = 10> //非类型模板形参class MyCircleQueue{public: MyCircleQueue() { front = rear = 0; } void EnQueue(T x); void DeQueue() { ...
2020-06-11 18:58:03 169
原创 小技巧(6)巧用宏定义
大段的宏定义可能会降低代码的可读性,但是适当使用宏定义可以节省代码量,让代码更加简洁。比如对于定义多种属性的能力模块而言,这样使用宏定义会让更加清晰和简洁://声明一种属性以及获取改属性值#define ATTR_DECL(attr) \ protected: \ unsigned int _##attr = 0; public: \ unsigned int attr() const { return _##attr; }//重置一种属性#defin...
2020-06-11 15:52:53 198
原创 套装计算方法
游戏里面有很多涉及套装效果的功能,比如8星套装,当玩家拥有一定数量的8星或9星或10星装备,比如5件时,这时就会获得一个额外的属性加成,8星套,9星套,10星套加成的效果是不一样的。所以需要计算玩家当前是几星套,然后给玩家增加相应的属性加成。计算套装等级的方法如下://遍历玩家身上的装备std::map<int, int> equip_map; //装备位置索引,星星数for (int i = 0; i < 5; ++i) { equip_map[i] = i位置索引..
2020-06-03 18:53:40 647
qt 串口通信 write 写16进制数据
2015-11-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人