2014年的作品(已玩了4年多,還滿耐操的)---現在拿出來獻醜
回想一下,當時好像大概花了3個多月時間完成(每天晚上想一點程式,累積而成...)
記得是4月份忙完了一個工作上的任務,閒下來後開始發起的一個念頭
當初只是單純要做一個玩具給小朋友玩,於是......就這麼開始了......
1.國中時玩的俄羅斯方塊機台為10行 X 20列(網路搜尋找到的資訊),所以找了5X7的LED矩陣6顆來組合成10行 X 21列的畫面,並銲成一個測試板,然後用KEIL C搭配ATMEL89S52及ISP下載線進行掃描顯示,且初步完成顯示功能。之後並以此為發展架構,逐步增加遊戲所需功能。
2.掃描顯示為10行輪流顯示,硬體部份採用74138搭配幾個邏輯閘完成4對10解碼,而不用腳位更多的4對16解碼器。
3.因畫面長有21顆LED,而8051為8位元系統,所以在資料處理上頗費功夫,需用3個暫存器才能儲存一行的顯示資料,10行就要用30個暫存器。
4.為減輕重量及採用電池所產生的電力供應不穩、雜訊等問題,因此電源採用外部供電方式,利用USB線取得5V電源的方式非常方便。原本設計是使用MICRO USB,但銲點太小,不好銲接,失敗了好幾次,雖後來有成功,但因強度不夠,用沒幾次還是脫落,最後改用較大的USB A TYPE,銲點較大,利用銲錫加強了強度,果然用的比較久。(USB僅有取得電源功能,沒有資料傳遞功能,4個銲點只銲了2個)
5.玩具的設計採取將所有零件均外露方式,一堆電晶體、電阻、IC、電容、LED......假裝很複雜很厲害的樣子。
6.按鍵用了兩個版本,安裝及高度考量也花了不少時間及心思,記得在電路板鑽孔時,還真怕一不小心會毀了一切。
7.線路連接採用OK線一條一條接、一個一個銲,沒什麼好說,就是純手工,會這麼早就老花眼不是沒有原因的。
8.為了讓OK線及銲點也可以被看到,跟同事要了壓克力板配合銅柱固定及保護,實用又美觀。
9.電路圖
10.程式功能(影片檔)
11.(1)程式架構採用定時中斷法,記得是1.5ms base,控制中斷次數即可控制遊戲速度
(2)方塊亂數產生(7選1)
(3)畫面採前景(正在運動的方塊)及背景(已固定不動的下方方塊)經OR運算後顯示
正在運動的方塊在判定不會再下降及旋轉後,即轉變為背景的一部份
前景再亂數產生一個方塊
(4)移動中方塊若位在兩邊或附近有已固定方塊,則是不可左移、右移或旋轉
這部份的程式當初是吃足苦頭,想不到什麼好的方法,所以都是用前景暫存器
裡的0和1(0為空白,1為方塊)和背景暫存器裡的0和1做比對來判斷是否衝突
(5)按鍵按下防彈跳、放開防彈跳、按住若超過一段時間,則要考慮連發功能
(6)其實花最多時間的還是各階段timing的微調,目的是要讓遊戲玩起來更順更流暢
這部份只能不斷try、再try、一直try,好在程式在撰寫初期,就在各個流程轉折點
預留延時的變數,在主功能完成後,要調整timing就會變得比較清鬆,只要延時
的變數參數值加一點或減一點即可
這個部份到底要調成怎樣才算最佳,其實也沒有標準答案,玩得高興就好
(2)方塊亂數產生(7選1)
(3)畫面採前景(正在運動的方塊)及背景(已固定不動的下方方塊)經OR運算後顯示
正在運動的方塊在判定不會再下降及旋轉後,即轉變為背景的一部份
前景再亂數產生一個方塊
(4)移動中方塊若位在兩邊或附近有已固定方塊,則是不可左移、右移或旋轉
這部份的程式當初是吃足苦頭,想不到什麼好的方法,所以都是用前景暫存器
裡的0和1(0為空白,1為方塊)和背景暫存器裡的0和1做比對來判斷是否衝突
(5)按鍵按下防彈跳、放開防彈跳、按住若超過一段時間,則要考慮連發功能
(6)其實花最多時間的還是各階段timing的微調,目的是要讓遊戲玩起來更順更流暢
這部份只能不斷try、再try、一直try,好在程式在撰寫初期,就在各個流程轉折點
預留延時的變數,在主功能完成後,要調整timing就會變得比較清鬆,只要延時
的變數參數值加一點或減一點即可
這個部份到底要調成怎樣才算最佳,其實也沒有標準答案,玩得高興就好
沒有留言:
張貼留言