
(圖片來源:potq.cl)
標題壞掉了?沒壞,就是 12345。
從 2004 年 4 月踏入遊戲業界開始,到現在 2009 年 4 月為止,已經滿 5 年整了。說起來就像是算算數一樣,用完一隻手的五根指頭 12345 剛剛好,但卻又不是像算算數一樣簡單的 12345。
五年,代表著什麼樣的意義?有人說,在一個行業裡持續工作滿五年的時間,表示你正式從菜鳥的行列中畢業了,雖然還稱不上是功力深厚的老手,但至少也是個具有一定裝備等級的「中手」。最近這段時間以來,幾次試著動筆想為自己的五年下些註解,卻不知從何開始。回首來時路,在這五年的光陰裡,雖然經歷過大大中中小小數個不同的遊戲專案,但竟沒半個能夠稍微拿來說嘴,或者能夠引以為傲的遊戲作品,想來真是有些令人沮喪。
所以我害怕,也不害怕。
繼續閱讀 < < "12345"
這是我在近期內對於 Threading 主題的學習整理文。如果你對於多執行緒程式設計沒有半點概念的話,建議可以先從我之前寫的「多核多緒多樂趣」開始閱讀,然後再視個人需求取用以下各項資源。
所謂的「多執行緒」程式設計,或者可簡稱為「多緒」程式設計,在英文中有許多相關的專業技術名詞,例如 Threading、Multithread、Concurrency、Parallel、Multicore 與 Multiprocessor 等等,在搜尋資料時可以嘗試不同的關鍵字,往往可以找到不少意料之外的好東西。而其中最常見的總括性簡稱,應該就是 Threading 了。
基礎定義
既然要學習 Threading 程式設計的知識,首先要瞭解的當然是 Threading 的基礎概念:
- Thread:看看 Wikipedia 裡的定義,至少把最前頭那段 Thread 的基本定義,以及 Thread 與 Process 的不同之處搞懂。簡單來說,執行緒是用來執行電腦程式的執行環境;而多執行緒,就是能夠使程式系統同時執行多個不同程式碼區段的一種技術。
- Thread Safety:雖然使用 Threading 技術能夠提升程式系統的執行效能,但伴隨而來的則是麻煩又難解的 Thread Safety 議題。大致上,我們可以使用 Re-entrancy、Mutual exclusion、Thread-local storage 以及 Atomic operations 這四種方法來達成安全使用多執行緒技術的目標。
繼續閱讀 < < "快快樂樂學遊戲Threading程式設計"

