1. 程式人生 > >從零學習遊戲伺服器開發(一) 從一款多人聯機實時對戰遊戲開始

從零學習遊戲伺服器開發(一) 從一款多人聯機實時對戰遊戲開始

寫在前面的話

      經常有學生或者初學者問我如何去閱讀和學習一個開源軟體的程式碼,也有不少朋友在工作崗位時面對前同事留下的專案,由於文件不完善、程式碼註釋少、工程數量大,而無從下手。本文將來通過一個多人聯機實時對戰遊戲——最後一戰,來解答以上問題。

      其實,我以上問題在我是一個學生時,我也同樣因此而困惑,但是後來,我發現,對於文件缺失、註釋缺失的專案,需要自己摸索,雖然是挑戰,同時也是機遇——一個不錯的學習機會。因為至少有程式碼,正如侯捷大師所說的的,“原始碼面前,了無祕密”,所以我們應該“read the fucking code”。

    所以,這個系列的文章,我們分析“最後一戰”這個遊戲原始碼時,我們不會按照傳統的思路:先介紹總結的程式結構,再介紹各個模組的細節,因為,當我們面對一套陌生的原始碼時,尤其是在文件缺失的情況下,我們根本無法開始就掌握這個專案的總體結構,我們只能從零開始一個個模組的對程式碼進行閱讀和除錯,所以我們這個系列的文章也按這個思路來分析,以真實的案例來教會新手一步步讀懂一個開源專案的程式碼。

我們先來看下這個遊戲的內容吧,下面給出遊戲畫面的部分截圖:







這是一款類似於王者榮耀、dota之類的5v5實時RPG競技遊戲。

原始碼下載方法:微信搜尋公眾號『easyserverdev』(中文名:高效能伺服器開發),關注公眾號後,在公眾號中回覆『最後一戰原始碼』,即可得到下載連結。(噴子和程式碼販子請遠離!)如果您按照要求做了以後會收到以下下載連結,並且這個連結的程式碼是不斷更新的,你可以通過svn定期更新成最新的原始碼:



客戶端的邏輯比較簡單,主要是一些遊戲特效和動畫(基於Unity 3D),所以這裡我們主要分析遊戲的伺服器端原始碼。

先介紹一下推薦的原始碼的執行和開發環境(我的配置):

Windows 7

Visual Studio 2010

伺服器端有非常多的模組,這裡先截一張主要模組的專案圖示:


從下一篇文章開始,我們將介紹如何學習這樣的原始碼。整理原始碼不易,如果您喜歡此文,幫忙給本文點個贊。

歡迎關注公眾號『easyserverdev』。如果有任何技術或者職業方面的問題需要我提供幫助,可通過這個公眾號與我取得聯絡,此公眾號不僅分享高效能伺服器開發經驗和故事,同時也免費為廣大技術朋友提供技術答疑和職業解惑,您有任何問題都可以在微信公眾號直接留言,我會盡快回復您。



相關推薦

學習遊戲伺服器開發 聯機實時遊戲開始

寫在前面的話      經常有學生或者初學者問我如何去閱讀和學習一個開源軟體的程式碼,也有不少朋友在工作崗位時面對前同事留下的專案,由於文件不完善、程式碼註釋少、工程數量大,而無從下手。本文將來通過一個多人聯機實時對戰遊戲——最後一戰,來解答以上問題。      其實,我以上

學習遊戲伺服器開發LogServer原始碼探究

這是從零學習開源專案的第四篇,上一篇是《從零學習開源專案系列(三) CSBattleMgr服務原始碼研究》,這篇文章我們一起來學習LogServer,中文意思可能是“日誌伺服器”。那麼這個日誌伺服器到底做了哪些工作呢?我們在Visual Studio中將LogServer設定

學習遊戲伺服器開發 CSBattleMgr服務原始碼研究

如上圖所示,這篇文章我們將介紹CSBattleMgr的情況,但是我們不會去研究這個伺服器的特別細節的東西(這些細節我們將在後面的文章中介紹)。閱讀一個未知的專案原始碼如果我們開始就糾結於各種細節,那麼我們最終會陷入“橫看成嶺側成峰,遠近高低各不同”的尷尬境界,浪費時間不說,可

開始學習比特幣開發-P2P網路建立流程之生成地址並連線到指定地址

本節繼續講解比特幣P2P網路建立流程,這節講解的執行緒為’ThreadOpenAddedConnections’,它的作用是生成地址對並連線到指定地址。 本文可以結合比特幣系統啟動的的第12步的講解來看,可以更加系統的瞭解比特幣系統啟動的過程。 P2P 網路的建立是在比特幣系統啟動的第

搭建生產Hadoop叢集——關鍵伺服器雙網絡卡配置

一、概述 Hadoop叢集中,有許多伺服器部署著關鍵例項,如NameNode、ResourceManager、Zookeeper等,這些服務的穩定執行對叢集健康具有重要意義。雖然這些服務基本上都會做多例項高可用部署,但是若連線的是同個交換機,萬一交換機發生故障

構建以太坊Ethereum智慧合約到專案實戰——學習筆記

