9

超級任務 - 修復三十年前自製 ASCII 版俄羅斯方塊

 2 years ago
source link: https://blog.darkthread.net/blog/tetris-dos-game/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
修復三十年前自製 ASCII 版俄羅斯方塊-黑暗執行緒

我從小就對電腦有興趣,但當年電腦是奢侈品(且被視定會玩物喪志影響學業),那時曾跟同學跑去東方出版社樓上玩電腦展示機,好像叫康德電腦吧,它有個特異功能是能用鍵盤直接按出彩色幾何圖形(如下圖),配合方向鍵可在螢幕上組出圖畫,光這樣就覺得很好玩。當時還有個我必看的電視節目(好像叫金頭腦之類的),每次由兩隊搶答電腦相關問題,最後一題則比賽設計程式。記得有一集的題目是畫國旗還是魔術方塊,其中一隊光是讓 2D 圖像 360 旋轉就引起全場驚呼獲得勝利。(這在如今是 Google 一下不用十分鐘就能完成的小把戲,當年堪稱神乎其技)

照片來源

國中忙於升學,興趣只能放旁邊,直到考上五專,心想著不用再聯考了,萬歲! 央求老爹買電腦給我。當時遇到 8 位元 APPLE II 轉 16 位元 IBM PC 的年代,老爹說既然要學就學新的,不惜重金花了近四萬幫我買了第一台電腦,從此改變我的人生。

我的第一本電腦書,封面照片就是當時的電腦機型,不過是 Hercules 顯示卡 + 解析度較高的單色螢幕

光華商場就在台北工專旁邊,說來有地利之便。那時智冠賣的 DOS 磁片遊戲很便宜,巴掌大小的彩色印刷硬紙套裝了磁片跟薄薄說明書只賣 60 元,現在想想應該是盜版吧?但比起玩電腦遊戲,我更喜歡寫程式。就算玩遊戲,花在寫程式從資料檔擷取地圖、偷看對話找線索跟破解進度檔的時間永遠比實際玩遊戲的時間多,我沒耐性,手也笨,靠寫程式破關能帶來更多樂趣與成就感。最早學的程式語言 BASICA,學校則教超無聊的 FORTRAN 77,摸過一丁點組合語言(為了在 DOS 搞些奇技淫巧),也玩過 GW-BASIC。直到見識了 Turbo Pascal,完整的 IDE 環境、可模組化的程式結構,BASIC 直接被壓在地上摩擦,之後二技到研究所階段,PASCAL 跟 Delphi 便成了我的主力語言。(後來為什麼換成微軟呢?只因第一份工作的老闆說,你想用的 Delphi 公司沒有耶,但公司有 MSDN,裡面有 VB 應該不錯用...)

去年在臉書貼了專科時代用 BASIC 寫的迷宮程式,二技同學留言提醒我有寫過一個更酷的 ASCII 版俄羅斯方塊,程式的模糊畫面重新浮現在我的腦海,便想著有空要來找看看還在不在。兩週前,無意瞄到放在角落的備份光碟包,心血來潮翻了翻,在一片老機器備份檔居然讓我找到原始檔,主程式檔日期是 1992/2/14 年,當天是 2022/2/14,不偏不倚恰好 30 年整。稍微看了程式碼,結構挺複雜的,有彩色圖檔轉 ASCII 的工具程式,物件導向的方塊模組(TPU),還很花俏地加了背景音樂跟音效,但很可惜檔案應非最後版本、資料檔也有缺損,用 DosBox 模擬環境跑了一下,選單畫面可以執行,但進入遊戲就出錯。光看過片頭就帶給我滿滿感動,我立即將它公告為一級古蹟並成立維修小組全力修復,希望有機會重溫自己三十年前寫的遊戲。

這陣子晚上抽空研究,興致一來往往搞到凌晨,陸續解析出完整主選單畫面用 .NET 6 復刻主題音樂,並試著看懂程式邏輯排除問題。現在想想,當年沒有 Github、沒有 Stackoverflow、沒有 Google,沒有人可問,我又不是本科系,對於物件導向、演算法全無概念,寫程式全憑翻書自己摸索,雖然程式碼雜亂,註解還少得可憐(害拎杯 30 年後 Code 看得這麼辛苦)。但已有物件化的概念,還用一個單執行緒迴圈做出雙人對戰,現在看還是覺得很厲害。

總之,花了點時間,學生時代寫的程式成功在我的電腦重現了,有音效有背景音樂,遊戲控制鍵可自訂,有特別模式,還支援雙人對戰與合作模式。

遲了這麼多年,為它補上說明書。選單畫面如下:

  1. 切換單人或雙人
  2. 標準模式或特殊模式(會有一些奇怪形式的方塊)
  3. 雙人模式選擇:Versus 對戰 或 Cooperative 合作(如下圖)
  4. 控制鍵設定切換,選擇 Player 1 或 Player 2,按下 Enter 後開始設定
  5. 直接落底 W / 向上
  6. 向下加速 S / 向下
  7. 向左移 A / 向左
  8. 向右移 D / 向右
  9. 逆時針旋轉 Z / End
  10. 順時針旋轉 C / PgDn

主選單用方向鍵切換及選擇,空白鍵開始,ESC 結束。

以今天的觀點,遊戲介面跟程式寫法有許多可挑剔的地方,但古蹟就該維持原本的樣貌,我只微調了原本古怪的預設控制鍵定義(例如:雙人對戰時,左邊的人控制右邊視窗,右邊的人控制左邊,超違反人性)。

我邀請小木頭跟我一起錄了一段「遊戲實況」,大家一起欣賞吧!

遊戲實況

隨便玩一下發現遊戲仍有不少 Bug (在影片中有標註),例如:雙人合作模式當方塊在空中相撞會誤判落地而停在空中,合作模式連消多列方塊也會觸發攻擊。但這一點也不影響遊戲樂趣,影片沒錄到是,父子二人因為 Bug 笑到樂不可支。謝謝三十年前的自己,留給我這麼美好回憶。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK