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