P1 、1-初識Bitcoin錢包 https://bitcoin.org/zh_CN/choose-your-wallet P 、2-比特幣錢包BitPay使用教程P 、3-玩轉以太坊各種錢包P 、4-手把手教你申請ENS (Ethereum Name Service)P 、1-會說話的PPT,從開發者

構建以太坊Ethereum智能合約到項目實戰——學習筆記4

如何 方法 num res contract 內容 博客 與或非 不能 P10 、1-Solidity面向對象編程 - 類和對象 P11 、2-如何通過Solidity實現一個類(合約)P12 、3-Solidity 合約中屬性和行為的訪問權限(一)P13 、4-Solid

構建以太坊Ethereum智能合約到項目實戰——學習筆記5

介紹 var there 以太坊 -a its glob ble map P17 、8-Solidity值類型與引用類型 P18 、9-Solidity值傳遞P19 、10-Solidity引用類型(storage/memory)P20 、Solidity Types -

構建以太坊Ethereum智能合約到項目實戰——學習筆記6

轉換關系 上傳下載 nod ring 固定 大小 上傳 truct iter P21 、1-Solidity Types - 整型(Integer) (一) P22 、2-Solidity Types - 整型(Integer) - Var遇到的坑(二)P23 、3

構建以太坊Ethereum智能合約到項目實戰——學習筆記7

framework 地址 查看 數組 mic ont 案例 ray 測試 P28 、1-Solidity Types - 地址(Address) - 初識 P29 、2-Solidity Types - 地址(Address) - msg.P 、senderP30 、3

構建以太坊Ethereum智能合約到項目實戰——學習筆記11

案例 玩轉 發布 一個 上傳與下載 -i 存儲 安裝 bar P75 、1-以太坊私網建立 、合約編譯、部署完全教程(1) P76 、2-以太坊私網建立 (2) - 同一臺電腦/不同電腦運行多個節點P77 、3-以太坊私網建立 (3) - 通過創世區塊來初始化區塊鏈

搭建Spring Boot腳手架7:整合OSS作為檔案伺服器

![](https://img2020.cnblogs.com/other/1739473/202008/1739473-20200825100851012-1750121591.png) ## 1. 前言 檔案伺服器是一個應用必要的元件之一。最早我搞過**FTP**,然後又用過**FastDFS**,接

C++ Linux伺服器開發1——極速入門必備命令

1.shell簡介 shell是運維和系統管理員操作Linux系統的首選,是一個命令直譯器 命令列---------------->解釋執行 命令列相關:        行首“$”或"#“---------------

SpringBoot 學習-restful api 開發

SpringBoot 開發resful api 比之前mvc restful api 更為快捷和簡單。正所謂 沒有對比就沒有傷害,在介紹SpringBoot的寫法之前,我們先看看SpringMVC 是如果實現 restful api的。在這裡我將寫一個使用者的增刪該查 res

搭建生產Hadoop叢集——上線與下線資料節點流程

一、概述 Hadoop叢集中,經常需要在不重啟叢集的前提下,動態地上線與下線資料節點,而使用Cloudera Manager管理的叢集,可以很方便地做到這一點,本文將介紹其相關流程。 二、節點上線流程 1. 伺服器初始化 新節點的硬體配置最好能夠跟原叢集伺服器

go實現一個簡單的遊戲伺服器框架lotou基本設計

程式碼倉庫,目前程式碼比較粗糙,歡迎各種改進建議。 因為go語言原生支援高併發(goroutine)和通訊機制(channel),所以首先想到的就是使用這兩個東西來構建我的訊息分發機制。 核心思路: 有一個core模組維護了所有的服務 當有訊息傳送的時候

go實現一個簡單的遊戲伺服器框架lotou起源

程式碼倉庫,目前程式碼比較粗糙,歡迎各種改進建議。 最近一直想學習一些關於遊戲伺服器的知識,顯示看了一下雲風的skynet框架,從而對於一個遊戲伺服器框架有了一個基本概要了解。先來說說我對於skynet的一些理解吧。 skynet理解 skynet只完成了

【webpack系列】搭建 webpack4+react 腳手架

html檔案如何也同步到dist目錄?bundle.js檔案修改了,萬一被瀏覽器快取了怎麼辦?如何為匯出的檔案加md5?如何把js引用自動新增到html?非業務程式碼和業務程式碼如何分開打包?如何搭建開發環境?如何實現開發環境的熱更新? 在上一節我們已經搭建了一個最基本的webpack環境,

【webpack系列】搭建 webpack4+react 腳手架

本章節,我們對如何在腳手架中引入CSS,如何壓縮CSS,如何使用CSS Modules,如何使用less,如何使用postcss等問題進行展開學習。 1 支援css (1)在app目錄,新建一個css,命名為index.css,輸入樣式: h1{

【webpack系列】搭建 webpack4+react 腳手架

本章節,我們一起來探討以下問題:如何對編譯後的檔案進行gzip壓縮,如何讓開發環境的控制檯輸出更加高逼格,如何更好的對編譯後的檔案進行bundle分析等。 1 gzip壓縮 如果你想節省頻寬提高網站速度,壓縮是一種簡單有效的方法。我們模擬一次html的請求,想象一下瀏覽器和伺服器的對