• 沒有找到結果。

雷電雷電雷電雷電((((天堂地獄門天堂地獄門天堂地獄門天堂地獄門))))

N/A
N/A
Protected

Academic year: 2022

Share "雷電雷電雷電雷電((((天堂地獄門天堂地獄門天堂地獄門天堂地獄門))))"

Copied!
10
0
0

加載中.... (立即查看全文)

全文

(1)

Computer Organization and Assembly Languages Final Project

雷電 雷電

雷電 雷電( (( (天堂地獄門 天堂地獄門 天堂地獄門) 天堂地獄門 )) )

組員名單

B96902028 姜柏宇 B96902042 周劭儒 B96902082 邱璽安 B96902097 曾清陽

(2)

目錄

一、 前言

二、 遊戲簡介 三、 實作

四、 心得感想 五、 參考資料

(3)

一、前言

當初給我們做這個遊戲的靈感,源自於偶然間在 PS2 上回味的一款經典遊戲「雷電Ⅲ」,這應該是蠻多人的共同 的回憶,尤其是有玩過街機(大型機台)的人更是難忘,是 90 年代熱門的平面射擊遊戲,其瘋迷年輕人的程度不亞於現今 PS2、Xbox 的遊戲,算是有點難度的遊戲,可雙人同時操作,

關卡共 8 關,全破後便從頭開始。

【PS2:雷電Ⅲ】 【雷電Ⅲ遊戲畫面】

遊戲內容以摧毀敵機為目的,打敗敵人會隨機掉落較強的武 器、生命、積分等獎勵,每關最後都會有較強的戰機(魔王),

每次有三條生命的機會,當生命歸零時,遊戲結束。

(4)

二、 遊戲簡介

《操作方式》

向上鍵 ↑ 向下鍵 ↓ 向左鍵 ← 向右鍵 → 發射子彈 Z 鍵 確認 Enter 暫停 Alt

《敵方》

『子艦艇』 『母艦』(魔王)

【武器】

《我方》

『秋陽劭宇號』

【武器】

(5)

三、 實作

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)比如敵人出現,爆炸

(6)

等等。

飛機行進方向 飛機行進方向 飛機行進方向 飛機行進方向

在 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++)

(7)

子彈 子彈 子彈 子彈

用 times 紀錄現在有幾發子彈在螢幕上(最多四發),每次 call attack() 就讓子彈 y 座標-4,當子彈 y 座標<4 就 delete 掉。

當子彈打到敵人,就讓 enemy 爆炸,delete 掉敵人並且 count++來紀錄已經打死的的人數量。

(8)

四、心得感想

柏宇:

從無到有,從選擇隊員、主題到現在已經有個 成品出現,真的令人覺得神奇、充實。

以前總覺得要寫遊戲等等應該是我很久很久以 後才接觸到的範圍,沒想到大二上完組語就要開始寫 自己的遊戲。幾天不眠不夜的討論跟 coding,真的都 是一生難忘的回憶。

劭儒:

這應該是我們上大學以來第一個比較大型的程 式。這跟以往的寫程式不太一樣,我們不但要寫自己 的 code,還要跟別人寫的合在一起。這是一種新挑 戰。組員必須事先溝通好要怎麼寫,不然會出現相當 多 bug。像是變數名稱重複等等。相信我們下次會做 得更好。

璽安:

首先,我要感謝的人有很多,最主要的當然是 我們的 team,雖然我們不是強者,可是卻也能夠寫出 個小遊戲(當然這對我們而言可說是大遊戲了),連續 多天的操勞,雖然過程艱辛無比,但是看到自己的遊 戲跑成功的那一瞬間,這一切都是值得了!

(9)

清陽:

我想這三天在系館沒天沒夜的不斷的討論、

debug、coding,七十二小時的體力考驗,大家真的是 累到半死,成品儘管不是很精美,但對我們來說確是 上大學以來做出來最有成就感的作業,並從中學到很 多寫程式的經驗,更重要的事體認到分工的重要和如 何精確的分工。

(10)

五、參考資料

http://www.aaronrogers.com/ham/

同學

參考文獻

相關文件

可是一進家門就覺得不對勁。雖然餐桌上已經準備了豐盛的晚餐,但是家 裡的門居然沒鎖,電燈、電視也全都開著,我們一直呼喊著: 「阿公、阿

為避免雜訊的干擾,一般在按鍵輸入時,會接一個電阻來將輸入端的電壓提高到高電位 (VDD),這個電阻就稱為提昇電阻。如圖中的 R(10KΩ)。常用的提昇電阻大約為 1K~100K Ω之間。在 PIC16F877 中

任天堂可以玩 3D 遊戲的遊戲機(任天堂 3DS)預定二月 26 號在日本開賣,任 天堂寄望它的最新產品,可以把它帶回到消費新聞的焦點。. 剛剛結束的這個聖誕節,任天堂很寂寞,因為鋒頭都被微軟的 Kinect

  第十復有眾生。常在雪山中寒風所吹皮肉剝裂。求死不得。何罪所致。佛言。以 前世時。坐橫道作賊剝脫人衣。使冬月之日令他凍死。生

說到地獄,一般人很自然會聯想到「十八層地獄」,在我們現 實生活中比較接近的則有監獄、看守所,犯人都是身陷囹圄,枷鎖

小大之獄,雖不能察,必以情:大大小小的訴訟案件,雖然不能一一細 察,也必定會按實際狀況,合乎情理地處理。獄:訴訟、案件。察:仔

14.當香港天文台發出雷暴警告時,在室外進行的體育活動應予中 止、取消或改期。如香港天文台發出局部性雷暴警告,請參閱 第一章 註

使我們初步掌握了電壓、電流和電阻三者之間的關係。我