Github: https://github.com/MaxWutw/CP_project 更詳盡且最新的 README 檔案可以看我們的 GitHub ,會隨時更新內容,並提供更加詳盡的教學。
作者:吳振榮、吳立宇、伍駿宇
- 至少支援場景、人物、物品三種實體(完成)
- 至少支援場景背景、人物頭像、人物立繪、物品圖標等圖片素材(完成)
- 支援對話選項與多支線劇情設定(完成)
- 能實現劇本檔中期望呈現之內容(完成)
- 支援場景背景與人物立繪之疊加顯示(完成)
- 玩家需要有角色設定、可以放物品的背包(完成)
- 不能出現壞掉的排版(完成)
- 支援角色個人心情數值(完成)
- 至少要有三個角色(完成)
- 至少要有三個場景(完成)
- 至少要有兩個物品(完成)
- 至少要有三個結局(完成)
- README 說明書文件(完成)
- 最佳實踐 GitHub(完成)
- 場景動畫(完成)
- 心情變換(完成)
- 遊戲存檔(完成)
- 音效播放(完成)
- LLM(未實作)
- 進階 Script 使用 Lua(未實作)
需要額外安裝的內容有
- libsdl2-dev
- libsdl2-image-dev
- libsdl2-ttf-dev
- libsdl2-mixer-dev
- libsdl2-mixer 在終端機執行以下指令下載以上內容
sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev libsdl2-mixer
-
將我們的程式載入到您的電腦內,下 make 指令編譯後,
./engine即可開始運行。 -
遊戲點開出現三個選項
- 第一個:開始遊玩
- 第二個:查看這個遊戲的遊戲目的
- 第三個:若有存檔案,可按此鍵繼續遊玩
-
進入遊戲後,可根據顯示的文字,由下面三個選項,決定你想要的劇情發展。另外,藍色案件為存檔鍵,紅色按鈕點進去為背包。
-
紅色背包點進去後,左上方圖案顯示心情的圖案,右邊是心情值,下方是目前遊戲中擁有的物品。
-
藍色存檔鍵點進去後,你可以選擇存檔下次繼續玩,或取消。
-
在 How To Play 中可以按下空白鍵跳過一個字一個字慢慢渲染,當文字都顯示完畢後,按下任何鍵可以跳回主畫面
-
在對話匡中的文字一開始會一個字一個字渲染,直到輸出完全部,若不想要等它一個一個慢慢渲染,可以按下空白鍵跳過。
script="script name"
start=1 //to determine the head of the script
[item]
{1,"name","pic.bmp"}
[player]
stat.name="luck"
stat=5
[npc]
{1,"name","pic.bmp","status_name",5}
{2,"name","pic.bmp",NULL,0}
//the status name and value must be set to NULL and 0 if not used
[1]
title="name"
background="background.bmp" //optional, but must be defined in the beginning
text="this is a test."
option={2,3,4} //the next option
to={3:5, -1:7} // 有物品3的話 跳到劇本5
item={-1,1,-1} //optional, put -1 if no condition, put id if need this item to get this option
player.stat=5 //optional, set player’s status value
player.inventory.add=1 //optional, can be multiple(?)
npc.1.stat=3 //optional, set npc’s stat value
[2]
title="test"
text="this is the end of the test."
option={0,0,0} //put 0 if no further option
player.stat=10script="script name"中填寫劇本的名稱start=1表示劇本開始的 key(通常為 1)(key 為劇本裡中括號內的數字)
[item]用中括表示以下開始是物品- 範例:
{1,"name","pic.bmp"}1為物品的編號 隨著你需要的物品數 可以自行自然數排下去"name"為該物品的名稱"pic.bmp"為該物品的照片 須提供照片的完整路徑
- 我們遊戲中主畫面 有支援玩家的數值(數值名稱自訂)
- 在
[player]中設定 - 範例:
stat.name="state name"stat=5state name為該數值的名稱state的數值為該數值的起始值 可自訂
[npc]中設定,在劇情中會跳出的人物- 範例:
{1,"name","pic.bmp","status_name",5}{2,"name","pic.bmp",NULL,0}1第一個數值為 NPC 隻編號 同於物品"name"為該 NPC 之名稱"pic.bmp"為該 NPC 之圖片 須提供照片的完整路徑"status_name",5同玩家數值 但 NPC 可以選擇不要此功能 則填入NULL,0即可
option格式:有三個劇情發展,讓玩家選擇to格式:玩家無法選擇,根據玩家身上的物品,決定劇情發展
[3]
title="書生"
background="img/background.jpg"
text="你是一個大官的兒子,從小父母就給你很好的栽培"
option={5,6,7}
player.stat=60
mood = { "img/nomood.jpg" , 60 }[3]裡面的數值很重要,我們稱之為key,為引導劇本的關鍵- 一個
key裡面的內容,我們稱之為節點,劇本的運行就是靠著不斷尋找下一個節點,直到結束(後面介紹如何結束) title為該選項的標題,也是上一個節點中,玩家能看到選擇劇情的提示(to格式後的劇情不需要title)background為該節點背景的圖面 須提供完整路徑text玩家若選擇此劇情,會顯示的句子option裡面填寫的三個數字,代表會接下去可能劇情的keyplayer.stat為該節點顯示於主畫面玩家的數值mood為支援心情值,顯示於點開包包後的地方,需填入兩的數值,前者為圖面,需提供完整路徑,後者為該心情數值
[20]
title="反擊"
to = { 2:21 , -1:22 }title若上一個節點為option格式,則有title,同上,為上一個節點中,玩家能看到選擇劇情的提示to這個概念是,假設玩家有 a 物品,就跳到 b 劇情,沒有則跳到 c 劇情- 其中填入四個數字,第一個數字為要檢測的物品編號,第二個數字為有該物品,跳到劇情的
key,第三個數字固定為 -1,表示沒有該物品,第四個數字則是沒有該物品跳到的劇情 - 以範例中為例子:
to = { 2:21 , -1:22 }- 意思是:如果有編號 2 這個物品,跳到 key 為 21 的劇情,沒有則跳到 22
- 其中填入四個數字,第一個數字為要檢測的物品編號,第二個數字為有該物品,跳到劇情的
我們的專案中,包含四個資料夾:
DataSave: 存放遊戲進度的檔案,若玩家有在遊戲中存檔過則會自動生成,可以自行修改裡面的內容,我們目前預設放一個範例給使用者看。font_lib: 存放所有遊戲內會用到的字體。img: 存放所有遊戲劇本會用到的照片,可自行修改。music: 存放遊戲中會用到的音效。
- 從 GitHub 下載我們的程式
- 下載 SDL 以及 SDL_mixer 和 SDL_ttf
- 照著上述的劇本格式,完成一個劇本,檔案名稱取
script.toml - 將劇本會使用到的照片存入
img資料夾 - 準備
how_to_play.txt文字檔,用於玩家選案 how to play 時生成的文字 - load 只會讀取 DataSave 中的資料,同時只會讀取 *.json ,值得一題的是, json 檔的第一行要是
"NTNUFINAL":2147483647,才會被視作我們遊戲的存檔。ps: 可以多放幾個 json 檔案,在挑選檔案的時候有小特效可以看。
gcc (GCC) 13.2.1
libsdl2-dev
libsdl2-image-dev
libsdl2-ttf-dev
libsdl2-mixer-dev
- SDL - license
- Lovepik - https://lovepik.com/images (載圖片)
- Fork the repository.
- Create a new branch (
git checkout -b feature-branch). - Commit your changes (
git commit -m 'Add some feature'). - Push to the branch (
git push origin feature-branch). - Open a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
- [吳振榮] - [WuMax13@gmail.com]
- Project Link: https://github.com/MaxWutw/CP_project