分類: 交通大學電腦遊戲設計社社課

線上遊戲後端系統設計 – 目錄

一、課程簡介

本課程將會對開發線上遊戲的後端系統進行教學,內容為各種線上遊戲皆可以參考的核心骨架系統與各項開發線上遊戲後端程式所需的關鍵技術。 課程分成三階段:基礎、中階、進階,逐步深入。

基礎課程由建立專案開始,學習建立簡單線上遊戲會用到的各項技術,學習後可以著手開發一萬行C#以下的簡單線上遊戲程式。

中階課程會學習如何面對一萬行C#以上的遊戲專案,並提升程式設計的抽象化能力,避免程式出現冗餘的部分,並讓功能擴展性增加,以面對多樣化的遊戲需求。是開發小型遊戲以上的必備能力,並銜接進階課程的內容。中階課程依然以單伺服器為開發對象,目標為開發10萬行C#以內或同時在線1000人以下的線上遊戲。

 

進階課程以多伺服器後端環境切入,並探索專案的切割方式,將各項功能切成許多專案來開發,以供許多人同時進行專案開發,並介紹我的基本兩層式伺服器架構,由1+N個伺服器應用程式組成,可以服務1000人以上。

二、課程數值說明

重要性:

★☆☆☆☆:不會也沒關係

★★☆☆☆:最好要知道

★★★☆☆:最好要會使用

★★★★☆:常常會使用

★★★★★:必須知道

███████:可能致命

難度:

★☆☆☆☆:通識

★★☆☆☆:程式入門程度

★★★☆☆:會寫簡單的遊戲專案的程度

★★★★☆:已經學會設計模式的程度

★★★★★:高度抽象

███████:大概只有我自己知道

學會才能開發的專案規模:

