顯示具有 linux games 標籤的文章。 顯示所有文章
顯示具有 linux games 標籤的文章。 顯示所有文章

2014年10月7日 星期二

[game] - 文字大富翁

在被眾多的小括號折磨之後, 來點輕鬆有趣的東西, 談談電腦遊戲 - 大富翁。在這篇 [問題] 自製程式,幫忙Debug 給點意見~~~~ 看到了這個文字大富翁的遊戲, 喚起了我心中的大富翁之魂。

我玩的第一個電腦遊戲當然不是大富翁, 但是將我帶入電腦遊戲大門的是大宇的大富翁 II, 兩張 1.2 磁片的容量, 單純的畫面, 簡單的操作方法 (按 enter 就好), 卻能讓我沉迷其中, 我就這樣按下了上百次的 enter。雖然我現在是個寫程式的, 但卻從來沒想過要寫個大富翁遊戲。因為我把它想得太難了, 光是畫面處理, 就得花上不少功夫, 卻從了沒想過用文字模式來代替, 虧我還那麼喜歡文字模式的程式。

這篇文章的作者完成了一個文字大富翁 (for windows), 這是他做的遊戲回報網址: https://docs.google.com/forms/d/1U4S1lbNEr_kksr9GxAaGJWq_9zzyJrubXRDQq4b_ZoY/viewform

當時版上一群人積極的向原作者提供意見時, 我則更積極地向原作者詢問原始碼, 感謝原作者的大方, 我拿到 source code 了。我好想贏韓國 (我想贏日本)要在 linux 上玩這個遊戲, 藉由之前的 ncurses 的經驗, 我想用 ncurses 移植這個遊戲。

這個遊戲很完整, 幾乎滿足所有遊戲元素:
  • 可以存檔
  • 音樂播放
  • 可以自己編輯地圖檔
  • 有個 windows 安裝檔

以下是遊戲內附的說明檔案, 可以看出他們的辛苦。

ReadMe.txt
NHSH 25th Information Class Results Published Works
內湖高中25屆高瞻資訊班成果發表作品
Rich (Monopoly) final version
大富翁 最終版
--------------------------------------------------------------
開發人員 Developer
--------------------------------------------------------------
建立者 Founders / 設計者 Designers

黃彥凱 Huang Yan-Kai
蔡士寬 Cai Shi-Kuan
江村志 Jiang Cun-Zhu
曾家暉 Zeng Gu-Hui
洪宜昌 Hong Yi-Chang
--------------------------------------------------------------
<更新歷史>
Ver1.5.0
-歡迎頁建立
-功能初定
-選單建立(可上下選擇)
-工作人員名單建立
-字體背景顏色更改
-最高分數建立
Ver1.5.1
-顯示內容檔案化
-選單新增說明
-重複程式碼模組化
-歡迎頁顏色bug修復
Ver 1.6.0
-新增未完成頁
-新增玩家人數頁
-新增電腦人數頁
-新增起始金額頁
-新增地圖選單頁
-小BUG修正
-執行檔ICON修改
Ver 3.0.0
-新增背景音樂(暫定)
-新增地圖(高校時代)
-新增玩家名稱設定頁
-新增骰子功能(可設定單/雙顆)
-新增角色狀態功能
-最高分數修改為破關記錄
-限制最多人數為五
-新增角色移動功能
-新增電腦角色自動擲骰功能
-連結骰子與角色移動功能
-小BUG修正
Ver 3.0.1
-角色狀態看板BUG修正
-Unistall功能修正
Ver 3.1.0
-看板BUG修正
-移動功能BUG修正
-修改擲骰方式(降低電腦資源消耗)
-更換背景音樂
-新增遊戲按鍵功能說明(遊戲頁面)
-新增遊戲暫停功能(遊戲頁面)
-遊戲讀取頁(可選擇)
-按鍵(END)對應BUG修復
-視窗大小調整
Ver 3.3.0
-背景音樂微調/EQ效果
-遊戲存檔/讀取功能完成
-新增獲勝模式選項
-遊戲頁新增"結束遊戲"鍵
-小BUG修正
Ver 3.6.0
-新增上看版
-獲勝模式完成
-獲勝判定功能完成
-破關記錄功能完成
-小BUG修正
-版本號(Ver) 命名方式修改
-遊戲畫面排版調整
-新增背景音樂暫停功能(F12)
Ver 3.6.1
-破關記錄頁新增清除功能
-小BUG修復
Ver 4.5.0
-小BUG修復
Ver 8.3.0
-修復 上看板(topShow) 骰子(dice) Bug
Ver 8.6.0
-功能整合完成
Ver 9.0.0
-多項功能新增
-BUG修復
Ver 9.6.1
- Fixed many bugs
- Added the "Tip Kanban"
- Added "Around the world" map
- Changed the Welcome Page
- Changed the Winner Page
Ver 10.1.0
- Fixed bugs
- Background reput

