您當前的位置:首頁 > 遊戲

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

作者:由 觀復 發表于 遊戲時間:2019-06-22

本文主要是來梳理下游戲內的基本系統(雖然只是照搬polytopia的,但是還是要總結一下),並預先做一些配置表,並實現讀取。

一、經濟系統

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

1。總述

經濟系統可以是整個遊戲的核心。在本遊戲中只有一種資源:金幣。

每個回合都會獲得一定數量的金幣。

金幣主要有兩種來源:城市基本產出和建築的額外產出。

金幣的消耗方式有三種:1。建造建築 2。解鎖科技 3。建造士兵,而士兵維持是不需要額外的金幣的。

2。城市的建設

和文明類遊戲一樣,每個地塊都有其所屬的城市。

在城市等級比較低的時候,只有該城市周圍1格的地塊屬於那座城市。而城市等級到達一定程度時,可以解鎖讓城市範圍擴張為2格。

地塊的開發分兩種:對於資源的收集和對於地形的開發。

每個地塊上都有對應的地形,針對不同的地形,可以建設不同的建築,比如森林地形可以建造伐木場,沃土地形可以建造農田等。

而在這個地形的基礎上,有些地塊可能會有一些額外的資源,比如動物和植物等,玩家在前期可以透過採集的方式來增加人口。

3。配置表設計

以下是配置表的設計:

首先是地形表。

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

在本系列最早的文章內,已經介紹了地形的生成方法,前文定義了Water,Plain,Mountain三種地形,對應海拔1,2,3。現在再加一種新的海拔0用以代表深海。這樣4種高度的地形就齊了。

而同一海拔的地形會有多種形態,比如海拔為2的平原將有平原、沃土、森林三種情況,透過科技這幾種狀態甚至可以相互轉換。而區分這幾種狀態的方式是增加額外的裝飾物。而資源id便是裝飾物的檔名,填0表示沒有任何裝飾物。

移動力花費指的是士兵移動走上去所需要消耗的移動點數。

然後是資源表。

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

和上面一樣,資源id指的是資源對應的檔名,生成地圖的時候,將根據所屬的海拔分配資源。比如鯨魚就只能出現在海拔為0的深海區域內。

獎勵型別分兩種,型別1指的是給所在的城市增加人口,型別2指的是直接增加金幣。

接下來是建築表:

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

地形指的是建造所需要的地形,對於的是地形表中的id,其中34這種兩位數的id指的是3和4兩種地形都可以,因為地形種類沒有超過10,所以就用這種方式實現了(如果超過10其實也可以,不過需要把10以上的數字改為abcd)

鄰近建築指的是有些建築建造,需要周邊地塊擁有某些建築。比如穀倉建造需要旁邊的地塊上有農田。

作用型別1指的是直接增加人口,比如碼頭的作用就是給該城市增加2人口。

作用型別2指的是,根據周邊地塊某建築的數量來加人口,比如穀倉的效果是周圍有一個農田就加1人口,所以穀倉的鄰近建築是3(農田),作用型別是2,效果是1。

作用型別3指的是根據周圍某建築的數量直接增加回合金幣,這也是唯一的一個直接透過建築增加回合金幣的途徑。

最後是城市表:

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

後續實現的時候會根據效果id實現對應的效果。其中1,2,3級城市的2個效果是2選一的。

二、科技系統

科技系統簡單說就是花費金幣解鎖科技,而隨著城市數量的增加,科技花費也要增加。

公式如下:

科技花費 = ( 基礎花費 + ( 城市數量 - 1 ) * 科技等級 ) * (1 - 科技減免)

科技分為3個等級,其基礎花費分別為5,6,7

科技減免指的是某個科技點了之後會有一個科技花費20%減免的效果。

下面是科技花費表:

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

很簡單的一張表。

下面是科技表:

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

這張表數量有點多,並且作用程式碼一欄我沒填。將來實現的時候會把這張表完善起來。

三、兵種系統

先把兵種表附上:

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

兵種就不多說了,大部分SLG遊戲都差不多。

