Skip to main content

· One min read

How they will merge two platforms that have so many things different about them is beyond us. One is chocolate, the other is peanut butter. Two completely different things. However, we know how good they taste together!

一邊是巧克力,另一邊是花生醬,兩者是完全不同的東西。但是,我們都知道巧克力花生醬嚐起來是多麼地美味! 在 AndroidGuy 上看到一篇文章,提起 Android 與 Symbian 將合併的傳言。

傳言本身不太可信 (Android、symbian 底層架構完全不同),但是文章中所用到的比喻實在很精采。

· 4 min read

在十六世紀,民眾把不可知的一切都歸於上帝的旨意。 為什麼榖物收成不好?都是上帝的旨意。 為什麼會發生大地震?都是上帝的旨意。 為什麼天體如此運行?都是上帝的旨意。 但是到了啟蒙時代,物理、化學、生物等開始發展,人類開始針對宇宙萬象尋求科學上的解釋。 這並不是說,人們都變成了無神論者,而是人類對於宇宙運行的方式,有了更深的理解。 -- 從 A 到 A+

同樣的,當我們不去研究任何方便功能其背後的運作機制,而是直接將之歸因於「動態語言」或「框架」所提供的方便性時,我們和十六世紀的民眾其實沒有什麼差別,等於承認自己的無知。

每次我們兩手一攤,說:「答案一定是語言或框架做的手腳了!」我們等於放棄了以科學方式探討原因的機會。

正因為只要生活過得好,我們就心滿意足,所以很少人擁有無與倫比的人生經歷。 -- 從 A 到 A+

朋友對上面的話提出質疑:瞭解「動態語言」或「框架」背後的機制當然是不錯,但並不是那麼必要。因為就算不懂怎麼製造,還是可以把高階語言把玩的很好。 對軟體工程師來說,比較直覺的學習順序,應該是熟悉這些外功後,理解到有些不足,才會去想辦法補足內功的部份。

我說:就如同在古代人們不知道為什麼天空會降下雨的時候,還是可以先學會蓋房子避雨。有了房子的遮蔽,感到安全的人們,又可以騰出心力來探究天空為什麼會降雨的問題。 了解「動態語言」或「框架」,行有餘力時也去了解「動態語言」或「框架」背後的機制,也許也可以讓我們寫出更好的程式碼。

弄出天氣預報的人,永遠不會是眼光停留在遮風避雨階段的人,或是想著將遮雨的房子蓋的又大又舒服的人(這只是種選擇,無關於好或不好)。這大概就是「從 A 到 A+」一書所說的「優秀是卓越之敵」的理念吧。

· One min read

程式又短又簡單,那就是美麗,原因有很多。 也許最重要的就是易於理解,而理解程式比撰寫程式更為困難。 沒有什麼地方可以躲藏。 此外,程式緊湊,對指令集,I-cache 及 JIT 編譯器而言,也會配合得比較好,因此跑得比較快。 -- 美麗程式

· 5 min read

TextRPG 是我最近找到的一個好玩 python 模組,由德國人開發。 作用就是用來寫一個純文字的冒險遊戲。 目前的版本已包含了 RPG 中常見的對話、戰鬥等元素,整個遊戲可以完全由一個 python 腳本來構成。

因為實在太簡單了,所以來個五分鐘上手文好了:)

1. 安裝軟體

安裝好 Python 與 easy_install 模組後,接著安裝周蟒與 TextRPG

$ easy_install zhpy $ easy_install textrpg

如此安裝好後就可以開始寫 RPG 了。

2. 準備環境

新建一個檔案夾,首先,用文字編輯器新增一個 rpg.ini 檔案,裡面內容如下:

[charactor] 角色 = Char 樣板 = template 名字 = name 姓名 = name 說 = say 詢問 = ask 動作 = act 行動 = act 比較技能 = compete_skill 取得經驗值 = get_exp 生命力 = bTP 生命值 ==TP 攻擊力 = attack 武器 = weapon 防具 = armor 傷害 = wounds 活著 = active [story] 故事 = story 儲存 = save 給予經驗值 = give_exp 戰鬥 = battle 對話 = diag 將這個檔案儲存起來。接著開啟適當的 python 程式編輯器新建一個任意檔名的檔案 (範例裡將檔案取名為 HelloRPG.twpy)

在檔案開頭加入三行敘述:

#!/usr/bin/env python

encoding: utf-8

from rpg_lib.textrpg import * 好了,我們環境已經準備好了。

3. 撰寫故事

因為用 TextRPG 寫故事太容易了,這就編一個大雄大戰小叮噹的故事:

#!/usr/bin/env python

encoding: utf-8

from rpg_lib.textrpg import *

大雄 = 角色 () 大雄。名字 ="大雄"

小叮噹 = 角色 () 小叮噹。名字 ="小叮噹"

故事 ("""大雄哭著跑進房間""")

大雄。說 ("""嗚嗚~~小叮噹,技安跟阿福欺負我""") 小叮噹。說 ("""口胡,大雄我受夠你了,來戰吧!""")

大雄。攻擊力 = 3 小叮噹。攻擊力 = 90

大雄。動作 ("""大驚失色,狼狽逃竄""") 大雄。說 ("""小叮噹,你發什麼瘋!""")

勝利 = 小叮噹。戰鬥 (大雄) 如果 勝利: __故事 ("""小叮噹打敗了大雄,從此過上清靜的日子""") 否則: __大雄。動作 ("從如廢墟般的房間中爬起") __大雄。說 ("""呼呼,我還是贏了""") __故事 ("""大雄打敗了小叮噹,從此作者掰不下去封筆了。""")

註:上面程式範例中的 "____" 代表 4 個空格。用空格來表示程式邏輯區塊是 python 的語法。

好了,我們寫好了故事,接著就是將這個檔案儲存起來。 檔案儲存好之後,我們打開 command line 程式,開始執行這個遊戲:

$ zhpy HelloRPG.twpy 大雄哭著跑進房間 大雄:嗚嗚~~小叮噹,技安跟阿福欺負我 小叮噹:口胡,大雄我受夠你了,來戰吧! 大雄 大驚失色,狼狽逃竄 大雄:小叮噹,你發什麼瘋!

---battle-stats for 小叮噹 --- .... ---/battle-stats---

大雄 comes closer. 小叮噹: Do you want to attack 大雄?(Yes, no) Yes You attack 大雄. 小叮噹: How do you want to fight? (Usual, defensive, target head) Usual

You won this round. 大雄 took 80 points of damage and a critical wound.

小叮噹打敗了大雄,從此過上清靜的日子