我做的工作:

  • 將 windows 檔案格式轉為 unix 格式。
  • 將 big5 轉為 utf8 編碼。
  • 重畫地圖檔。
  • 將 c 修改為 c++ (請不用擔心, 這是長的很像 c 的 c++ 程式)
  • 使用 ncurses
花了幾天時間終於勉強可以執行在 linux 上。

linux 遊戲畫面


目前已經移植了 95% 的功能, 放在 https://bitbucket.org/dsung/ascii_rich, 內湖高中的同學們, 感謝你們, 也希望有興趣的朋友可以一起來改進這遊戲。讓我們一起來按下 ENTER。

我有使用 PDCurses for Windows 移植回 windows, 不過 windows xp console 無法秀出 utf8 中文, 花了一點時間尋找後 ... 我放棄了。

不要覺得這個遊戲很簡單, 你可以自己試試看, 要完成到這樣的程度要花上多少心血, 我只不過是做做移植的工作就覺得辛苦, 可以想見他們的努力是多麼的深入, 別花太多時在軟體方法論, design pattern 上, 把時間花在寫程式上, 程式一旦完成, 比朗朗上口那些名詞更有成就感。

你也許會覺得程式中 call 了 main() 很奇怪, 對, 就是那個 c 進入點 main function, 但我覺得這是一種不被侷限的想法, 是一種創意的思考, 沒有 call main 之前, 你怎麼知道不能 call 呢? 有時候只是我們自己限制住了自己, 試著突破自己的固有思維 (怎麼變成勵志文章了)。

看看這篇, 用C設計,用C++編碼 有時候我們真的想太多東西了, 考慮這, 考慮那, 尤其你知道越多, 就想的越多, 這個程式只要會 loop, if, 開關檔案, windows console 操作 (這應該是這程式最困難的知識), 就可以寫出來了, 不需要精妙的設計或是 design pattern (請不要解釋成我認為這不重要)

看到這個文字模式大富翁, 讓我興起了文字小瑪莉, 可以用 77 代表那 77 圖示, 用 ** 代表星星圖示, BAR 就 BAR; 或是文字水果盤, 以 777 代替那個 777 圖示, 這都是我當初喜歡的遊戲, 應該可以順利完成吧, 應該 ... 我改天應該來介紹一下 ncurses, 推廣一下文字模式的介面開發方式。

2012年10月28日 星期日

linux 商業 game - descent

先來談談 id soft 的 doom, 我本來就欣賞他們遊戲技術, 看完這篇之後, 更欣賞 John Carmack, 在科幻小說上有看過這句話, 高度的文明是建立在高度的人文素養上, John Carmack 的事情見證了這句話, 擁有高度的人文素養, 才能建立高度的技術。

doom 應該是我第一個在 linux 上玩的商業遊戲, 當成功跑出 doom 畫面時, 那時的興奮感我似乎還記得, 這裡有 doom source code, 我編不起來, 不要緊, 這樣比較簡單:

apt-get install freedoom prboom doom-wad-shareware

不過讓我們回到 descent2。

我不是說我自己, descent - 天旋地轉, 出到 3 代, 我從第一代到第三代都買了。當時只能在 dos, windows 玩這款遊戲, 不過後來 descent2 有 linux 的版本。後來我又在 steam 買了 3。

http://icculus.org/d2x/ 目前已經不再維護, 改由 DXX-Rebirth, d2x-xl, 接力。

這只有主程式, 不過有共享版的資料可以玩, 我則是把 descent2 原版光碟的資料 copy 到某個目錄中, 執行 linux 版本的遊戲程式即可。

在 debian unstable 無法正常 compile 程式, 我修改了一些部份, 可以正常 compile 出執行檔。需要安裝 sdl 開發工具。

