本系列博客主要是以对战游戏为背景介绍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技术要点:

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

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

 (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系统的方式。

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

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

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

  1. 基于C/S架构的3D对战网络游戏C++框架 _06搭建C/S架构的基本通信框架(尚未写完会重新编辑后再发出)

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  2. 基于C/S架构的3D对战网络游戏C++框架 _【不定期更新通知】

    由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...

  3. 基于C/S架构的3D对战网络游戏C++框架 _01服务器端与客户端需求分析

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  4. 基于C/S架构的3D对战网络游戏C++框架 _04客户端详细设计与OpenGL、Qt基础

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  5. 基于C/S架构的3D对战网络游戏C++框架 _02系统设计(总体设计、概要设计)

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  6. 基于C/S架构的3D对战网络游戏C++框架 _03服务器端详细设计

    本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...

  7. 珠联壁合地设天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java开发环境(集成web框架Springboot)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_194 也许有人从未听说过Python,但是不会有人没听说过Java,它作为一个拥有悠久历史的老牌编程语言,常年雄踞TIOBE编程语 ...

  8. 基于ionic4、cordova搭建android开发环境

    前颜(yan)最近公司有一个项目需求是利用h5进行跨平台开发,这里所说的跨平台开发指的是:将h5代码利用某种方式或工具环境进行打包,最后生成android的apk以及ios的ipa. 本文只讲解and ...

  9. 基于 Webpack 4 搭建 Vue 开发环境

    自从工作之后,就已经很久没有写过博客了.时间被分割得比较碎,积累了一段时间的学习成果,才写下了这篇博客. 之前有写过 Webpack4 的文章,但是都比较偏入门,唯一的一篇实战篇 -- 基于Webpa ...

随机推荐

  1. 版本控制工具Git的学习笔记

    在网上看到一个很不错的Git教程,学习后果断要做一下总结. 教程地址:http://www.liaoxuefeng.com/ 总结要点: 安装Git因为我个人的开发主要是基于windows环境下,所以 ...

  2. axis2生成客户端代码

    通过aix2生成客户端代码需要准备相应的包,然后执行命令,步骤如下: 一.所需包准备 下载axis2-1.6.2-bin.zip,解压从lib包中取出 jaxrpc.jar wsdl4j-1.6.2. ...

  3. quartz CronExpression表达式

    一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素.按顺序依次为1.秒(0~59)2.分钟(0~59)3.小时(0~23)4.天(月)(0~31,但是你需要考虑你月的天数)5.月(0~11 ...

  4. Atitit.数据采集器 dataspider

    Atitit.数据采集器 dataspider /atiplat_cms/src/com/attilax/WebInfoX.java  @dep http://cl.cmcher.com/thread ...

  5. JavaScript学习总结——我所理解的JavaScript闭包

    一.闭包(Closure) 1.1.什么是闭包? 理解闭包概念: a.闭包是指有权限访问另一个函数作用域的变量的函数,创建闭包的常见方式就是在一个函数内部创建另一个函数,也就是创建一个内部函数,创建一 ...

  6. sql case when...then...else...end 选择判断

    达到的需求为: 吓数收回日期为空:当接单日期不等于空和当天减接单日期大于3天时,为1,否则为0:当接单日期为空.最大发织交期不等于空和当天减去最大发织交期大于3天时,为1,否则为0:当接单日期和发织交 ...

  7. 地图中插入表格——ArcMap篇

    在制作专题图的过程中,不但要有地理要素表示空间位置,经常还要在图的周围制作一些表格数据.这里对ArcMap中的插入方法进行总结. 方法一:插入对象 利用菜单中的"插入"-" ...

  8. windows 7 + virtualbox安装centos+mono+jexus

    1. 下载安装virtualbox和virtualbox extension 2. 创建并安装centos虚拟机 3. 下载并安装libgdiplus,gdi+库 4. 下载并安装Mono 5. 下载 ...

  9. iOS - GitHub干货分享(APP引导页的高度集成 - DHGuidePageHUD - ①)

    好长时间没更新博客, 是时候来一波干货分享了;APP引导页话不多说每一个APP都会用到,分量不重但是不可缺少,不论是APP的首次安装还是版本的更新,首先展现给用户眼前的也就只有它了吧,当然这里讲的不是 ...

  10. iOS开发常用快捷键

    二. Xcode基本快捷键 新建项目 Shift + CMD + N 项目中新建文件 CMD + N 运行 CMD + R 编译 CMD + B 停止运行 CMD + . 清除缓存 Shift + C ...