基于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技术要点:

(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智能指针、内存池初步了解的更多相关文章
- 基于C/S架构的3D对战网络游戏C++框架_06搭建C/S架构的基本通信框架(尚未写完会重新编辑后再发出)
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 基于C/S架构的3D对战网络游戏C++框架_【不定期更新通知】
由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C ...
- 基于C/S架构的3D对战网络游戏C++框架_01服务器端与客户端需求分析
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 基于C/S架构的3D对战网络游戏C++框架_04客户端详细设计与OpenGL、Qt基础
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 基于C/S架构的3D对战网络游戏C++框架_02系统设计(总体设计、概要设计)
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 基于C/S架构的3D对战网络游戏C++框架_03服务器端详细设计
本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): ...
- 珠联壁合地设天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java开发环境(集成web框架Springboot)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_194 也许有人从未听说过Python,但是不会有人没听说过Java,它作为一个拥有悠久历史的老牌编程语言,常年雄踞TIOBE编程语 ...
- 基于ionic4、cordova搭建android开发环境
前颜(yan)最近公司有一个项目需求是利用h5进行跨平台开发,这里所说的跨平台开发指的是:将h5代码利用某种方式或工具环境进行打包,最后生成android的apk以及ios的ipa. 本文只讲解and ...
- 基于 Webpack 4 搭建 Vue 开发环境
自从工作之后,就已经很久没有写过博客了.时间被分割得比较碎,积累了一段时间的学习成果,才写下了这篇博客. 之前有写过 Webpack4 的文章,但是都比较偏入门,唯一的一篇实战篇 -- 基于Webpa ...
随机推荐
- Http协议相关内容
http协议概述 HTTP是hypertext transfer protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义浏览器与WEB服务器之间交换数据的过程. 客户 ...
- 01windows窗体程序学习
静态用户名和密码的登录练习 private void button2_Click(object sender, EventArgs e) { textUser.Text = Convert.ToStr ...
- ASP.Net MVC——DotNetZip简单使用,解决文件压缩问题。
准备工作: 在vs工具栏中找到NuGet 下载DotNetZip 现在就可以使用DotNetZip强大的类库了,在这里我给出一些简单的使用. public ActionResult Export() ...
- 如何实现一个php框架系列文章【3】支持psr4的自动加载类
psr4自动加载规范https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 我们把第三方使用psr规范的类库放在v ...
- String类
字符串的功能 A:判断功能 boolean equals(Object obj)//比较对象 boolean eq ...
- 数据结构:队列 链表,顺序表和循环顺序表实现(python版)
链表实现队列: 尾部 添加数据,效率为0(1) 头部 元素的删除和查看,效率也为0(1) 顺序表实现队列: 头部 添加数据,效率为0(n) 尾部 元素的删除和查看,效率也为0(1) 循环顺序表实现队列 ...
- WCF入门教程2——创建第一个WCF程序
本节目标 掌握接口 理解契约式编程 创建宿主程序 创建客户端程序访问服务 什么是接口 认识一下接口 必须知道的接口特性 接口不可以被实例化(常作为类型使用) 实现类必须实现接口的所有方法(抽象类除外) ...
- H5 本地存储一
localStorage(本地存储),可以长期存储数据,没有时间限制,一天,一年,两年甚至更长,数据都可以使用.sessionStorage(会话存储),只有在浏览器被关闭之前使用,创建另一个页面时同 ...
- Android 多个listview的实现
正好,今天项目中需要,先写了个demo,给大家参考参考. 先上图,需要的自己,看看具体的代码实现步骤 大概说一下实现步骤: 1.布局中先用 scrollview 包裹 LinearLayout < ...
- git推送本地分支到远程分支
场景 有时候我们开发需要开一个分支,这样可以有效的并行开发. 开分支有两种方式: 一种是在远程开好分支,本地直接拉下来; 一种是本地开好分支,推送到远程. 远程先开好分支然后拉到本地 git chec ...