make  all-recursive
make[1]: Entering directory `/home/descent/d2/d2x-0.2.5'
Making all in 2d
make[2]: Entering directory `/home/descent/d2/d2x-0.2.5/2d'
/usr/bin/nasm -dTRANSPARENCY_COLOR=255 -f elf -d__linux__ -i./  linear.asm -o linear.o
linear.asm:108: error: comma, colon or end of line expected
make[2]: *** [linear.o] Error 1
make[2]: Leaving directory `/home/descent/d2/d2x-0.2.5/2d'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/descent/d2/d2x-0.2.5'
make: *** [all] Error 2

d2x-0.2.5-patch.tar.bz2 這是我改過的版本, 需要的朋友請自行下載。

d2.patch

 1 diff --git a/2d/linear.asm b/2d/linear.asm
 2 index 47c3260..bc40514 100644
 3 --- a/2d/linear.asm
 4 +++ b/2d/linear.asm
 5 @@ -104,9 +104,10 @@ section .data
 6    WholeStep dd  0 ;minimum run length
 7    XAdvance dd  0 ;1 or -1, for direction in which X advances
 8    XStart  dd  0
 9 -  YStart  dd  0
10 -  XEnd  dd  0
11 -  YEnd  dd  0
12 +YStart  dd  0
13 +XEnd_ dd 0
14 +YEnd dd 0
15 +
16  
17  section .text
18  ; Fast run length slice line drawing implementation for mode 0x13, the VGA's
19 @@ -132,7 +133,7 @@ gr_linear_line:
20   mov ecx,[esp+32]
21   mov [XStart], eax
22   mov [YStart], edx
23 - mov [XEnd], ebx
24 + mov [XEnd_], ebx
25   mov [YEnd], ecx
26  
27   mov ebp, [_gr_var_bwidth]
28 @@ -146,7 +147,7 @@ gr_linear_line:
29   xchg [YEnd], eax    ;swap endpoints
30   mov [YStart], eax
31   mov ebx, [XStart]
32 - xchg [XEnd], ebx
33 + xchg [XEnd_], ebx
34   mov [XStart], ebx
35  
36  LineIsTopToBottom:
37 @@ -168,7 +169,7 @@ LineIsTopToBottom:
38  ; horizontally. In the process, special-case vertical lines, for speed and
39  ; to avoid nasty boundary conditions and division by 0.
40  
41 - mov edx, [XEnd]
42 + mov edx, [XEnd_]
43   sub     edx, esi        ;XDelta
44   jnz     NotVerticalLine ;XDelta == 0 means vertical line
45         ;it is a vertical line
46 diff --git a/texmap/tmapppro.S b/texmap/tmapppro.S
47 index 13ae78e..cebfd7b 100644
48 --- a/texmap/tmapppro.S
49 +++ b/texmap/tmapppro.S
50 @@ -122,7 +122,7 @@
51  // dzdx to z, and finally puts 64 back onto the stack. At the end of
52  // the macro, the stack contains: 64, z, u, v.
53  
54 -.macro DoFPCalcs 0  // The FP stack after each instruction:
55 +.macro DoFPCalcs   // The FP stack after each instruction:
56      //   64/z  z    u    v
57   fst %st(4)  //   64/z  z    u    v  64/z
58   fxch %st(2)  //     u   z  64/z   v  64/z

很辛苦吧!玩個遊戲還要懂組合語言才能正確 compile 遊戲主程式, 裡頭有 nasm, gas 語法的組合語言, 不過對程式開發者而言, 這可是很寶貴的 source code。

20121028 在 mopcon lighting talk 聽到 CQD 的 opensource 商業 game, 我才知道原來有好幾款商業遊戲已經 opensource, freespace2 也是其中之一, freespape 和 descent 都是由 interplay 開發的, 我自然也有注意到這款遊戲。

type
/usr/local/bin/d2x-sdl -hogdir /home/descent/descent_game_data/d2data/
就可正常執行。音樂也有正常呈現。

以下是 descent2 的遊戲畫面:



它和一般 doom like 有何不同?它多了上下兩個方向, 除了 doom like 的前後左右之外, 多了上下, 所以可以躲在敵人上方或下方偷偷的擊斃敵人, 敵人連怎麼死的都不知道; 而由於多了上下這兩個方向, 也讓整個操作複雜不少, 我則是有一套自己的鍵盤定義, 用起來蠻順手的。

1, 2 代我全破, 第三代買很久了, 仍然無法通過第一關, 難度提高不少。能在 linux 上玩商業遊戲, 爽度暴增。

ref:
http://www.dxx-rebirth.com/

------ 20231221 補充 ------

20231221 有更方便的方法, 不用自己編譯。

descent 目前有2個版本

DXX-Rebirth - debian 有收錄, 直接 apt-get 安裝即可, 有試著編譯, 不過編譯系統是 python, 有錯誤。
d2x-xl - 我用這版 https://github.com/arbruijn/d2x-xl 可以編譯, debian/g++13, 官網無法編譯, 但是沒成功把 d2demo 遊戲跑起來。

DXX-Rebirth 有分為 d1x-rebirth, d2x-rebirth, 分別對應 descent, descent2。

play for descent
apt-get install d1x-rebirth
/usr/games/d1x-rebirth -hogdir  DESCENT/
DESCENT/ 為 descent 光碟內容

play for descent2
apt-get install d2x-rebirth
下載 demo 版本
http://www.fay-ar.us/pub/games/descent/win98/d2demo/
/usr/games/d2x-rebirth -hogdir d2demo/
這樣就可以玩試玩版了。

編譯 d2x-xl 需要安裝的套件: apt-get install libglew-dev libcurl4-openssl-dev libsdl-image1.2-dev libsdl-net1.2-dev