學生: 109403019 鄒翔宇
Demo Video: https://youtu.be/gPuleGg4EC8
- Java 17.0.7 LTS (or above)
- JavaFX 17.0.7 LTS (or above)
- Maven 3.9.2 (or above)
- (Optional for dev) Scene Builder 19.0.0 (or above)
git clone
cd evasion-era
有兩種執行方式
mvn clean javafx:run
添加 VM options 才可執行,別忘記修改 path/to/javafx/sdk
成自己電腦的 JavaFX SDK 的路徑。
--module-path path/to/javafx/sdk --add-modules javafx.controls,javafx.fxml,javafx.media
文案修改自 ChatGPT-4
"Evasion Era" 是一款動態、刺激的雙人避險遊戲。在這個遊戲中,玩家將扮演人或鬼的角色,並在一個充滿飛來飛去的石頭的場景中進行追逐。人的目標是在時間內避開鬼和石頭,盡可能生存到最後;而鬼的目標則是在時間內抓到人。遊戲的挑戰性來自於石頭的數量和速度,以及鬼和人的移動速度。這是一款考驗玩家反應速度和策略的遊戲,帶給玩家無窮的樂趣。
方便快速瀏覽專案的架構
├── README.md # 專案說明文件
├── images # 專案圖片
│ ├── banner.png
│ ├── end.png
│ ├── game-setup.png
│ ├── game.png
│ └── rule.png
├── mvnw # maven wrapper
├── mvnw.cmd
├── pom.xml # maven 設定檔
└── src # 專案原始碼
└── main
├── java
│ └── com
│ └── evasionera
│ ├── EvasionEraApplication.java # 主程式
│ ├── controllers # 控制器
│ │ ├── BaseController.java
│ │ ├── EndViewController.java
│ │ ├── GameController.java
│ │ ├── GameSetupController.java
│ │ ├── HomeController.java
│ │ └── RuleController.java
│ └── models # 模型
│ ├── Ghost.java
│ ├── Player.java
│ └── Stone.java
└── resources # 靜態資源
├── com
│ └── evasionera # FXML 檔案
│ ├── end-view.fxml
│ ├── game-setup-view.fxml
│ ├── game-view.fxml
│ ├── home-view.fxml
│ └── rule-view.fxml
├── css
│ └── styles.css
├── images
│ ├── background.jpg
│ ├── ghost.png
│ ├── player.png
│ └── stone.png
└── music
└── dark_mystery_soundridemusic.mp3
graph TB
Home(("首頁 (home-view.fxml)")):::view
GameSetup["遊戲設置畫面 (game-setup.fxml)"]:::view
RuleView["遊戲規則 & 操作教學 (rule-view.fxml)"]:::view
GameView["遊戲進行畫面 (game-view.fxml)"]:::view
EndView["遊戲結束畫面 (end-view.fxml)"]:::view
Home -->|開始遊戲| GameSetup:::action
Home -->|遊戲規則 & 操作教學| RuleView:::action
GameSetup -->|Back to Home| Home:::action
RuleView -->|Back to Home| Home:::action
GameSetup -->|設置完成| GameView:::action
GameView -->|遊戲結束| EndView:::action
EndView -->|Back to Home| Home:::action
classDef action fill:#000,stroke:#333,stroke-width:2px;
於首頁可點選「遊戲規則 & 操作教學」按鈕或「開始遊戲」按鈕。
- 按下「開始遊戲」按鈕後,進入遊戲開始畫面。
- 按下「遊戲規則 & 操作教學」按鈕後,進入遊戲規則 & 操作教學畫面。
可以點選 Back to Home 按鈕回到首頁。
- 使用者輸入鬼和人的名稱、石頭的數量(石頭越多難度越高)
- 設置石頭數量。預設為兩顆下限,為避免畫面過於繁雜上限最多 5 顆。
觀看完規則可以點選 Back to Home 按鈕回到首頁。
遊戲規則
- 遊戲時限預設為 60 秒,可設置 10~120 秒。
- 鬼在時限內抓到人,鬼為勝利者。反之若沒有在時限內抓到人,人為勝利者。
- 使用者可以輸入石頭數量,預設為 2 顆下限,為避免畫面過於繁雜上限最多 10 顆。
- 鬼若是被石頭砸到,3 秒後會於原地復活,復活期間會變半透明狀態。人若是碰到仍算被抓到。
- 人若是被石頭砸到,則暈頭減速 0.45 秒,且不可使用特殊能力解除。
操作教學
- 人: 鍵盤 WSAD 控制移動,空白鍵使用特殊能力(短暫加速 1.2 秒)。
- 特殊能力冷卻時間 5 秒,也就是每 5 秒即可使用一次。
- 鬼: 鍵盤上下左右鍵控制移動。鬼的速度略快於人。
在充滿飛來飛去的石頭中進行追逐。
- 用圖片代表鬼和人之角色,並於角色上方顯示名字,角色可以在畫面中任意移動,。
- 鬼的移動速度比人快一點,但人有短暫提速的特殊能力。
- 石頭的初始方向為隨機,增加遊戲的變化性和挑戰性。速度則會在一個速度範圍隨機移動。
- 石頭撞到畫面邊界會加速反彈。
- 左上角會顯示遊戲剩餘時間。
- 顯示獲勝方、耗時。
- 顯示回到開始畫面按鈕。
Features
- 首頁
- 遊戲規則 & 操作教學按鈕
- 開始遊戲按鈕
- 遊戲規則介紹、操作教學畫面
- 遊戲設定畫面
- 使用者輸入鬼和人的名稱
- 設定遊戲時限
- 選擇石頭數量
- 遊戲進行畫面
- 人與鬼可以按照鍵盤控制移動(WASD、上下左右)
- 人可以按下空白鍵使用特殊能力(短暫加速 1.5 秒)
- 彈來彈去的石頭,人碰到遊戲結束、鬼碰到需要花 3 秒鐘復活
- 遊戲結束畫面
- 顯示獲勝方、耗時
- 回到開始畫面按鈕
Improvements & Bugs
- feat: 人與鬼上方會顯示名稱
- feat: 石頭反彈加速
- feat: 遊戲過程介面可以再優化好看一點
- bugs: 重新開始遊戲時,應該要清除上一局的資料
- bugs: 在設置遊戲頁面時,遊戲時間已經在倒數
- feat: 遊戲平衡,實際遊玩發現石頭可以直接把人砸死對於人過於劣勢,因此修改成石頭砸到人會減速 0.45 秒
- feat: 添加背景音樂
- bugs: 鬼連續碰到石頭有時會出現負面效果失效的狀況
- 封面: 主題、組員
- 開發工具
- 遊戲簡介、規則
- DEMO
- 困難的點
- 未來改善的方向
- 參考資料
- JavaFX 官方文件: https://openjfx.io/javadoc/17/
- 流程圖撰寫工具: Mermaidv10.2.3 Live Editor
- 按鈕的 CSS 樣式: http://fxexperience.com/2011/12/styling-fx-buttons-with-css/
- Maven 套件網站: https://mvnrepository.com/
- 協作工具(主要用於修正錯誤、優化程式碼): https://chat.openai.com/
- 圖片:
- 首頁背景圖片: https://unsplash.com/photos/I0oihJbNSIc
- Ghost: https://www.clipartmax.com/max/m2H7K9m2G6m2m2N4/
- Player: https://www.pngegg.com/en/png-bnfyu/download
- Stone (created by Icongeek26 - Flaticon): https://www.flaticon.com/free-icons/rock
- 背景音樂: https://fanlink.to/DarkMystery
- Bro Code - JavaFX Tutorial Playlist: https://youtu.be/_7OM-cMYWbQ?list=PLZPZq0r_RZOM-8vJA3NQFZB7JroDcMwev