Computer Organization and Assembly Languages Final Project
Keyboard DDR – an implementation
B94902021 陳奕傑 B94705018 謝宗桓
一、 研究動機
當初我們一起構思期末專題要做什麼,發現一些常見的小遊戲像是打磚塊、
貪食蛇等等都已經有人做了,就在我們想不出來題材的時候,我突然想到每 次去男宿找朋友,都會看到他的室友聚精會神的用手指玩著鍵盤上的跳舞 機,大概是線上遊戲之類的,這短暫的靈光一現,使我們決定把研究題目設 定為實作一個在鍵盤上進行的跳舞機遊戲。
我們實作出的程式可分為三個部分 a. 紀錄一個節奏的範本
這個部份是由
b. 依照節拍撥放錄下的範本 c. 跳舞機遊戲
二、 程式說明
整個程式主要是由 C 來 implement,遊戲的介面是 console。
在 Record(),我們記錄下使用者一開始所鍵入的舞步,並將它們存到 structure 中,在這裡,我們使用 X86 assembly 來 implement,原因是雖然在課堂上的作業 中,我們都是由 C or C++當作 main frame,並使用 assembly 來 optimization,可 是卻沒有真正學到如何在未來真正能夠獨立將 C 的核心 code outsourcing,因此 在這邊除了可以節省紀錄時的時間,使得 timer 能夠更準確的紀錄使用者所輸入 的舞步,更學到了如何將兩邊的檔案真正結合起來,使得將來能夠在這方面有所 應用。這裡面我們先讀入鍵盤所 key in 的文字,如果是 w, a, s, d 其中一個,則將 其記錄下來,並同時將其發生時間記錄在一個 structure 中。
時間的計算是利用 SetTimer 這個 Win33API,每隔 100Msec 就將 time_count 加一,而每筆 key in 的時間點就是 time_count 的數目。
在 play 中,我們將剛剛記錄下的舞步,按照時間順序、節奏 print 出來,以 確認剛剛輸入的舞步是正確的。
在 dance 中,我們在遊戲界面前多設置一個 score zone,只要在這個範圍內 key in 對的方向,即得到 1000 分。藉由累積分數判斷強弱。
關於 Assembly 的部分,我們主要是用它來加速對於 array 的運算,有三個 assembly 的 module,clrarr、record 和 shift,分別用來清 array、紀錄輸入的東西 和搬移 array 內容。我們使用課本 12 章的方法,從 C code 當中 call 一個 extern 的 function,來執行組語的部分。
三、 程式示範