比較注意的是:

1。船是無法直接製造的。陸地單位在碼頭處下海後,能變成一艘小船,小船的血量以及血量上限和該單位在陸地上時相當。

2。A攻擊了B,如果A在B的攻擊範圍內,則B會在同時進行一次反擊。

攻擊傷害=攻擊方血量 * 攻擊方攻擊 / ( 防守方防禦 * ( 1 + 防守方防禦加成 ) )

反擊傷害=反擊方血量 * ( 反擊方防禦 * ( 1 + 反擊方防禦加成 ) ) / 攻擊方攻擊

四、配置表的匯入和讀取

1。配置表的儲存

配置表的我是用excel儲存的,匯出方式是匯出為csv檔案。

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

csv檔案的匯出很簡單,先切換到想要儲存的那個excel標籤頁。

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

然後選擇另存為。

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

然後在儲存型別的時候切換到csv就行了,記得檔名也要改一下,因為這次匯出的只是一個標籤。

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

然後再在下面這個目錄中建立CSV資料夾,並且把想要讀取的csv檔案都放進去。

2。配置表格式的修改

這是的配置表有兩個問題:首先unity對csv格式據說不是很支援,最好改成txt格式。然後就是,這時候儲存出來的編碼是非utf-8的,所以unity直接讀會讀不出來。

這兩個問題手動操作肯定也是能夠解決的(用txt開啟,改編碼然後另存為txt格式),但是太麻煩了,尤其隨著製作的推進,表越來越多,每次都手動修改會浪費大量時間。

這時候就需要做一個內建工具了:

using

System。IO

using

System。Text

using

UnityEditor

using

UnityEngine

public

class

TranslateUTF8

{

[MenuItem(“MyMenu/UTF8Transform”)]

static

private

void

TransformUTF8

()

{

string

spriteDir

=

Application

dataPath

+

“/Resources/CSV”

DirectoryInfo

rootDirInfo

=

new

DirectoryInfo

spriteDir

);

foreach

FileInfo

csvFile

in

rootDirInfo

GetFiles

“*。csv”

SearchOption

AllDirectories

))

{

string

csvpath

=

csvFile

FullName

Translate

csvpath

);

}

Debug

Log

“utf8轉換成功”

);

}

private

static

void

Translate

string

path

{

string

content

=

File

ReadAllText

path

Encoding

Default

);

File

Delete

path

);

File

WriteAllText

path

Remove

path

LastIndexOf

“。”

))+

“。txt”

content

Encoding

UTF8

);

Debug

Log

path

+

“ 轉換完畢”

);

}

}

這是我以前寫的一個轉化工具,功能是把Resources/CSV這個資料夾下的所有csv檔案轉化成utf-8的txt檔案,並把原來的csv檔案刪除掉。

在專案中新建一個指令碼檔案,然後把這段程式碼複製進去把原來的替換掉就能使用。

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

這時候,回到unity介面,會出現一個MyMenu選單欄,進去後點選一下就行了。

3。配置表的讀取

從零開始做一個SLG遊戲(六)遊戲系統以及配置表

配置表是csv格式的。csv格式的意思是,原excel中,每一行的單元格之間,用逗號分隔開,如上圖。

所以在填寫配置表時,要儘量避免逗號的出現。以下是程式碼:

public class CSVUtil

{

public static List Process(string filePathName)

{

TextAsset asset = Resources。Load(filePathName) as TextAsset;

string file = asset。text;

List ls = new List();

if (file == “”)

{

return default(List);

}

else

{

string[] strList = file。Split(“\r\n”[0]);

foreach (string str in strList)

{

string s = str。Replace(“\n”, “”);

if (s != “”)

{

ls。Add(s。Split(“,”[0]));

}

}

return ls;

}

}

}

“\r\n”是換行符,但不知道是什麼原因,我用“\r\n”來分割字串後,還是有“\n”留下來,所以我在下面處理的時候把“\n”又去掉了一次。

標簽: csv  地形  科技  金幣  城市