Computer Organization and Assembly Languages Final Project
雷電 雷電
雷電 雷電( (( (天堂地獄門 天堂地獄門 天堂地獄門) 天堂地獄門 )) )
組員名單
B96902028 姜柏宇 B96902042 周劭儒 B96902082 邱璽安 B96902097 曾清陽
目錄
一、 前言
二、 遊戲簡介 三、 實作
四、 心得感想 五、 參考資料
一、前言
當初給我們做這個遊戲的靈感,源自於偶然間在 PS2 上回味的一款經典遊戲「雷電Ⅲ」,這應該是蠻多人的共同 的回憶,尤其是有玩過街機(大型機台)的人更是難忘,是 90 年代熱門的平面射擊遊戲,其瘋迷年輕人的程度不亞於現今 PS2、Xbox 的遊戲,算是有點難度的遊戲,可雙人同時操作,
關卡共 8 關,全破後便從頭開始。
【PS2:雷電Ⅲ】 【雷電Ⅲ遊戲畫面】
遊戲內容以摧毀敵機為目的,打敗敵人會隨機掉落較強的武 器、生命、積分等獎勵,每關最後都會有較強的戰機(魔王),
每次有三條生命的機會,當生命歸零時,遊戲結束。
二、 遊戲簡介
《操作方式》
向上鍵 ↑ 向下鍵 ↓ 向左鍵 ← 向右鍵 → 發射子彈 Z 鍵 確認 Enter 暫停 Alt
《敵方》
『子艦艇』 『母艦』(魔王)
【武器】
《我方》
『秋陽劭宇號』
【武器】
三、 實作
main.c main.c main.c main.c
首先,我們把 main.c 裡一開始的必要初始函式都寫進
start(),跟背景(移動)有關的初始函式都寫進 bg(),再來 是 map() 可以每次 call ham_StartIntHandler(…)的時候 都改變背景 map 的座標。
主選單 主選單 主選單 主選單
我們在 start()裡面,用 mark 紀錄遊戲者選擇的難易度。初 始值為 easy(mark=1)。有兩個 lebel,mark1 和 mark2。
在 mark1 裡,如果 START 和 DOWN 都不按,就一直顯示 easy mode 的圖;一按了 DOWN,mark 改為 2,所有 easy mode 圖 DeInit 掉,Initial 所有 hard mode 的圖 然後進入 label mark2;一按了 START,DeInit 所有 easy mode 的圖,在直接 往下執行。
在 mark2 裡,反之亦然。
C CC
Change();hange();hange();hange();
是整個程式裡最重要的大 function,當 main call 了 ham_StartIntHandler(…)以後,就會一直執行 change。所 以要控制時間流程等 都在這個 function 裡用變數控制。
所有的小 function 都是在這裡 call 的(因為每次執行
vertical blank 都會 call 到 change)比如敵人出現,爆炸
等等。
飛機行進方向 飛機行進方向 飛機行進方向 飛機行進方向
在 move()裡,紀錄了飛機的行進方向,在 ADI()裡,會刷新 飛機方向的圖片(左偏 右偏 往前有火焰等等)
位置更新 位置更新 位置更新 位置更新
update_position()裡面,每次 change 都會 call 它 所以每 次 vertical blank 都會 update 一次。
敵人 敵人 敵人 敵人
32*32 的點陣圖,用 enemy_appear[i]是否等於 1 來決定第 i 個是否有敵人。若被我們子彈射到或是 y>160(超出螢幕)
就 delete 掉。
魔王 魔王 魔王 魔王
64*64 的點陣圖兩張(一左一右),在消滅 20 個敵人後會出 現,分別被打到 20 下才會爆炸。打贏魔王了以後 用
timelast++來拖延時間,當 timelast=500 後 break 遊戲結 束。
爆炸 爆炸 爆炸 爆炸
不然是敵人爆炸還是自己爆炸,都是用 change 裡的變數來 控制爆炸時間。Ex.0<aux<20 出現爆炸的第一個圖,
20<aux<40 出現爆炸的第二個圖…(在 change 裡面 aux++)
子彈 子彈 子彈 子彈
用 times 紀錄現在有幾發子彈在螢幕上(最多四發),每次 call attack() 就讓子彈 y 座標-4,當子彈 y 座標<4 就 delete 掉。
當子彈打到敵人,就讓 enemy 爆炸,delete 掉敵人並且 count++來紀錄已經打死的的人數量。
四、心得感想
柏宇:
從無到有,從選擇隊員、主題到現在已經有個 成品出現,真的令人覺得神奇、充實。
以前總覺得要寫遊戲等等應該是我很久很久以 後才接觸到的範圍,沒想到大二上完組語就要開始寫 自己的遊戲。幾天不眠不夜的討論跟 coding,真的都 是一生難忘的回憶。
劭儒:
這應該是我們上大學以來第一個比較大型的程 式。這跟以往的寫程式不太一樣,我們不但要寫自己 的 code,還要跟別人寫的合在一起。這是一種新挑 戰。組員必須事先溝通好要怎麼寫,不然會出現相當 多 bug。像是變數名稱重複等等。相信我們下次會做 得更好。
璽安:
首先,我要感謝的人有很多,最主要的當然是 我們的 team,雖然我們不是強者,可是卻也能夠寫出 個小遊戲(當然這對我們而言可說是大遊戲了),連續 多天的操勞,雖然過程艱辛無比,但是看到自己的遊 戲跑成功的那一瞬間,這一切都是值得了!
清陽:
我想這三天在系館沒天沒夜的不斷的討論、
debug、coding,七十二小時的體力考驗,大家真的是 累到半死,成品儘管不是很精美,但對我們來說確是 上大學以來做出來最有成就感的作業,並從中學到很 多寫程式的經驗,更重要的事體認到分工的重要和如 何精確的分工。