(圖片來源:www.codinghorror.com)
原文出處:Physics in Games: A New Gameplay Frontier
截至目前為止,在猴子靈藥中從未探討過與遊戲物理學相關的課題,主要原因是我以前從未接觸過任何物理引擎或物理面向的應用程式,所以相當缺乏對於遊戲物理學的概念與知識。讀完這篇文章以後,我總算是開了眼界,對物理學有了一番新的體悟,也開始能夠想像如何在遊戲中的運用各種物理學的觀念。所以我希望藉由分享原作者所寫的這篇文章,讓大家都能認識並且開始思考遊戲物理學的設計應用。
如許多老玩家所知,在遊戲中使用物理學,並不是什麼新鮮的事情。事實上在許多年代久遠的老遊戲,譬如《Lunar Lander》與《Marble Madness》中,已經充滿許多與「重力」這項物理特性互動的遊戲性。隨著時代的推移演進,今日我們所擁有的嶄新技術方案,使遊戲開發者能夠將更進階而且更新穎的物理學特性運用於遊戲之中。
物理學處理程序對電腦運算能力的要求非常高,所幸拜核心數目越來越多的中央處理器,以及專門的硬體加速卡誕生所賜,身為遊戲開發者,現在我們可以真正深入考量如何在遊戲中緊密結合物理學的使用。而真正的問題所在,是我們該利用這些新的資源來做些什麼事情?直到目前為止,遊戲中所使用的物理學大多侷限於裝飾性的效果,雖然這些效果能帶給玩家很重要的沈浸感受,但卻無法真正改變現有的遊戲性。
當我們瞭解物理學在遊戲性中各種應用的可能性以後,我們又該如何提供給玩家與物理學相關的全新體驗?本文的目的就是為了回答這些問題,同時作者也分享了他從設計多人連線地圖模組 CTF-Tornado 中所學習到的經驗。(CTF-Tornado 是在《Unreal Tournament 3》中,被設計來充分發揮 Ageia 物理加速卡優勢的地圖。)
首先讓我們從一些物理學的基礎定義開始吧。物理學的範疇並非僅侷限於模擬重力或者物體與物體間的碰撞行為,實際上物理學也包含了以下這些應用:
- 流體力學,包括液態與氣態。
- 扭曲形變,包括柔軟物體或者剛硬物體。
- 摩擦力與黏力的行為模擬。
- 改變物質的狀態,例如水由液態變成固態的過程。
- 材質的破壞。
由此可知,物理學涵蓋了相當廣泛的內容,而其中有些理論仍未實際被應用於遊戲之中。因此我們可以預期,物理學的發展潛力非常龐大,但遊戲開發者所面臨的各項議題也十分具有挑戰性。隨著開發者在遊戲中使用物理學而產生出來的難題,主要可以分為以下四個項目:
- 對電腦運算能力的需求。
- 更多物理學以外的處理程序。
- 多人連線遊戲中的挑戰。
- 在既存劇本與物理學混沌本質間的不相容性。
讓我們更進一步仔細地檢視每一個項目。
繼續閱讀 < < "《Physics in Games: A New Gameplay Frontier》:遊戲中的物理學,遊戲性的新疆界"
很久沒有寫程式設計入門知識的相關文章了,這篇文章要來談談程式庫 (Library) 連結,以及關於 MSVC 與 CRT 之間的種種恩怨情仇。
如果你使用的作業系統是 Linux、Mac 或其他非 Windows 平台,你可以忽略這篇文章;如果你使用的作業系統是 Windows 平台,但沒有用 Microsoft Visual Studio C++(以下簡稱為 MSVC)軟體撰寫 C++ 程式的話,這篇文章對你的幫助可能很有限;但如果你的作業系統是 Windows,而且你使用的程式整合開發環境是 MSVC 軟體撰寫 C++ 程式的話,這篇文章應該能夠幫助你釐清一些重要的基礎觀念。
身為程式設計者,在學習程式設計的過程中,你是否曾經遇過某些看起來不知所云的錯誤訊息,卻不知該如何解決?例如當你快快樂樂地寫完程式,並且確認所有的程式碼都能成功通過編譯之後,接著執行「建置方案」(Build Solution) 的步驟,結果卻跑出一堆莫名其妙的錯誤:
LIBCMTD.lib(mlock.obj) : error LNK2005: __lock 已在 MSVCRTD.lib(MSVCR80D.dll) 中定義過了
LIBCMTD.lib(mlock.obj) : error LNK2005: __unlock 已在 MSVCRTD.lib(MSVCR80D.dll) 中定義過了
LIBCMTD.lib(crt0.obj) : error LNK2005: _mainCRTStartup 已在 MSVCRTD.lib(crtexe.obj) 中定義過了
…………
LINK : warning LNK4098: 預設的程式庫 ‘MSVCRTD’ 與其他使用的程式庫衝突,請使用 /NODEFAULTLIB:library
LINK : warning LNK4098: 預設的程式庫 ‘LIBCMTD’ 與其他使用的程式庫衝突,請使用 /NODEFAULTLIB:library
D:\Workspace\CrtLibTest\Debug\CrtLibTest.exe : fatal error LNK1169: 找到有一或多個已定義的符號
以一般的情況來說,如果在你的程式專案中有使用某些由他人所撰寫的第三方程式庫或是開源專案的程式庫,比較容易會發生上述的錯誤狀況。從上述這些看似離奇而令人摸不著頭緒的錯誤訊息中,我們大概可以猜測問題點應該在於 LIBCMTD.lib 與 MSVCRTD.lib 這兩個程式庫身上。但到底什麼是 LIBCMTD.lib 和 MSVCRTD.lib?在我們的程式碼中有使用這些程式庫嗎?
繼續閱讀 < < "MSVC與CRT的恩怨情仇"
原文出處:Postmortem: RiverMan Media’s MadStone
「有許多人以為他們想要製作遊戲,但是只有非常少數的人瞭解遊戲開發所需的投身奉獻與持續耐久力。在專案最初的興奮感褪去之後,你必須在數以月計或數以年計的日子中,身處看不見光線的隧道盡頭裡辛勞地工作。你必須足夠熱愛製作遊戲,以致於就算在視線中看不見終點或者金錢時,仍然能夠保有無與倫比的熱情。」—— Jacob Stevens

