中山大學 West BBS-西子灣站

『主選單』
分類佈告
分類精華
休閒聊天
個人郵件
個人設定
重新登入
『應數系組合語言(楊昌彪老師)』一般區佈告
←回列表  ↑上一篇  ↓下一篇        張貼  回應       
發信人: cheaney (隨便看看)    看板:math-asm
日期: Sun Jul  6 20:51:52 1997
標題: 期末程式報告



    姓名 : 林明正
    學號 : 8424012

    指導老師 : 楊昌彪

    題目 : 砲臺射擊遊戲

    問題敘述 :

        到了六七月時, 就知道又有一番的掙扎, 除了要忙一些科目的考
    試外, 又到了最恐怖的時刻, 不同於上學期的資料結構, 不知未何,
    這次寫程式的時間並沒有上次那般的充裕, 這次的組語期末大作業只
    有短短不到十天的時間, 再加上期末學校還搞搬宿社的政策, 使得在
    寫這個程式的時候總感到時間不是很充裕吧, 雖然老師在學期一開始
    的時候便說過了期末有個中型的程式, 但我本身的惰性趨使再加上學
    組語時不是學的很好, 所以寫這個有點吃力. 嗯, 閒話不多說, 現在
    就開始敘述我寫的程式內容.

        砲臺遊戲, 顧名思義的, 當然是有一堆砲臺, 然後互相射擊, 我
    在市面上也看過這個遊戲, 也是因為曾經玩過這個遊戲的因素, 促使
    我想要寫一個跟跟它類似的遊戲, 寫出來好歹也可以自己玩.

        一個好遊戲除了豐富的內容外, 也需要一個亮麗的畫面, 而在這
    方面上, 用組語處理的話, 無疑上速度會增快許多, 但是像處理一些
    線條, 例如拋物線, 就要有一套公式來計算螢幕上點的取捨, 此外,
    爆炸所產生的爆幅, 也需要做點的處理, 所以為了省去寫程式的時間
    , 所以決定利用C 語言的繪圖模式, 來做畫面的整個處理, 那或許有
    人會問, 組語的部份呢??在想這個遊戲的時候, 只想把一些控制的介
    面給組語去做, 畢竟這方面用組語直接跟I/O 碰觸比一些高階語言更
    自然許多, 於是, 這個遊戲我要寫的大致架構就是如此.

    解題方法 :

        在一開始的時候, 我就在想先把畫面用出來, 至少有個畫面總是
    比較好的, 像班上也有幾位同學的題目也是寫遊戲, 而他們的畫面大
    部份都要先轉檔, 再跟C 語言連結, 因此比較麻煩, 所以用C 語言寫
    畫面的我, 至少也要先讓畫面出來在說.

        首先, 我用了一個260X200 的STACK 來儲存要秀的圖上的點, 當
    時老師問為什麼不用全螢幕的呢??我只能說很報歉, 因為本想用一個
    比較小的STACK 來表現螢幕上的每一點吧, 可是到後面都變成一條一
    條有空格的實線, 或許是公式代錯的關係, 使得只有在一塊小方格上
    的圖形才是正確的, 其它的圖, 都是斜線般交錯的圖形, 加上當時時
    間上來說, 已有點匆促, 所以為了省去麻煩, 就取了C 裡面 stack的
    極限, 每個點(x,y) 都會在STACK 內, 用它來判斷地形倒底有沒有被
    炸, 倒底要不要消去, 此外, 我還用了C 語言繪圖程式一個function
    setviewport() , 可以設定視界的大小, 超過的點(x,y) , 均不會在
    圖形有所顯示, 這也是讓砲彈的軌跡也能夠在超出螢幕外依然能夠掉
    回框框內, 只要它原來的軌跡會掉在框框內, 當然, 超出框框外的點
    當然是不秀出來的.

        再來就是砲臺的處理, 砲臺嘛, 上面一定是有砲管的, 講到了砲
    管, 當然要能夠旋轉, 才叫炮管嘛, 為了能夠讓砲管旋轉, 我利用了
    以前數學所學的, 旋轉座標的觀念, 算出下一個點的座標, 再將前一
    次的點把它的color 設成黑色的, 這樣在移動砲管的時候, 就很像是
    砲管在旋轉一樣, 這樣就可以靠按鍵調整砲管的方向來發射了.

        此外, 畫面中還有一個重要的圖形, 那就是地形, 地形要讓砲彈
    炸下去的時候還要有ㄠ痕, 好在前面在取STACK 時, 已經把這部份簡
    化了, 所以這部份不會太複雜, 本想用個隨機的地形, 不過, 由於時
    間將近, 所以先用一個地圖來測試功能.

        至於砲彈的軌跡倒底會不會飛的像拋物線呢, 關於這點, 因為如
    果要用組語寫的話, 會變得複雜許多, 不過嘛, 我是用C 寫的, 所以
    我只用一些國中就學到的公式 :
                H = Vo*sin%*t-1/2gt^2
    再加上風速的考慮, 很容易就寫出來了, 好在C 語言在處理複雜的工
    式時, 處理速度並不會影響畫面的輸出, 好加在, 那在控制的部份,
    我先用C 語言 bioskey()的功能, 來先做控制, 等到寫好的時候, 再
    用組語寫個控制的function來取代bioskey() 的處理, 不過很可惜的
    , 由於時間的因素, 致使最後並沒有來得及把它改為組語所控制, 導
    至整個程式都是用C 語言寫的, 我相信要改進的東西實在很多.

    心得 :

        老實說, 這個遊戲實在是不怎麼能玩, 距離我的理想, 完成度大
    概只有百分之三四十吧! 像畫面一定可以show出全螢幕的, 不過要加
    上算點的式子, 才能處理地形的凹陷, 此外地形隨機的部份, 我相信
    要跟前面的式子配合, 要畫出隨機的圖形並不難,

        本來還想加入滑鼠的控制, 用來控制砲臺的運作, 不過大概會把
    它寫成函式庫吧, 以組語和C 的連結, 並不如想像般的容易, 班上好
    一些人在連結的部份的花了很多時間依然沒有辦法, 所以我可能會把
    滑鼠寫成函式庫吧!!這個遊戲值得改進的地方實在太多了, 像控制方
    面, 原本並沒有用組語寫, 或許用組語寫畫面會變的更流暢, 畫面也
    是, 不過我寫程式的動機, 本來就是想寫一些遊戲出來, 或許是深受
    我小時候玩電動的影響吧!!所以這次的程式雖然是未完成品, 不過可
    以玩我已經很高興了, 至於程式中沒用到組語的部份, 呃..下次會改
    進的.

    參考書籍 :

        老師上課發的講義
        80X86組合語言徹底研究
        C 語言繪圖程式


--
㊣ Origin: 國立中山大學 West BBS ㊣ From: 140.136.247.245


--
㊣ Origin: 國立中山大學 West BBS ㊣ From: 140.136.247.245


←回列表  ↑上一篇  ↓下一篇        張貼  回應