自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 资源 (13)
  • 问答 (1)
  • 收藏
  • 关注

原创 智力题

1.涂色n*m的格子,选一种颜色涂色,不能相邻。考虑到n*m相乘奇数和偶数的情况。class Paint {public: int getMost(int n, int m) { return (n * m + 1) >> 1; }};2.赛马[1,2,3],[1,2,3],3尽可能多胜出class HorseRace {public: int winMost(vector<int> oppo, vector&l...

2020-07-29 23:01:33 113

原创 多连接高并发

说起并发就绕不开sokect编程,sokect编程是实现并发的基石,一个简单的socket编程实例如下所示:服务端:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <arpa/inet.h>#include <sys/socket.h>#include <netinet/in.h>

2020-07-28 18:54:30 220

原创 位运算

1.布隆过滤器(k个哈希函数)2.交换class Swap {public: vector<int> getSwap(vector<int> num) { num[0]=num[0]^num[1]; num[1]=num[0]^num[1]; num[0]=num[0]^num[1]; return num; }};3.比较class Compare {public...

2020-07-26 16:21:42 123

原创 大数据

知识点:1.哈希函数(MD5,SHA1)2.map_reduce和hadoop(1)map阶段,分发(2)reduce阶段,合并注意点:1.备份的考虑,分布式存储的设计细节,以及容灾策略。2.任务分配策略与任务进度跟踪的细节设计,节点状态的呈现。3.多用户权限的控制。相关应用场景:主要是利用分而治之的方法,要么分到不同的机器上,要么分配到不同的文件中。常用hashmap和bitmap,难点在于通信,时间和空间的估算上。1.使用map_reduce方法统计单词出现频

2020-07-26 15:52:59 110

原创 互斥锁

互斥锁也有现成的实现,互斥锁的操作流程和读写锁类似,区别在于互斥锁的情况更为简单,而读写锁要稍微复杂一些,因为读写锁涉及到读和写两种情况。互斥锁主要用于对玩家数据就是修改操作时等,但是一般也不会直接在服务器中被使用,而是先进行一下封装:class MyMutexLock{public:MyMutexLock(int kind = PTHREAD_MUTEX_FAST_NP) { pthread_mutexattr_t attr; ::pthread...

2020-07-24 18:12:00 133

原创 单例设计模式

单例模式可以说是一种比较简单,并且比较普遍的设计模式了,一般的单例模式可以这样写:class Singleton{public: static Singleton* get_instance() { if (instance) { return instance; } instance = new Singleton; } void test() { cout <&...

2020-07-24 16:50:38 95 1

原创 读写锁

pthread.h系统头文件里面包含一个的读写锁,使用起来较为简单,只需要调用pthread_rwlock_init初始化一下后即可使用。读写锁在游戏服务器中用的也比较多,主要用于连接任务管理里面添加子连接,删除子连接,获取一个子连接等。不过一般来说不会直接使用系统中的读写锁,而是先进行一层封装:class MyRWLock{public: MyRWLock() { pthread_rwlock_init(&_lock); } ~MyRWL...

2020-07-23 18:32:24 140

原创 排行榜

排行榜

2020-07-23 08:55:39 568

原创 弱网处理及断线重连问题

一般来说,手游的网络没有端游网络稳定,当网络条件不好时,会给服务端处理流程和客户端表现造成一定的影响。可以采用心跳检测的办法来处理。还可以给tcp包标记序号的方式来处理。https://blog.csdn.net/blog_lee/article/details/50162023https://www.cnblogs.com/hongmao/p/3450030.htmlhttps://m.sohu.com/a/160633210_483399...

2020-07-21 17:14:05 660

原创 心跳包

心跳包是指不断发送消息通知另外一方自己"还在",在游戏开发中,一般使用“时间同步包”充当心跳包,检测游戏时间的同时,检测一下对方是否存在。客户端定时发送或者在有消息发送时就会发送时间同步包,服务器收到这个包后会记录一下标记位,当服务器定时检测标记位时间到达时先检测标记位,如果标记位已经被记录,则会清空标记位和计数器,然后会回一个包含服务器时间的返回包。如果标记位没有被记录,则计数器加1,等待下次服务器定时检测标记位时间到来。当计数器到达一定数值时,标记位还没有被记录,说明客户端已经不在了,这时可以释放连接,

2020-07-21 16:13:06 687

原创 三种工厂模式

工厂模式分为三种类型,分别是简单工厂,工厂方法和抽象工厂。这三种类型的实现都和虚函数分不开。一.简单工厂class Product{public: virtual int fun(int a, int b) = 0;};class ProductAdd : public Product{public: int fun(int a, int b) { return a + b; }};class ProductMul : public Pro...

2020-07-20 18:02:37 155 1

原创 分布式部署

为了更好的利用硬件资源,并对硬件资源进行统一调度,一个游戏区所具备的服务器进程不可能跑在一台服务器上面的,一般而言这些服务器进程运行存在不同的服务器上,那么它们之间怎么通信并且区分开来呢?通过一个xml配置即可实现:<config> <server id="1001" type="1" name="superserver" ip="192.168.166.125" port="30101" ext_ip="192.168.166.125" ext_port="30101"/&..

2020-07-18 20:32:26 356

原创 TCP服务端任务线程池

前面的文章中提到游戏服务器中存在很多的不同种类的线程,多个同类线程组成为线程池,不同的线程池组合在一起形成更大的线程池。一种线程池可以抽象为以下的类结构:class ThreadPool{public: struct CallBack { virtual void exec(Thread* t) = 0; virtual ~CallBack(){} }; typedef vector<Thread *> Cont...

2020-07-18 20:13:11 526

原创 游戏服务器进程

游戏服务器中的进程就是前文游戏服务器架构中所述的各类服务器进程了,这类进程一般采用单例设计模式,里面会包含一个main函数,是进程主程序的入口。在main函数中会做一些初始化操作,比如初始化日志,初始化一些全局参数等,然后再去执行它父类的init函数。...

2020-07-16 12:27:08 581

原创 线程

c++11之前,c++中并没有标准的线程库,一般用的是pthread库。pthread的一个简单例子如下:#include <iostream>#include <pthread.h>using namespace std;#define MAX_NUM 5void *say_hello(void *args) //线程回调函数{int *tmp = (int *)args;cout << "hello thread:" <...

2020-07-16 10:18:35 125

原创 链表

1.环形链表插值从小到大环形列表class InsertValue {public: ListNode* insert(vector<int> A, vector<int> nxt, int val) { if(A.size()==0){ ListNode *node=new ListNode(val); node->next=node; return node; ...

2020-07-14 09:14:15 159

原创 计数器管理

计数相关的功能在游戏中随处可见,计数管理也就变得十分重要了。

2020-07-13 18:40:08 169

原创 副本创建流程

副本创建流程

2020-07-10 11:51:02 681

原创 字符串

2.词语变形假如输入为"abc",3,"bca",3,则输出为trueclass Transform { public: bool compareab(int a[],int b[],int minl) { int len=0; for(int i=0;i<256;++i) { if(a[i]!=0&&a[i]==b[i]) ...

2020-07-10 00:22:39 146

原创 函数模板

函数模板可以给同型函数的实现带来便利性,一个简单的例子如下:template<typename T>void test2078(T x, T y){ cout << x + y << endl;}int main(){ test2078<int>(1,2); //此处的<int>也可以省略,会自动进行类型推导 test2078(1.2, 2.3); return 0;}函数模板还可以结合一些稍...

2020-07-08 17:14:57 91

原创 日常任务管理

日常活动是游戏活动的主要循环,每天都可以接任务做任务,完成后一般会获得活跃度。

2020-07-08 10:29:24 209

原创 背包系统

背包是每个游戏不可或缺的一部分,背包可以用来装道具,还可以用来装装备(装备背包)等。

2020-07-06 19:37:28 618

原创 栈和队列

1.可查询最值的栈定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。方法一.class Solution {public: stack <int> stackdata; stack <int> stackmin; void push(int value) { stackdata.push(value); if(stackmin.empty()||value<stackmin.top())...

2020-07-06 09:12:42 107

原创 道具管理

道具是游戏中一个很基本的元素,一件装备,一锭银子,一个坐骑,一种图鉴等等都属于道具,广泛的来说,能够放在背包里面东西都是道具,这里的背包是广义上的背包,包括主背包,仓库,装备背包等等,关于背包这一块将在后续内容中单独介绍。道具数据结构定义可以用一个proto来表示:package boj;message object_data{ optional uint32 baseid = 1;//道具的品类标识id,标识这一类道具 optional uint32 thisid = 2;...

2020-07-06 00:42:58 410

原创 唯一id

道具:游戏中有很多道具,包括装备,物品等,生成一个独一无二的道具id很重要,一种生成算法为://预留1位给lua客户端,13位区号,7位场景号,30位秒数,13位同一秒内调用次数unsigned long obj_id = (zoneid << 50) + (serverid << 43) + (time << 13) + countnum;玩家:npc:...

2020-07-03 11:58:28 223

原创 移动速度

一般来说,角色移动的时候会给服务器发送move消息,当服务器收到消息后,调用on_move函数,该函数对不能移动的情况进行了分析,如果不能移动,比如被施加了禁止移动的技能,就会发送消息通知客户端,当前角色无法移动。也就是说默认情况下,角色是可以移动的,某些特殊情况下,服务器会发消息通知客户端禁止移动。 游戏里面,玩家移动角色的时候,一般来说会有一个最小移动距离,称为一个格子。移动...

2020-07-02 20:33:30 1715

原创 角色及npc状态管理

游戏里面的角色或者npc会有各种各样的状态,所以需要抽象出一个状态管理器来管理这些状态。状态管理器如下:class StateMgr{public: StateMgr(SceneEntryPk* owner) : _owner(owner) {} ~StateMgr(){} void set(...); //设置一种状态,参数包括状态编号,过期时间时间,是否通知等 void reset(...);private: SceneEntryPk...

2020-07-02 19:36:58 857

xievim-master.zip

vim配置文件,适用vim7.4版本

2021-02-05

my-vimrc-master.zip

vim配置文件,8.2版本的vim

2021-02-05

Qt系统托盘,仿360,QQ管家

Qt系统托盘,仿360,QQ管家,很适合新手拿去学习

2016-05-30

Qt做的系统托盘图标,仿360安全卫士,QQ管家

Qt做的系统托盘图标,仿360安全卫士,QQ管家,比较适合初学者学习使用。

2016-05-30

用qt写的音乐播放器

用qt写的音乐播放器 用到了qss 界面美观 模仿酷狗音乐

2016-02-04

用qt写的学生成绩管理系统

用qt写的学生成绩管理系统 非常适合初学者学习

2016-02-04

用qt写的酒店管理系统

用qt写的酒店管理系统 非常适合初学者学习 也可以拿来做毕设

2016-02-04

用qt写的登录模块

用qt写的登录模块 实现了国际化 有语言包 纯代码 非常适合初学者学习

2016-02-04

用qt写的画图工具

一个简单的qt画图工具 纯代码 适合初学者学习

2016-02-04

用qt写的签到程序

用qt写的签到程序 纯代码 非常适合初学者学习

2016-02-04

用qt写的计算器

用qt4写的计算器小程序 实现连续运算 实现了浮点运算

2016-01-22

Qt学习之路源码

部分源码 节约大家敲书上的代码所用的时间

2016-01-20

用来编译c++的g++编译器

解决不能上网时,c++编译器没法安装的问题。用了这个之后,只要一条命令就能快速安装g++。

2013-11-06

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

TA关注的人

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