《G SRPG》項目講解(一) Level&Map
《G SRPG》是使用Godot游戲引擎制作的一個【SRPG】類型的項目。該項目的源碼可訪問:https://www.aliyundrive.com/s/XY2qHQwGK26 獲取。這個專欄主要是說說我在制作《G SRPG》時的想法與思路。
棋盤是SRPG的基礎(chǔ)要素之一。本文簡要分享我在制作《G SRPG》的實現(xiàn)思路。
關(guān)于棋盤:
在此項目中,棋盤的場景及組件都存放在了【Map】文件夾下。文件結(jié)構(gòu)如下:

雖然說該文件夾下的文件比較多(而且分類做得不好),但核心組件只是如下幾項:
Sub.tscn :選中下標(biāo)。非常重要的一個組件(因為該項目設(shè)計上操作是全鍵盤的)。
Clicks.gd :提供可讓Sub選中的區(qū)域。
Map.gd :管理繪制的TileMap
Units.gd :管理棋子的增減與行動系統(tǒng)(此項目中以棋子的速度決定行動順序)
Level.tscn :初始化組件
下面來介紹Level與Map:
Level.tscn
level

level的作用主要是做組件的初始化工作。
設(shè)置了三個變量方便設(shè)計關(guān)卡:
winNextScene :獲勝后載入的場景
loseNextScene :失敗后載入的場景
joinUnitNum :可以參加戰(zhàn)斗的棋子的人數(shù),這與另外一個場景(Plan)有關(guān),此處不介紹。
Map.gd
這腳本主要提供了用于棋子尋路的A*算法與用于顯示棋子可以抵達(dá)的區(qū)域的洪水算法。
obsSet :為了方便修改障礙物與設(shè)置經(jīng)過障礙物所消耗的代價。以key為圖塊下標(biāo);value為經(jīng)過代價。如果代價是1以下的數(shù)值將是不可穿越的。

前面有幾段是轉(zhuǎn)換棋子們的坐標(biāo)
此函數(shù)使用了 MakeGrid.gd ,關(guān)于這個可以看我之前的視頻。顯示攻擊區(qū)域的話,不在Map中調(diào)用也是沒有問題的,不過在寫的時候,考慮到可能后續(xù)會有什么“不能隔著障礙物攻擊目標(biāo)”的攻擊模式所以就就將攻擊的顯示可攻擊區(qū)域的函數(shù)放到了Map中。

當(dāng)前的設(shè)計來說,無論攻擊區(qū)域上有沒有障礙物都是可以顯示攻擊區(qū)域。
接下來就是移動了,移動的話,一般顯示移動都是一個范圍,這個可以使用洪水算法這個我也是在搜索后才知道的,所以有問題果然還是馬上搜索一下比較好。

這里在寫的時候,我做了將得到的范圍減去內(nèi)圈只保留最外面一圈的操作,這一段沒有什么愿意,即使刪掉減去內(nèi)圈的代碼也沒有什么影響。

既然現(xiàn)在有區(qū)域了,那接下來就需要讓棋子移動到一個位置上去,這個項目中使用的是A*,我在這個項目中得到,大家可以去看載看一下。

說點閑話
這是第一次寫這種東西,寫得不好請見諒。