20220528 大作業二
Sprout 2022
註:這個投影片純粹整理與上課用,
作業詳細內容請以spec為主,
大作業二介紹
主題:Space Shooter
玩法:這是一個雙人射擊遊戲,
兩位玩家分別是一架戰鬥機,
有血量、經驗值、子彈威力等等數值。
先把敵方戰鬥機打死的玩家勝出。
大作業二介紹
講師試玩
遊戲規則
遊戲中,大家可以看到以下幾種物件:
戰鬥機、子彈、隕石、道具(藥水)
戰鬥機:就是玩家,玩家要按鍵盤來上下左右移動與發射子彈。
子彈:發射後,如果打到敵方戰鬥機,敵方戰鬥機會損血。
隕石:玩家撞到的話會損血,但如果用子彈打掉會得到經驗值。
經驗值可以增加子彈的威力。
道具:玩家吃到的話會獲得某些正面效果。
你們要做的事情,
就是給這款遊戲新增更多要素,
讓遊戲可以出現更多花樣~
大作業二介紹
Windows:請下載 HW2_windows.zip
下載遊戲
Linux:請下載 HW2_linux.zip
Mac:請下載 HW2_mac.zip
下載好後,請把檔案解壓縮,
並把解壓縮後的資料夾,放在桌面。
安裝套件 - Linux
如果你是使用 Linux 的人,
請打開你的 Shell,輸入
sudo apt-get install make g++
sudo add-apt-repository ppa:allegro/5.2
sudo apt-get install liballegro*5.2 liballegro*5-dev
安裝套件 - Mac
如果你是使用 Mac 的人,
請打開你的終端機,輸入
brew install allegro
brew install pkg-config
進入資料夾
現在我們把要安裝的東西都裝好了。
再來我們打開Shell / 終端機,輸入:
cd Desktop
(如果沒辦法 cd Desktop,那就 cd Downloads,然後把原本桌面上的資料夾移到下載)(跟當時大作業一的方法一樣)
進入資料夾
cd Desktop 好了以後,進入我們的資料夾
cd HW2_windows
Windows:
Linux:
Mac:
cd HW2_mac
cd HW2_linux
編譯程式
如果前面這些事情你都完成了,
我們就來試著跑跑看我們的遊戲吧!
首先先來編譯:
make
Windows:
Linux:
Mac:
make
./build.bat
執行程式
Windows:
Linux:
Mac:
./bin/main
./run.bat
./bin/main
如果是 Windows 系統,也可以直接用滑鼠點 build.bat 和 run.bat 來編譯與執行哦~
執行程式
如果執行成功的話,你應該會看到:
恭喜你~你可以開始玩(X)做作業(O)了~
Tip
每重新打開一次 Shell / 終端機,
要記得再重新cd進正確的資料夾哦~
(不然你可能會收到 file does not exist 之類的訊息)
每當你修改完你的程式,想測試的時候,
要記得先存檔、重新編譯後,再執行哦~
(不然你的遊戲可能還是會是修改前的樣子,沒更新到)
資料夾架構
在你下載完以後,應該會看到資料夾有不少東西:
我們來針對幾個比較重要的來做介紹:
資料夾架構
image:裡面有各種遊戲物件的圖檔,
你可能會需要新增or減少or修改裡面的東西。
src:主要的程式碼都在裡面,
你在作業中需要改的東西也幾乎都在這裡面。
這裡列出的是你主要會需要修改到的東西:
資料夾架構
Makefile (只有 Windows 沒有):
為了讓我們能更方便的編譯程式 而寫成的檔案。
這裡列出的是你有可能會想修改的東西:
build.bat、run.bat (只有 Windows 有):
跟Makefile功能類似的東西。
註:上面列出的這幾個原則上不太需要做修改,
不過如果你有新增自己的程式碼檔案的話,
還是需要改一下裡面的內容,將該檔案加入才可以正常編譯。
資料夾架構
bin:你的遊戲在編譯後,會被放到bin資料夾裡面。
這裡列出的是你原則上不太需要修改的東西:
include、lib、mingw64 (只有 Windows 有):
為了讓遊戲能夠正常編譯而放的東西。
hw.cpp:
純粹是講師根據參考資料所自己做成的草稿,跟作業內容無關。(當然想玩也可以玩)
資料夾架構 - src
engine:內含遊戲引擎相關的程式碼,
包括遊戲的開始畫面、進行畫面、結束畫面等。
main.cpp:遊戲的主程式。
src 資料夾特別重要,我們再列出它的內容:
object:內含遊戲物件相關的程式碼,
其中有玩家、子彈、隕石、道具等物件的各種屬性。
AI:AI相關。後面會介紹到。
utils:一些 debug 用或者畫圖用的 function 會被寫在裡面。
程式架構
遊戲架構
物件介紹
遊戲中,主要的物件有太空船、子彈、隕石、道具。
這些物件都具有以下參數及函式:
x、y:分別代表他們位置的 x 座標和 y 座標。
speedX、speedY:分別代表他們的速度的 x 分量和 y 分量。
destroy():物件消失時要釋放資源。
update():遊戲到了新的tick要更新物件的狀態。
物件介紹 - 太空船
太空船有以下幾個獨特的參數:
血量(hp):
界在 0~100 之間,開局時是 100 。若是歸零就輸了。
子彈威力(bullet_power):
敵人被打到時所造成的傷害。正整數,開局時是 3 。
經驗值(exp):
界在 0~100 之間,開局時是 0 。
每打掉一個隕石會加 20 ,滿 100 時會讓子彈威力加 1 。
太空船有以下幾個獨特的參數:
能量(energy):
界在 0~100 之間,開局時是 100 。
每個 fram 會回復 1 ,每射一發子彈會消耗 20 ,
如果能量小於 20 就無法發射。
冷卻時間(bullet_cool):
界在 0~5 之間,開局時是 0 。
射子彈後會變成 5 ,每個 fram 會減少 1 ,
如果冷卻時間大於 0 就無法發射。
物件介紹 - 太空船
子彈的特性:
玩家每個 fram 可以向正前方花費 20 點能量發射一發。
子彈打到對手可對對手造成傷害(傷害值由玩家的子彈威力而定)。子彈打到隕石可讓玩家增加 20 經驗值。
物件介紹 - 子彈
隕石的特性:
每個 fram 可能會隨機從地圖邊界的某些地方生成,然後飛向地圖內。
玩家若是撞到,血量會減3。
玩家若是用子彈打掉,經驗值會加20。
遊戲越後期,生成的隕石數量越多。
物件介紹 - 隕石
每個 fram 有一定概率在場地的某處生成道具,
玩家吃到道具的話會獲得某些正面效果。
以下是道具種類:
補血包(紅色藥水):玩家撿到時,HP+30。
經驗包(紫色藥水):玩家撿到時,子彈威力+1。
能量包(綠色藥水):玩家撿到時,energy+100。
物件介紹 - 道具
這次的作業有用到一個東西叫做 allegro。
Allegro 是一個特別針對於電子遊戲的開發的自由軟體程式庫。
程式介紹 - allegro
在我們的作業中,有用到以下幾個 allegro 相關的 function:
程式介紹 - allegro
程式的部分就先介紹到這邊~
剩下的就交給大家自己摸索囉~
評分方式
送分嗎?(20%)
好像有BUG(10%)
大AI時代(20% + bonus 10%)
四人遊戲比較好玩(10%)
新增子彈種類(20%)
新增道具種類(20%)
bonus(10%)
最後要繳交:你的程式檔案、一份報告(後面會細講)
評分方式 - 送分嗎?(20%)
成功跑起遊戲(10%)
更改各種 icon(5%)
讓 P1、P2 各勝利一次(5%)
把遊戲跑起來的畫面截圖,放進報告中即可
請更改兩種或以上的 icon。
把兩個玩家的勝利畫面截圖,放進報告即可。
評分方式 - 有BUG(10%)
遊戲有個小 BUG 在結束程式時無法正常結束,
請把它修正並在報告中描述你怎麼修正和發現的。
(如果在程式結束時有 log 出
successful finish 就代表你完成了。)
註:請不要把 delete mainGame 刪除掉,
這樣會看到 successful finish 但不會有分喔,
也請不要亂移動 log 的位置。
關於 AI
簡單來說,你的 AI 要有 initial 和 update 兩個 function。
在原本沒 AI 的版本中,飛行船的操控是由鍵盤狀態決定,
而 AI 要做的事,就是取代原本的手動鍵盤操控,改成會自動根據場上的樣貌,來判斷出下一步該如何行動。
評分方式 - AI(20%)
請修改遊戲,讓遊戲可以透過 Model class 中, update 回傳的值來控制對手 (Player 2) 玩家(10%)
(請在報告中描述你的程式要怎麼讓 AI model 控制,比如 model 程式碼的檔名)
如果有做四人遊戲 (晚點會提到),請同時支援對手的2個 Model 的操控(5%)
在 AI 資料夾有個 Model 請繼承他並設計自己的 AI(5%)
評分方式 - AI(bonus 10%)
你設計的 AI 理論上可以控制其中一方的戰鬥。
講師也會設計一個 AI,
並且把你的 AI 拿來和講師做的 AI 對打。
如果你的 AI 能夠打贏講師的 AI,就能拿到這 10 分。
評分方式 - 四人遊戲(10%)
請將遊戲由兩人改為四人 (2 vs 2) 遊戲(5%)
請讓同隊的角色不會互相撞到,
但子彈會打到隊友並且會正確的扣血(5%)
評分方式 - 新增子彈(20%)
請為每一個玩家設計他自己獨特的子彈 (5% * 4)
可以加上一些 buff,例如:概率性爆擊...之類的
評分方式 - 新增道具(20%)
請設計更多種不同的道具 (5% * 4)
例如:吃到之後會無敵一段時間 等等
記得在報告裡寫一下道具的長相和功能。
評分方式 - bonus(10%)
如果你想到更多你覺得好玩的遊戲機制,
可以直接做出來,然後寫進你的報告中~
繳交方式
程式檔案
報告
完成你的作業後,繳交之前請先把 bin 資料夾刪除,
使用 Windows 的同學也請把 mingw64、lib、include 資料夾刪除。
然後,把整個 hw2_*** 資料夾,壓縮成 .zip 檔。
簡單講你在每項作業中做了什麼,以及怎麼做到的。
如果你的程式有特殊的編譯方式,包含你有修改 Makefile、build.bat、run.bat 的話,都要在報告裡說明。
最後作成 .pdf 檔。
繳交方式
最後,把你壓縮後的 .zip 檔和報告的 .pdf 檔,
丟上你的雲端硬碟,
講師預計之後會發 google 表單,讓你們把你們作業的連結告訴講師。
祝大家作業順利~
繳交期限:6/23
Copy of 20220528 大作業二
By allen522019
Copy of 20220528 大作業二
- 490