基于C/S架構(gòu)的3D對(duì)戰(zhàn)網(wǎng)絡(luò)游戲C++框架 _05搭建系統(tǒng)開發(fā)環(huán)境與Boost智能指針、內(nèi)存池初步了解

本系列博客主要是以對(duì)戰(zhàn)游戲?yàn)楸尘敖榻B3D對(duì)戰(zhàn)網(wǎng)絡(luò)游戲常用的開發(fā)技術(shù)以及C++高級(jí)編程技巧,有了這些知識(shí),就可以開發(fā)出中小型游戲項(xiàng)目或3D工業(yè)仿真項(xiàng)目。

筆者將分為以下三個(gè)部分向大家介紹(每日更新):

1、實(shí)現(xiàn)基本通信框架,包括對(duì)游戲的需求分析、設(shè)計(jì)及開發(fā)環(huán)境和通信框架的搭建;

2、實(shí)現(xiàn)網(wǎng)絡(luò)底層操作,包括創(chuàng)建線程池、序列化網(wǎng)絡(luò)包等;

3、實(shí)戰(zhàn)演練,實(shí)現(xiàn)類似于CS反恐精英的3D對(duì)戰(zhàn)網(wǎng)絡(luò)游戲;

技術(shù)要點(diǎn):C++面向?qū)ο笏枷搿⒕W(wǎng)絡(luò)編程、Qt界面開發(fā)、Qt控件知識(shí)、Boost智能指針、STL算法、STL、容器、Boost網(wǎng)絡(luò)庫(kù)、OpenGL坐標(biāo)變換、OpenGL加載3D模型、MD2模型加載、MDL模型加載

 

好了,下面就讓我們來(lái)開始今天的學(xué)習(xí)之旅,今天我們將向大家介紹該項(xiàng)目的系統(tǒng)開發(fā)環(huán)境、版本控制工具、以及對(duì)Boost的智能指針和內(nèi)存池進(jìn)行一個(gè)初步的了解。同時(shí)筆者決定從今天開始在博客最后加一個(gè)“每日充電站”板塊,多向大家介紹一下與游戲開發(fā)領(lǐng)域相關(guān)的知識(shí),每天都給自己多充一點(diǎn)電,相信日積月累下來(lái)一定會(huì)是一筆不小的財(cái)富。

 

一、系統(tǒng)開發(fā)環(huán)境

 (1)開發(fā)環(huán)境:

Windows平臺(tái)
Visual Studio 

 (2)開發(fā)技術(shù):

基于C++語(yǔ)言實(shí)現(xiàn)
C++ Boost庫(kù)實(shí)現(xiàn)網(wǎng)絡(luò)底層
QT進(jìn)行客戶端界面開發(fā)
OpenGL實(shí)現(xiàn)3D場(chǎng)景繪制

 (3)搭建開發(fā)環(huán)境:
安裝Boost
安裝Qt
配置OpenGL開發(fā)環(huán)境
配置visual studio相關(guān)配置

 (4)Boost程序庫(kù)簡(jiǎn)介:
Boost程序庫(kù)是一個(gè)功能強(qiáng)大、構(gòu)造精巧、跨平臺(tái)、開源并且完全免費(fèi)的C++庫(kù);
Boost程序庫(kù)是C++“準(zhǔn)”標(biāo)準(zhǔn)庫(kù),它代表了目前C++語(yǔ)言最新最前沿的技術(shù);

 (5)項(xiàng)目用到的Boost技術(shù)要點(diǎn):

 (6)Qt簡(jiǎn)介:
Qt簡(jiǎn)介
支持LGPL協(xié)議
開放了QT源代碼庫(kù),并鼓勵(lì)社區(qū)參與
徹底開放了商業(yè)平臺(tái)的代碼
對(duì)嵌入式平臺(tái)力度加大

 (7)項(xiàng)目用到的Qt技術(shù)要點(diǎn)

 (8)說(shuō)明:

具體的安裝配置過(guò)程由于筆者電腦中已經(jīng)配置好了所以今天沒(méi)有制作具體的教程,后續(xù)我會(huì)專門寫一篇博客向大家介紹。

二、軟件版本控制工具SVN

(1)思考:

如果一個(gè)團(tuán)隊(duì)共同開發(fā)一個(gè)項(xiàng)目,那么如何才能合理的管理項(xiàng)目的相關(guān)文件及代碼呢?如何才能合理正確的解決沖突呢?

(2)簡(jiǎn)介:

Subversion 是一種集中的分享信息的系統(tǒng),它的核心是版本庫(kù),儲(chǔ)存所有的數(shù)據(jù),版本庫(kù)按照文件樹形式儲(chǔ)存數(shù)據(jù),包括文件和目錄,任意數(shù)量的客戶端可以連接到版本庫(kù)讀寫這些文件。

