基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目。

笔者将分为以下三个部分向大家介绍(每日更新):

1、实现基本通信框架,包括对游戏的需求分析、设计及开发环境和通信框架的搭建;

2、实现网络底层操作,包括创建线程池、序列化网络包等;

3、实战演练,实现类似于CS反恐精英的3D对战网络游戏;

技术要点:C++面向对象思想、网络编程、Qt界面开发、Qt控件知识、Boost智能指针、STL算法、STL、容器、Boost网络库、OpenGL坐标变换、OpenGL加载3D模型、MD2模型加载、MDL模型加载

  好了,下面就让我们来开始今天的学习之旅,今天我们将向大家介绍该项目的系统开发环境、版本控制工具、以及对Boost的智能指针和内存池进行一个初步的了解。同时笔者决定从今天开始在博客最后加一个“每日充电站”板块,多向大家介绍一下与游戏开发领域相关的知识,每天都给自己多充一点电,相信日积月累下来一定会是一笔不小的财富。

一、系统开发环境

 (1)开发环境:

  Windows平台
  Visual Studio

 (2)开发技术:

  基于C++语言实现
  C++ Boost库实现网络底层
  QT进行客户端界面开发
  OpenGL实现3D场景绘制

 (3)搭建开发环境:
  安装Boost
  安装Qt
  配置OpenGL开发环境
  配置visual studio相关配置

 (4)Boost程序库简介:
  Boost程序库是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++库;
  Boost程序库是C++“准”标准库,它代表了目前C++语言最新最前沿的技术;

 (5)项目用到的Boost技术要点:

基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解

 (6)Qt简介:
  Qt简介
  支持LGPL协议
  开放了QT源代码库,并鼓励社区参与
  彻底开放了商业平台的代码
  对嵌入式平台力度加大

 (7)项目用到的Qt技术要点

基于C/S架构的3D对战网络游戏C++框架_05搭建系统开发环境与Boost智能指针、内存池初步了解

 (8)说明:

  具体的安装配置过程由于笔者电脑中已经配置好了所以今天没有制作具体的教程,后续我会专门写一篇博客向大家介绍。

二、软件版本控制工具SVN

(1)思考:

  如果一个团队共同开发一个项目,那么如何才能合理的管理项目的相关文件及代码呢?如何才能合理正确的解决冲突呢?

(2)简介:

  Subversion 是一种集中的分享信息的系统,它的核心是版本库,储存所有的数据,版本库按照文件树形式储存数据,包括文件和目录,任意数量的客户端可以连接到版本库读写这些文件。

(3)说明:在这个项目中我会向大家简单介绍下SVN的使用,因为笔者平时在工作室和团队合作用的是SVN所以对它的操作更为熟练,当然git也会向大家简单介绍下,后续开始敲代码时会把源码放在github上供大家学习参考。

三、初涉Boost智能指针

(1)定义:

  一个智能指针就是一个C++的对象, 这对象的行为像一个指针,但是它却可以在其不需要的时候自动删除。注意这个“其不需要的时候”, 这可不是一个精确的定义。这个不需要的时候可以指好多方面:局部变量退出函数作用域、类的对象被析构……。所以boost定义了多个不同的智能指针来管理不同的场景。

shared_ptr<T> 内部维护一个引用计数器来判断此指针是不是需要被释放。是boost中最常用的智能指针了。
scoped_ptr<t> 当这个指针的作用域消失之后自动释放
intrusive_ptr<T> 也维护一个引用计数器,比shared_ptr有更好的性能。但是要求T自己提供这个计数器。
weak_ptr<T> 弱指针,要和shared_ptr 结合使用
shared_array<T> 和shared_ptr相似,但是访问的是数组
scoped_array<T> 和scoped_ptr相似,但是访问的是数组

(2)smart_ptr 类:

  在Boost中的智能指针有:
  scoped_ptr,用于处理单个对象的唯一所有权;与std::auto_ptr不同的是,scoped_ptr可以被复制。
  scoped_array,与scoped_ptr类似,但是用来处理数组的
  shared_ptr,允许共享对象所有权
  shared_array,允许共享数组所有权

四、初涉boost内存池

(1)介绍:

  Boost库的pool提供了一个内存池分配器,用于管理在一个独立的、大的分配空间里的动态内存分配。它主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况。

  pool库主要提供了四种内存池接口,分别是pool、object_pool、singleton_pool和pool_allocator/fast_pool_allocator

(2)使用优点:

  使用pool内存池主要有以下两个优点:

  1. 能够有效地管理许多小型对象的分配和释放工作,避免了自己去管理内存而产生的内存碎片和效率低下问题。

  2. 告别程序内存泄漏的烦恼,pool库会在内部对内存自动进行管理,避免了程序员一不小心而造成的内存泄漏问题。

 

五、每日充电站——游戏外挂介绍

(1)什么是游戏外挂:

  一些表现:
  自动化管理;

  外挂的主要功能:
  减小(增大)游戏指令与指令之间的间隔时间;
  执行一些因为玩家个人游戏信息的问题而在客户端无法直接执行的命令,但这个命令在客户端却是允许的;
  修改客户端正常的指令发送至服务器达到一定的特殊效果,这种指令是一般客户端不能编译发送的,但服务器却可正常接收执行;

(1)外挂的防范:
  对于独立外挂,由于需要Hacking客户端/服务器协议,所以如果对通信协议进行加密,那么基本上可以防止这种类型的外挂。
  对于非独立外挂,Hacking的是客户端程序,涉及到的技术主要是Windows平台上的破解/反破解技术。可以通过对客户端程序进行加壳,同时结合反Hacking系统的方式。

  欢迎大家学习交流,如有不足恳请批评指正,转载请注明出处,感谢您的支持。如果您也喜欢我的博客可以持续关注我,让我们一起成长,共同进步。

  生活很精彩 剔除杂质,留下对编程的穷极探索 纯粹追求。

上一篇:js将xml对象,xml文件解析成xml dom对象,来对对象进行操作


下一篇:Storm与Spark Streaming比较