(圖片來源:www.paec.org)
在 18 年前,當 Jacob Stevens 只有 8 歲大,而他的弟弟 Paul Stevens 只有 4 歲大的時候,他們就下定決心要為任天堂公司製作遊戲。當時他們並不知道要做些什麼,更不懂該如何去做。雖然如此,在將近 20 年的時間之後,他們成功達成了童年的夢想。這是一篇為任天堂的遊戲平台製作遊戲,也為自己實現夢想的真實故事。
RiverMan Media 是一間由 Jacob 與 Paul 兩人共同創立的小型獨立遊戲開發公司,而《MadStone》是一款 2D 型態的方塊掉落解謎遊戲,也是他們所製作的第一款 WiiWare 平台遊戲,售價 8 塊美金。在這款遊戲之前,他們曾於 PC 平台發售兩款表現中規中矩的休閒遊戲《Cash Cow》以及《Primate Panic》。
標題的 Postmortem 是「後鑑之明」的意思,也就是在完成整個遊戲並且發行上市之後,重新回頭檢視專案開發過程中的種種是非對錯。在龐大的遊戲產業中,或許 RiverMan Media 只是一個微不足道的小公司,但在這篇自我檢討的文章裡,Jacob Stevens 非常坦然且毫無保留地剖析他們的心路歷程,娓娓道來許多令人深思的想法。看看他們做對與做錯的事情,再回頭想想自己,或許也能夠使我們的遊戲開發旅程少走一些冤枉路。
同時,我也想將這篇文章獻給所有對遊戲設計感興趣,以及將遊戲產業視為未來職涯目標的讀者們。
繼續閱讀 < < "《Postmortem: RiverMan Media’s MadStone》:奉獻、持續,以及無與倫比的熱情"

Strategy Pattern
身為一位程式設計者,你是否曾面臨條件判斷式繁殖過盛的困擾?經常用折疊不完的 N 層 if-else 結構來考驗自己的腦力?或是只能瞪著超過 500 行的 switch-case 條件判斷式舉手投降?您的困擾我瞭解,請容許我向您引薦本篇文章的雙主打星——Strategy 與 State 範式,讓它們帶領我們一同邁向美妙動人的範式之道吧!
首先要瞭解的是,為什麼要將 Strategy 與 State 範式放在同一篇文章裡介紹?因為兩者雖然在設計層面的動機與出發點有所差異,但是在實際的應用面中非常地相近。根據《物件導向設計模式》(Design Patterns) 書中的定義,只要將右圖中的 Strategy、ConcreteStrategyA 與 ConcreteStrategyB 角色,更改為 State、ConcreteStateA 與 ConcreteStateB,就會變成 State 範式的結構圖,可以說兩者就像是孿生兄弟般密切相關。
如果真的要區分出 Strategy 與 State 範式之間的差異,可以參考《重構——向範式前進》中論述的內容:
State pattern 對「必須在一整族 state classes 的實體之間輕鬆轉換」的 class 有益,而 Strategy pattern 則是有助於讓 class 把演算法執行任務委託給「一整族 Strategy classes 的某一個實體」。
從我理解的角度來解釋,Strategy 範式比較著重於包裝相同派系的演算法,而 State 範式則特別注重在各狀態之間的轉換邏輯。所以只要瞭解 Strategy 或 State 範式兩者之一,就等於學會了兩種設計模式,真的是太划算太值得啦!雖然 Strategy 與 State 範式非常單純而且易於理解,但這兩項看似不起眼的小小範式,卻經常能夠在程式系統中發揮很好的應用效果,絕對是程式設計者不可不學的必備基礎知識。本文中將以 Strategy 範式為主,說明兩者在遊戲系統中的相關應用。
繼續閱讀 < < "Strategy & State:條件判斷式的消除者"

