本系列博客主要是以对战游戏为背景介绍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. TeamCity : 配置 Build 过程

    Build 过程往往是比较复杂的,因此 TeamCtiy 通过 build 步骤的方式让您可以实现不同的应用场景.您可以在每个 build 步骤中只做一件事情,然后把一系列的 build 步骤组织起来 ...

  2. Rafy 框架 - 通用查询条件(CommonQueryCriteria)

    在应用开发过程中,有 80% 的场景下,开发者所需要的实体查询,查询条件中其实都是一些简单的属性匹配,又或是一些属性匹配的简单组合.Rafy 为这样的场景提供了更为方便使用的 API:CommonQu ...

  3. C# 之 EXCEL导入导出

    以下方式是本人总结的一些经验,肯定有很多种方法,在此先记下,留待以后补充... 希望朋友们一起来探讨相关想法,请在下方留言. A-1:EXCEL模板导出 非常简单,将EXCEL模板上传到项目中后,将其 ...

  4. android

    配置Activity 的启动模式: 在 AndroidManifest.xml 中配置: <activity android:name=".MainActivity" and ...

  5. monggodb学习系列:1,mongodb入门

    http://note.youdao.com/share/?id=fa62cd2386f253af68a7e29c6638f158&type=note#/ 放在有道笔记上了,懒得复制过来,有兴 ...

  6. SSH中Action的单例与多例

    Structs2中的Bean默认的是单例,在整个程序运行期间,每个Bean只有一个实例,只要程序在运行,这个实例就一直存在. 对于Action来说,单例就容易出问题.如果客户端每次提交的参数都是一样的 ...

  7. 数据结构:优先队列 基于堆实现(python版)

    #!/usr/bin/env python # -*- coding:utf-8 -*- ''' Author: Minion-Xu ''' #异常类 class HeapPriQueueError( ...

  8. 多页的TIFF图片在aspx页面分页显示

    一.逻辑实现:将数据库中的二进制TIFF图片读出并分页显示在页面上. 1.显示界面 public FrameDimension MyGuid; ; ; public static MemoryStre ...

  9. Cocos2dx中线程优先级

    Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...

  10. 最新GHOST XP系统下载旗舰增强版 V2016年

    系统来自:系统妈:http://www.xitongma.com 深度技术GHOST xp系统旗舰增强版 V2016年3月 系统概述 深度技术ghost xp系统旗舰增强版集合微软JAVA虚拟机IE插 ...