★☆☆☆☆:練習小專案(1000行C#以下)

★★☆☆☆:課堂期末專題(5000行C#以下)

★★★☆☆:完整獨立小型遊戲專案(10000行C#以下)

★★★★☆:多專案分割,完整遊戲專案(100000行C#以下)

★★★★★:大型專案(100000行C#以上)

███████:把世界造出來

三、課程目錄

基礎

專案建立:學習如何建立Visual Studio與Unity遊戲專案。

GitHub使用指南:學習簡單的使用GitHub來做程式開發版本控制。

認識線上遊戲類型:認識線上遊戲類型,並辨識開發難度。

基本線上遊戲架構與伺服器環境:學習線上遊戲後端架構的基礎。

建立與伺服器的連線:學習如何在客戶端與伺服器間建立連線,並執行遊戲操作。

加入新功能到遊戲中:學習如何在已建構出的伺服器環境上加入新遊戲功能。

資料庫存取:學習使用資料庫來存取遊戲資料。

中階

架構切割與專案分離:學習將一個大的遊戲專案依照功能類型切成數個小專案。

抽象世界:學習使用抽象類別來描述遊戲邏輯。

泛型類別:學習使用泛型來減少相似類別內的重複宣告。

分離式通訊骨架:學習建構應用程式級的RMI系統,並消去物件之間的強烈耦合性。

抽象化伺服器環境:將伺服器邏輯與伺服器通訊設備分離,可適應多種伺服器套件。

物件參考分離:摧毀物件間的直接參考,以支援物件實體放在不同伺服器間的運作。

進階

線上遊戲多伺服器架構簡介:介紹大型線上遊戲的伺服器結構。

大型線上遊戲專案切割:介紹大型線上遊戲專案間的分割與繼承。

內部伺服器通訊設施:介紹如何建立多台伺服器間的通訊與使用。

跨伺服器運算:探討如何處理一個需要橫跨多台不同類型的伺服器才能完成的操作。

 

以上規模大小皆由我個人設想,不一定是真實情況。

線上遊戲實作技術-設定檔XML序列化

簡介

這篇教學文章主要介紹如何編寫一個設定檔,這個設定檔可以直接用文字編輯器打開與修改,這些設定可以在程式執行時讀取,相比直接把資料寫死在程式碼中,擁有較高的修改自由度與避免重要資訊公開。

設定檔

設定檔就是一些變數值,通常在程式執行期間都不會進行更改,在課程的線上遊戲當中,我會透過設定檔來儲存資料庫的位置與帳號密碼,如此一來,這些資訊就可以另外設定,不會因為放到GitHub上而被其他人看到,當我想要修改這些值的時候,也可以不需要重新建置我的程式。

XML

wikiExtensible Markup Language,簡稱:XML,就是使用一大堆<>標籤來表達資料結構的一種資料格式,C#中內建有XML格式的序列化工具,XML本身也具有可閱讀的特性,適合拿來快速實作設定檔。

序列化

序列化(Serialization),指的是將各種形式的資料轉換成一種可以被傳輸的中間表達形式,通常用來進行網路傳輸工作。當你需要透過網路傳送一個比較複雜的資料結構時,如果你不想將整個資料一一拆解成最簡單的資料型態,那麼你就需要使用這項技術才能把資料傳送過去。例如有一個複雜的類別,裡面儲存了很多不同型態的資料,其中還包刮了多型集合,要將這種複雜資料傳到另一個地方是有難度的,序列化可以將這些複雜的資料轉換成一些低階的資料格式,如string,byte[]之類的,這些就很容易被傳輸。在透過反序列化(Deserialization)將中間資料轉換成原來的資料。

中間資料有很多種格式,binary,json,xml等等,這裡我們會介紹C#中XML格式的序列化方式。

實例

參考https://github.com/NCTUGDC/HearthStone/blob/master/HearthStone/HearthStone.Server/Configurations/DatabaseConfiguration.cs

using System.IO;//使用讀寫檔案的部分
using System.Xml;//使用建立與讀取xml格式資料的部分
using System.Xml.Serialization;//使用xml序列化工具

在屬性或欄位上加上[XmlElement]標註,表示這個資料要被序列化與反序列化
XmlSerializer serializer = new XmlSerializer(typeof(DatabaseConfiguration));
告訴XmlSerializer這是要序列化哪一種類別
用XmlReader來反序列化資料(從檔案把資料讀出來成物件)
用XmlWriter來序列化資料(把資料寫入檔案)

參考上面的程式碼範例,當檔案存在時就讀取,當不存在時就新建一個空的,第一次使用的時候你可以靠這樣自動產生一個空的後再來修改。產生的檔案會長成這樣

<?xml version="1.0" encoding="utf-8"?><DatabaseConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Hostname>not set</Hostname><Username>not set</Username><Password>not set</Password><Database>not set</Database></DatabaseConfiguration>

你需要手動的調整一下縮排

<?xml version="1.0" encoding="utf-8"?>
<DatabaseConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Hostname>not set</Hostname>
    <Username>not set</Username>
    <Password>not set</Password>
    <Database>not set</Database>
</DatabaseConfiguration>

把標籤中的資料換成你想要的就可以很方便的使用了。

在伺服器啟動的時候把這些資料讀取進來使用即可。

DatabaseConfiguration config;
DatabaseConfiguration.Load(“config/test.config", out config)

你可以在你的伺服器程式執行資料夾(有bin和log的)中新加一個config資料夾,這樣比較容易找到設定檔,設定檔約定俗成的用.config當作附檔名,PhotonServer環境也會自動偵測到有.config檔案的改變會重開該伺服器程式。

讀取到資料後你就可以用這些資料來做事了。

如果你不想用MySQL資料庫,你也可以研究看看要怎麼用XML來做儲存資料的文件檔。

遊戲與設計模式

交通大學電腦遊戲設計社 進階社課-5

目錄

  • 遊戲設計模式?
    • 和設計模式的差異
    • 這要寫程式嗎?
    • 要從哪裡得到這些模式?
  • 我的遊戲設計模式
    • 玩家資料與能力值
    • 狀態資訊
    • 道具與裝備系統
    • 物品欄
    • 技能系統
    • 快捷鍵系統
    • 任務系統
    • 對話與聊天系統
    • 場景
    • NPC
    • 強化系統
    • 生產與製造和延時觸發系統
    • 存檔系統
    • 沙盒建造系統
  • 通用性與抽象程度

繼續閱讀 “遊戲與設計模式"

簡易Flappy Bird實例

交通大學電腦遊戲設計社 基礎社課-5&6

目標

學習基本的遊戲程式,還有Unity中碰撞與剛體的使用,並且能動態產生遊戲物件。最後再簡單的學習uGUI的使用方式,完成一個簡單的flappy bird遊戲。

目錄

  • 取得資源
  • 確認要做的事項
  • 功能分析-flappy bird飛行
  • 功能分析-柱子移動
  • 功能分析-自動刪除柱子
  • 功能分析-自動生成柱子與柱子垂直位置隨機變化
  • 功能分析-遊戲分數與呈現
  • 功能分析-累加遊戲分數與更新UI
  • 功能分析-GameOver與重新開始

繼續閱讀 “簡易Flappy Bird實例"

設計模式介紹

交通大學電腦遊戲設計社 進階社課-3

目錄

繼續閱讀 “設計模式介紹"