(圖片來源:www.freedigitalphotos.net)
原文出處:Opinion: Game Industry Interviewing 101
面試,幾乎是所有步入社會成為工作者的人都必須經歷的一道程序。在這篇文章裡,作者以自己的面試經驗做為出發點,不僅為遊戲業界的應試者提出許多有用的教戰守則,同時也為面試者提供一些頗有幫助的小訣竅。對於許多即將踏入職場的新鮮人,以及擔任主管職務的人來說,文章裡有許多看似平凡無奇卻非常實用有益的觀念與知識,可供身處職場的我們,做為參考與省思之用。
在此先對「應試者」與「面試者」做出明確的定義。應試者 (Interviewee),或者可以稱為「被面試者」,所指的就是應徵工作而接受面對面測試的職務候選人。而面試者 (Interviewer),所指的則是公司裡負責與應試者進行面試程序的人;在一般常見的情形中,通常會以應試部門的主管做為面試者。
當我們踏出校園生活,欲將自己的身份由學生轉換成為社會新鮮人時,為了尋找合適又滿意的工作,面試可說是一條必經的途徑。而如果來到面試程序,表示我們已經通過了檢驗履歷表的第一道關卡,但最終是否能夠獲得工作機會,決勝關鍵仍必須取決於面試過程中的表現。因此,對於社會新鮮人來說,面試可說是一件令人又愛又恨的事情。
另一方面,若以公司經營者或身為主管的角度而言,也絕對不可以輕忽各項面試的相關程序——因為不論你是否能夠接受,面試程序都會對公司的風評產生非常深遠的影響。身為面試者,你所代表的角色就是公司形象,你的一言一行都會傳達出公司本身的文化氣息。請記得,當你在面試候選者的時候,候選者也同樣在面試你的公司。即使在面試的過程中,你發現應試者並不合於你的徵才條件,仍然應該展現出良好的應對態度,才是恰當的作為。
首先,讓我們瞧瞧應試者與面試者雙方所追尋的目標為何。從面試者的觀點來看,他們想要的是:
- 充分判別應試者的技能。期望候選者至少具有不錯的能力,最好能夠達到非常優秀的程度。
- 確認應試者能夠良好地適應於公司的團隊。
- 盡可能付出較少的薪水。
至於應試者關心的事物則有些不同。理想中,他們想要的是:
- 好薪資,好待遇。
- 令人愉快且充滿挑戰性的工作。
- 工作的安全感。
- 成長與晉升的機會。
繼續閱讀 < < "《Game Industry Interviewing 101》:給遊戲業面試者與應試者的教戰守則"

