基于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智能指针、内存池初步了解

时间: 2024-10-12 14:27:50

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

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

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

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

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

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

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

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

由于笔者最近有比赛项目要赶,这个基于C/S架构的3D对战网络游戏C++框架也遇到了一点瓶颈需要点时间沉淀,所以近一段时间不能保证每天更新了,会保持不定期更新.同时近期笔者也会多分享一些已经做过学过的C++.服务器端开发.游戏开发相关的内容给大家(因为这些内容已经熟悉也积攒了一定量现有的笔记所以整理成博客会相对轻松些).感谢大家支持,深鞠躬.过两天笔者要去上海参加C++大会,回来后会把参会感悟也分享给大家的^__^.喜欢技术人的纯粹,没有等级之分,希望我们能一路一起进步,共同成长. 基于C/S架构

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

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

基于框架的应用系统开发的质量属性

基于框架的应用系统开发(以你开发的系统为原型)的质量属性 质量属性分别有: 可用性(Availability)的战术 可用性是指系统正常运行时间的比例,可用性关注的问题有:如何检测故障.发生故障的频度.出现故障时的现象.系统故障排除的时限.如何防止故障的发生.发生故障时的处理: 可修改性(Modifiability)的战术 性能(Performance)的战术 安全性(Security)的战术 易用性(Usability)的战术 可测试性(Testability)

基于eclipse搭建android开发环境-win7 32bit

基于eclipse搭建android开发环境-win7 32bit 前言:在使用朋友已搭建的Android开发环境时,发现朋友的开发环境版本较低且在update SDk时失败,便决定根据网上文章提示从头搭建一全新的Android开发环境. 1.准备工作 下载Eclipse.JDK(7).Android SDK.ADT插件. 地址: eclipse:http://www.eclipse.org/downloads/ 版本:Luna Service Release 1 (4.4.1) jdk:htt

Angular05 angular架构、搭建angular开发环境、组件必备三要素、angular启动过程

1 angular架构 1.1 组件:是angular应用的基本构建模块,可以理解为一段带有业务逻辑和数据的HTML 1.2 服务:用来封装可重用的业务逻辑 1.3 指令:允许你想HTML元素添加自定义功能 1.4 模块:将应用中的不同部分组织成一个angular框架可以理解的单元 1.5 组件+服务+指令 = 模块 组件+服务+指令 是用来完成业务功能的:模块 是用来打包和分发的 2 开发环境搭建 2.1 安装node.js 很简单,百度即可 安装完后在我们的命令窗口中就可以使用 npm 命令

基于vim搭建Go开发环境

Go作为一门新兴语言,发展的如火如荼啊.不过,目前还没有一个成熟的IDE.本文介绍基于vim搭建Go的开发环境,保证在具有vim的快感的同时,又支持Go的特性. 1. Go环境 首先,是安装Go.下载安装包,解压,然后设置环境变量 GOROOT:指向解压后的go路径. GOPATH:指向用于开发的workspace.Go按照固定的文件结构组织该文件夹,可以很方便的发布代码,或者从其他仓库下载代码.需要在该目录下创建src/,pkg/,bin/三个文件夹 PATH:Go生成的所有的可执行程序都存放