# NCTU RUSH, Java Final Project 塔防遊戲:「NCTU RUSH」 ## 題目描述 這作品為一般大多數人可能都玩過的塔防遊戲,遊戲規則是怪物會沿著路徑走,而玩家要在路徑旁設置不同功能的砲塔,想辦法阻止怪物走到終點。 ## 特色與功能介紹 * 地圖路徑為隨機產生 * 玩家初始有20條生命,當歸零時即遊戲結束 * 將四個同樣的砲塔併在一起會合併成一個巨大的砲塔,攻擊力與範圍都大大提升 * 每過五回合會進行一次空襲,每座未升級的砲塔皆有機率隨機被破壞消失,關卡越後面破壞機率越高 * 可以花較高的金額將同種類的砲塔一次升級 * 遊戲內有豐富的音效與背景音樂!! **** ## 系統架構 ![](https://i.imgur.com/nR0ynQd.png) **** ## **執行結果** ### 遊戲初始畫面 ![](https://i.imgur.com/OUY1K2e.png)   按下Start Game 即開始遊戲 ### 遊戲畫面 ![](https://i.imgur.com/mxM7Glv.png) ### 空襲畫面 ![](https://i.imgur.com/kfMUkle.png) ### 遊戲結束畫面 ![](https://i.imgur.com/JoqFuVH.png) **** ## **使用到的技術** * GIF製作 * mouseListener * javaztoom.jl.player * thread * button * JPanel * JFrame * Actionlistener * MouseListener * linked-list * arraylist * io * nio **** ## 心得        在剛開始學JAVA的時候,還覺得JAVA好難用,不好上手,後來才慢慢地覺得JAVA真的是很強大的程式語言,在開始打專題後,真的深深覺得愛上了它。這打專題的過程中,真的學到了很多很多的東西,遠遠超過在上機之中學到的,上機是學基礎,而做專題,則是學會如何將之前所學的做整合,將他呈現出來。          這次的專題中遇到的第一個問題是座標,不知道如何將想放的東西放到想放的位置,後來才知道是layout的問題。之後還有遇到的問題就是敵人的移動方法,一開始是寫死,後來由於要適應不同地圖,所以花了很多時間重寫,好不容易能配合各種地圖。其他問題像是攻擊的動畫,我也研究了很久,有些是直接用gif檔,但直接將gif丟到java中,大部分的畫質都會跑掉,所以效果會不好,就只能直接用timer配合panel來製作。音樂也花了蠻多時間研究,因為那時候還沒學thread,所以對從網路上直接抓下來的package不太了解,後來才知道為何。這次的專題,很謝謝組員給的很多idea,也很謝謝助教的評論,因為這些幫助,才有今天的專題。Java課程結束了,很謝謝蔡媽這學期的教導,以後會繼續自己研讀下去。 **** ## 工作分配 ### 我的貢獻 報告、Map、Tower、Enemy、Status,主要的塔攻擊方式、怪物的移動、塔的升級、音效、讀檔 ### 另一位同學的貢獻 報告、main、Map、Menuframe、ShowImage、CreateMap(隨機產生路徑的演算法)