心態致勝
書名:心態致勝 (Mindset: The New Psychology of Success)
作者:Carol S. Dweck
譯者:李明
出版:大塊文化
語言:英文版/繁體中文版
這是一本書皮封面平凡無奇的書籍,即使將它擺放在書店中最顯眼的位置,我也不會多看它一眼;就算碰巧拿到了手中,概略翻上幾頁,可能我也只會覺得:「這大概又是本充斥著說教口調的實驗研究報告,或者是如同書名般枯燥乏味的心理勵志書籍。」但沒想到,這小小的一本書,卻越讀越有滋味,越讀越令我拍案叫絕。
本書作者 Dweck 女士,是目前任職於史丹佛大學心理學系的教授。在書籍的內容中,作者不僅提出了「定型心態」與「成長心態」兩種心理狀態的明確定義以及兩者的各種顯著差異,更將這套理論應用在運動選手成就、企業經營與領導、兩性情感議題,以及父母師長的教育等許多不同的領域中,全都獲得了相當正面而良好的成效與回應。
書裡沒有什麼世界七大不可思議的必勝成功法則,也沒有如暢銷書口吻般自吹自擂的致富手段。相反地,其中涵蓋了許多客觀的研究結果以及測試受驗者的心得回應,充分佐證成長心態理論的實用性。作者並沒有搬出教條式的守則來推銷她的理論與著作,而是平鋪直述地帶領讀者在各種不同領域中,探討成長心態與定型心態對於為人處事、應對進退的決定性差異與影響。最後,則讓讀者依循自己內心的判斷,做出最合適的選擇與改變。
做為書名的主標題,所謂的「心態」(Mindset) 到底是什麼東西?人類的心態,並不會以個別獨立的形式存在,而總是由一組完整的思想所交織構築起來的知識網絡,所以心態可以說是「一組心裡的想法」(A set of mind) ,因而簡稱為 Mindset 這個詞彙。有人會將心態稱之為「態度」、「思維」或者「價值觀」,其實都是彼此相關而且可以互補的用語。
心態,就像是一組解釋世界萬物的框架,幫助我們認知周遭所發生的各種事情。因為心態的存在,我們熟習身邊的各種人事物,不至於每天陷於兵荒馬亂的生活之中;因為心態的存在,我們都能逐漸適應自己的家庭、朋友、工作以及伴侶;因為心態的存在,我們也因此得以成為現在的自己。假設我們改變了這組既存的框架,是不是就能夠改變眼前的世界?
繼續閱讀 < < "《心態致勝》:改變心態,改變你的世界!"

《Crystal Guardian》Design Draft
這是《Crystal Guardian》的遊戲設計草稿。
其實大約在四個月前,我就已經完成了遊戲的基礎設計,本來想要在 NDS 平台上嘗試製作這款小小的遊戲原型,不過後來因為被其他有趣的事情吸引,再加上我一直找不到能夠在 Homebrew 套件上執行 Lua 的方法,所以也就沒有往 NDS 的方向繼續發展下去了。直到兩個月前,在玩過「咕世界」並且讀了「How to Prototype a Game in Under 7 Days」一文之後,內心深處那股「無論如何都想要做遊戲」的雄雄烈火,又再度燃燒了起來!
一開始在做遊戲設計的靈感發想時,對於目前網路上各種動作過關類型的小遊戲,可以看到大多數作品都是以「攻擊」、「毀滅」或者「破壞」當作遊戲的主要題材與樂趣元素。而我想要嘗試的,則是完全相反的方向。我反問自己:「有沒有可能以『保護』或者『防衛』的概念,做為遊戲的主要機制?」
當然,現在有許許多多 Tower Defence 類型的遊戲,但是我想做的並不是這種玩法的遊戲。我想做的遊戲,設計概念與核心機制的出發點在於「防護」(Defence),或許是保護金銀財寶、捍衛重要的東西或者心愛的人,無論那是什麼,我認為世界上總有些值得我們守護的人、事、物以及價值。而至於遊戲的操作方式,我想嘗試的方向,是一個不用動腦思考,只需要不停移動並且點擊滑鼠就能夠進行的遊戲。
繼續閱讀 < < "遊戲開發日誌:水晶守護者"

水晶守護者:Crystal Guardian
遊戲名稱
Crystal Guardian
遊戲平台
Windows XP
遊戲連結
CrystalGuardian.7z (2.28 MB) (下載次數: 1279 )
遊戲概述
很久很久以前,傳說當世界秩序失衡、魔物橫行之時,曾有四位勇者挺身而出,一路披荊斬棘、過關斬將,終於重新回復了世界的和平。而現在,潛伏已久的黑暗勢力悄悄地伸出了魔掌,邪惡的爪牙們正傾巢而出,亟欲奪取維繫世界能量的風、火、水、土四大水晶。為了守護世界和平、促進經濟發展,以及消滅寂寞大魔王,勇敢的紅髮戰士,請拿起你的寶劍奮戰到底吧!
繼續閱讀 < < "水晶守護者:Crystal Guardian"