(3)說(shuō)明:在這個(gè)項(xiàng)目中我會(huì)向大家簡(jiǎn)單介紹下SVN的使用,因?yàn)楣P者平時(shí)在工作室和團(tuán)隊(duì)合作用的是SVN所以對(duì)它的操作更為熟練,當(dāng)然git也會(huì)向大家簡(jiǎn)單介紹下,后續(xù)開始敲代碼時(shí)會(huì)把源碼放在github上供大家學(xué)習(xí)參考。

三、初涉Boost智能指針

(1)定義:

一個(gè)智能指針就是一個(gè)C++的對(duì)象, 這對(duì)象的行為像一個(gè)指針,但是它卻可以在其不需要的時(shí)候自動(dòng)刪除。注意這個(gè)“其不需要的時(shí)候”, 這可不是一個(gè)精確的定義。這個(gè)不需要的時(shí)候可以指好多方面:局部變量退出函數(shù)作用域、類的對(duì)象被析構(gòu)……。所以boost定義了多個(gè)不同的智能指針來(lái)管理不同的場(chǎng)景。

 

shared_ptr<T> 內(nèi)部維護(hù)一個(gè)引用計(jì)數(shù)器來(lái)判斷此指針是不是需要被釋放。是boost中最常用的智能指針了。
scoped_ptr<t> 當(dāng)這個(gè)指針的作用域消失之后自動(dòng)釋放
intrusive_ptr<T> 也維護(hù)一個(gè)引用計(jì)數(shù)器,比shared_ptr有更好的性能。但是要求T自己提供這個(gè)計(jì)數(shù)器。
weak_ptr<T> 弱指針,要和shared_ptr 結(jié)合使用
shared_array<T> 和shared_ptr相似,但是訪問(wèn)的是數(shù)組
scoped_array<T> 和scoped_ptr相似,但是訪問(wèn)的是數(shù)組

(2)smart_ptr 類:

在Boost中的智能指針有:
scoped_ptr,用于處理單個(gè)對(duì)象的唯一所有權(quán);與std::auto_ptr不同的是,scoped_ptr可以被復(fù)制。
scoped_array,與scoped_ptr類似,但是用來(lái)處理數(shù)組的
shared_ptr,允許共享對(duì)象所有權(quán)
shared_array,允許共享數(shù)組所有權(quán)

 

四、初涉boost內(nèi)存池

(1)介紹:

Boost庫(kù)的pool提供了一個(gè)內(nèi)存池分配器,用于管理在一個(gè)獨(dú)立的、大的分配空間里的動(dòng)態(tài)內(nèi)存分配。它主要適用于快速分配同樣大小的內(nèi)存塊,尤其是反復(fù)分配和釋放同樣大小的內(nèi)存塊的情況。

pool庫(kù)主要提供了四種內(nèi)存池接口,分別是pool、object_pool、singleton_pool和pool_allocator/fast_pool_allocator

(2)使用優(yōu)點(diǎn):

使用pool內(nèi)存池主要有以下兩個(gè)優(yōu)點(diǎn):

1. 能夠有效地管理許多小型對(duì)象的分配和釋放工作,避免了自己去管理內(nèi)存而產(chǎn)生的內(nèi)存碎片和效率低下問(wèn)題。

2. 告別程序內(nèi)存泄漏的煩惱,pool庫(kù)會(huì)在內(nèi)部對(duì)內(nèi)存自動(dòng)進(jìn)行管理,避免了程序員一不小心而造成的內(nèi)存泄漏問(wèn)題。

 

五、每日充電站——游戲外掛介紹

(1)什么是游戲外掛:

一些表現(xiàn):
自動(dòng)化管理;

外掛的主要功能:
減小(增大)游戲指令與指令之間的間隔時(shí)間;
執(zhí)行一些因?yàn)橥婕覀€(gè)人游戲信息的問(wèn)題而在客戶端無(wú)法直接執(zhí)行的命令,但這個(gè)命令在客戶端卻是允許的;
修改客戶端正常的指令發(fā)送至服務(wù)器達(dá)到一定的特殊效果,這種指令是一般客戶端不能編譯發(fā)送的,但服務(wù)器卻可正常接收?qǐng)?zhí)行;

(1)外掛的防范:
對(duì)于獨(dú)立外掛,由于需要Hacking客戶端/服務(wù)器協(xié)議,所以如果對(duì)通信協(xié)議進(jìn)行加密,那么基本上可以防止這種類型的外掛。
對(duì)于非獨(dú)立外掛,Hacking的是客戶端程序,涉及到的技術(shù)主要是Windows平臺(tái)上的破解/反破解技術(shù)。可以通過(guò)對(duì)客戶端程序進(jìn)行加殼,同時(shí)結(jié)合反Hacking系統(tǒng)的方式。

  歡迎大家學(xué)習(xí)交流,如有不足懇請(qǐng)批評(píng)指正,轉(zhuǎn)載請(qǐng)注明出處,感謝您的支持。如果您也喜歡我的博客可以持續(xù)關(guān)注我,讓我們一起成長(zhǎng),共同進(jìn)步。

  生活很精彩 剔除雜質(zhì),留下對(duì)編程的窮極探索 純粹追求。