Mar 31 2008

表頭檔要不要?拿速度來換!

本文要提出的內容,是一個非常基礎的程式觀念:表頭檔 (Header Files) 與編譯依存關係的課題。雖然對於許多程式設計者來說,這個觀念技巧應該是相當基本而且必備的基礎知識,但在現實世界中,我卻時常看到許多人忽略了這個問題的重要性,因而造成專案開發流程中的重大災難。

來看看實際的範例。例如在專案中有一個 GameObject 類別,用來實作遊戲物件的相關操作行為:

// @ GameObject.h
#include < string >

class GameObject
{
public:
    int GetType();
    std::string& GetName();

private:
    int m_iType;
    std::string m_kName;
};

有了基礎的遊戲物件類別之後,自然會陸續建構並且實作出其他的類別。當 GameObject 需要使用或包含其他的類別時,可能會在類別中定義一個該類別的成員變數,以結合 GameObject 類別進行更複雜的操作行為。例如,可能會在 GameObject 類別中,加入一個 ComponentA 類別的物件定義遊戲物件的基本組件:

// @ GameObject.h
#include < string >
#include "ComponentA.h"

class GameObject
{
public:
    int GetType();
    std::string& GetName();
    ComponentA& GetComponentA();

private:
    int m_iType;
    std::string m_kName;
    ComponentA m_kCompA;
};

繼續閱讀 << "表頭檔要不要?拿速度來換!"


Mar 28 2008

《Statistically Speaking, It’s Probably a Good Game, Part 2》:遊戲設計者的基礎統計入門

Normal Distribution 3D原文出處:Statistically Speaking, It’s Probably a Good Game, Part 2: Statistics for Game Designers

承續前篇文章「遊戲設計者的基礎機率入門」,本文是原著系列作中的第二篇,將介紹「統計」理論的基礎概念,以及統計在遊戲設計中的應用實例。

科學理論中的統計學,應用在許多不同的層面都十分有用;但相對地,統計學也很容易被誤用而產生出誤謬的結果。統計學就像是一種暗黑的科學,身為勇者的你,如果不能善加利用這個強大的力量而被魔戒誘惑,根據錯誤的推論做出重大決策,往往會導致糟糕而悲慘的結局。

統計學是與「資料」高度相關的一種理論。蒐集資料的方式,包括常見的路邊攔人問卷調查、電話詐騙訪談調查、焦點群組測試程序,以及偷偷紀錄不告訴你等等許多不同的方法可用,而重要的是,如何將蒐集而來的資料加以分析詮釋,得出對於遊戲設計者有用的知識以及資訊。與前篇文章相同,作者在文章開頭就先提出了三個有趣的小問題,在繼續往下閱讀之前,不妨先思考看看:

  • 謎題一:20 位焦點測試者剛測試完你所開發的蝸牛賽車遊戲,根據蒐集所得的資料顯示,跑完整個賽道的最佳成績是 1 分 24 秒,而最差成績是 2 分 32 秒。如果你原先設定的遊戲設計目標時間是 2 分鐘左右,那麼這是一次成功的測試程序嗎?如果你蒐集了更多的資料,計算出這些資料的平均值是 2 分 5 秒,而標準差是 45,這樣的結果可以讓你滿意嗎?
  • 謎題二:你設計了一個休閒遊戲,目前正在 Beta 測試的階段,總共找來了 100 位的測試者完成超過 1000 次的遊戲測試程序。將蒐集回來的資料計算之後,顯示出分數的平均值是 52000 分,而標準差是 500 分,這樣的結果是不是已經通過檢驗,可以準備出貨上市了呢?
  • 謎題三:你設計了一個 RPG,然後從中蒐集資料觀察玩家從等級 1 晉升到等級 5 共需花費多少時間,其中共有 4.6 小時,3.9 小時,5.6 小時,0.2 小時,5.5 小時,4.4 小時,4.2 小時,與 5.3 小時這幾筆資料。你是不是能夠直接將這些資料拿來計算平均值與標準差?

繼續閱讀 << "《Statistically Speaking, It’s Probably a Good Game, Part 2》:遊戲設計者的基礎統計入門"


Mar 25 2008

Abstract Factory:物件家族的抽象工廠

Abstract Factory UML本篇文章將承續前篇「Factory Method:工廠化的物件生產方法」,介紹經常與 Factory Method 模式搭配使用的 Abstract Factory 設計模式,以及 Abstract Factory 模式於遊戲程式中的應用實例。

在複雜的軟體系統架構中,將原來雜亂無章的組件加以分門別類,然後從中取出性質相似與功能相近的物件,使其集中群聚,就能夠大幅地簡化程式系統組件的複雜度。而 Abstract Factory 模式,正是用來協助程式設計者將物件分門別類與集中管理的好方法。

Abstract Factory 的「工廠」,與 Factory Method 的「工廠」目的相同,同樣屬於「生成模式」的分類,都是用來產生出物件成品的製造者。對於設計模式的入門者來說,很容易將 Factory Method 模式與 Abstract Factory 模式兩者的使用目的以及使用時機搞混;雖然都是屬於工廠類型的作業模式,然而 Abstract Factory 與 Factory Method 的不同之處在於,抽象工廠模式是將一組性質相關或相依的物件,放在同一個工廠裡生產。例如對於食品工廠來說,能夠生產的包含飲料、零食與泡麵三項食品類的產品;而皮件工廠,則能夠生產出皮包、皮帶與皮鞋等皮製產品。也就是在一個工廠之內有數個不同的生產線,能夠同時進行不同成品的生產作業。在實際程式系統的應用中,可以說 Abstract Factory 經常是一堆 Factory Method 的組合

繼續閱讀 << "Abstract Factory:物件家族的抽象工廠"


Mar 21 2008

Google Summer of Code:貢獻,收穫,然後成長。

Google Summer of Code Map2008 年的 Google Summer of Code 活動正如火如荼地展開當中。

所謂的 Google Summer of Code (GSoC) 是由 Google 提供贊助經費,推動在學學生進行「開源專案」(Open Source Projects) 開發工作的活動計畫。這項計畫自 2005 年起每年舉辦,今年已經是 Google 第四度舉辦這樣兼具實質意義與精神意義的活動。

開源專案的發展,一直在全世界的軟體產業中佔有相當重要的地位。而在遊戲業界中,則以 John CarmackQuake 系列作品,做為原始碼開放精神的首選典範。如果沒有了這些專案開發者與貢獻者的無私奉獻,現在的我們就不會有免費的 LuaWordpressMySQLPHPOGRE 以及許許多多功能強大的軟體系統可用。

根據 GSoC 2008 FAQ 中開宗明義所闡述,發起這項活動計畫有下列五項目的:

  • 使更多的開源專案能夠被創造出來。
  • 鼓勵年輕的開發者,開始參與開源專案的開發。
  • 幫助開源專案找到並且帶來新的開發者與貢獻者。
  • 提供資訊科系的學生,一個在相關領域工作的機會(而不是去做漢堡)。
  • 給學生更多接觸真實軟體開發情境的機會。

繼續閱讀 << "Google Summer of Code:貢獻,收穫,然後成長。"


Mar 18 2008

《Statistically Speaking, It’s Probably a Good Game, Part 1》:遊戲設計者的基礎機率入門

La Penseur原文出處:Statistically Speaking, It’s Probably a Good Game, Part 1: Probability for Game Designers

本文作者是一位遊戲設計者,在這一系列的三篇文章中,他以生動有趣的角度介紹了「機率」「統計」兩項數學理論的基礎概念,以及兩者在遊戲中的相關應用。本篇是系列作的第一篇,解釋了機率的部分,而後的第二篇介紹統計的部分,最後一篇則是以一個 Board Game 的實例,解釋機率與統計於遊戲設計中的實際應用。我個人覺得這一系列文章非常棒,點出了很多遊戲數值設計層面的迷思與問題點,相當值得遊戲企畫者,或未來有志於從事遊戲數值企畫的讀者詳加閱讀。

許多人只要一聽到有關於「數學」的詞彙或術語,可能就會倒吸一口涼氣,然後想辦法敬而遠之。「機率」與「統計」,應該也曾經出現在大部分讀者的求學過程中,而且經常是屬於不怎麼受歡迎的兩個傢伙。但不論過去你和它們相處得好不好,和它們的關係像陌生人還是好朋友一樣,如果能夠善加利用機率與統計的知識,將能夠使許多遊戲設計的功能與機制更加完備而有趣。

文章開頭,作者就先提出了三個有趣的動腦小問題。在往下繼續閱讀之前,不妨先試著思考看看這些問題的答案:

  • 謎題一:你正在設計一個 MMO 遊戲,其中某隻怪物有 10% 的機率會在死掉之後掉落寶物。但是有位測試者告訴你,他殺了 20 隻這種怪物後,共拿到 4 次掉落的寶物;而另一位測試者,則回報在解決 20 隻怪物後,卻沒有拿到任何的掉落寶物。這是程式碼的臭蟲嗎?你應該殺去程式部門震怒拍桌子了嗎?
  • 謎題二:你要在戰鬥系統中加入「致命傷害」的要素,假設玩家的基礎攻擊命中率是 75%,只要成功擊中了對手,系統就會再做一次機率判定,如果成功通過機率運算,傷害數值就會乘以 2 倍;然後再繼續做機率判定,如果再度成功的話,傷害值就變成原來的 3 倍;以此類推下去,不斷地往上加乘。在這樣的系統設定之下,玩家的每次攻擊,至少能夠造成 2 倍傷害的機率是多少?玩家能夠造成 4 倍或 4 倍以上傷害輸出的機率是多少?
  • 謎題三:你決定在遊戲中加入一個賭博的小遊戲,讓玩家能夠下注丟擲硬幣後的正面或反面兩種結果。然而,在這個小遊戲中必須包含一個歷史紀錄,就像是賭場中的下注系統一樣,在螢幕上會顯示出最近 20 筆的遊戲結果。做為這個小遊戲的設計者,你是否應該要求程式設計者在其中加入某些特殊的運算邏輯,以防止玩家利用這些歷史紀錄的資料,贏錢贏到使你的遊戲經濟系統崩潰?

繼續閱讀 << "《Statistically Speaking, It’s Probably a Good Game, Part 1》:遊戲設計者的基礎機率入門"


Mar 15 2008

Factory Method:工廠化的物件生產方法

Factory Method UML 本篇文章將介紹在軟體設計模式 (Design Patterns) 中相當著名而且受到廣泛使用的 Factory Method 模式,以及 Factory Method 在遊戲程式設計難題中的實際應用。

想要熟悉 Factory Method 設計模式,首先要瞭解下列幾項問題:

  • 這個設計模式的目的是什麼?
  • 這個設計模式能夠用來解決什麼樣的問題?
  • 這個設計模式要如何應用在遊戲程式之中?

或許對於程式設計者來說,十個人之中有九個半討厭聽到「工廠」或「工廠化管理」的相關術語,但是在軟體設計模式的領域中,工廠化的生產作業方式反而是相當實際而且管用的方法。Factory Method 是軟體領域中,非常基礎同時也非常重要的設計模式之一,或許你從來沒有在書本中學習過相關的知識,但是已經在撰寫程式的經驗過程中,處處使用著這樣的設計方法而不自知。如果能夠進一步瞭解這些前人思維架構的心血結晶,將有助於改善現有的程式架構,並且提升未來撰寫程式系統架構的能力。

繼續閱讀 << "Factory Method:工廠化的物件生產方法"


Mar 12 2008

啪打啪打啪打碰!

Patapon再次在機緣巧合之下,向好心人借到了一台 PSP 與 Patapon 這個創新有趣的遊戲,結果就是讓我這幾天一直沈浸在這些大眼 Pon 與啪打啪打的節奏聲中。Patapon 結合了音樂節奏即時戰略的新穎玩法,再加上極具獨特性的美術風格以及豐富活潑的音效,使這個遊戲呈現出很強的吸引力以及感染力。

不過如果要挑出一些小缺點,應該是其中的某些細節部分做得不夠仔細吧。很希望能夠一關接著一關的玩下去,但還是免不了需要進行所謂的練功程序;而在練功的情況下,為了達到 FEVER 的狀態,需要一直重複著相同的按鈕步驟,時間久了就會覺得有點厭倦。另外像是使用材料產生士兵的地方,介面上沒有明確提示出合成材料是可以更換的選項,結果就是我把得來不易的「響聲」全都拿去製造最初階的兵種了,直到打 Boss 不夠力時才發現原來可以生產更強的部隊。還有在某個需要祈雨的關卡,我因為把 PON 按鈕誤認為 DON 按鈕(別懷疑,在連玩 N 小時的情況之下,真的很容易眼殘誤認!XD),因而卡在同一個地方一個多小時以上。 Orz

這個遊戲很奇妙地非常合我的 Tone。我特別喜歡這樣畫面簡單、元素創新、風格出眾的遊戲類型。在進行遊戲的過程中,需要維持相當高的專注力以及聽注力,想要一心兩用的一面看棒球、一面按按鈕練功,完全就是沒辦法同時兼顧的兩件事。要命的是,現在我自己在走路、騎車或是思考問題的時候,都會不自覺地啪打啪打啪打碰了起來,這些可愛大眼 Pon 的影響力真的是太恐怖了啊啊啊啊~ XD

在這篇簡短的訪談文章裡,提到 Patapon 是一個先有了美術成果,而後才想出遊戲設計與玩法元素的奇妙遊戲作品。遊戲原畫師 Rolito(他的網站部落格)是一位現年 35 歲的法國人,這是他所參與的第一個遊戲專案,而 Patapon 的原型是早在 2002 年時就已經創造出來的角色。由他所創造出來的角色原型,帶給 Patapon 的遊戲製作人「節奏擊鼓」、「史詩戰鬥」與「偉大探險」的強烈印象,最後開發出來的成果,就是呈現出這樣一款前所未見的有趣遊戲。

「Art as gameplay?」
「Yes.」
「Art as gameplay!」

或許未來,我們會見到越來越多這樣獨特有趣的遊戲呢。

另外,為了進一步學習與測試 NDS 平台上的程式設計,終於去買了傳說中很貴的謎樣備份卡。看到自己所寫的程式,能夠在真正的 NDS 主機上順利執行無誤,還真是有一種難以言喻的感動哪!:D


Mar 10 2008

《好創意,更要好管理》:感性與理性的衝突碰撞

好創意,更要好管理書名:好創意,更要好管理
作者:鄭秋霜
出版:三采文化 (2007年10月)

我是一個很缺乏創意的人,所以一直以來都很喜歡閱讀有關於「創意」這個主題的書。然而大部分談論創意的書,多著眼於理論學說或是訓練學習的方法論,比較少有真實世界中的驗證實例。「好創意,更要好管理」這本書最吸引我的地方,就是在於其中所收錄的十二個案例,全部都是台灣文化創意產業的真實故事

等一等。

「創意」與「管理」?是不是有人搞錯了?這兩個主題為什麼會放在同一本書裡面?

創意與管理,是兩個完全不同世界的東西,怎麼能夠放在同一本書的內容中討論?所謂的創意,是能夠讓蘋果公司開發出大紅大紫的 iPod,能夠讓任天堂的 Wii 風行全球的超級關鍵耶。而管理?只是些硬梆梆的老學究理論,或是渾身銅臭味的商人腦袋裡面裝的東西吧。創意與管理,根本是兩件完全背道而馳的事啊!畢竟擁有無限可能的創意,要如何能用有限管理的制度來約束呢?這些發明什麼鬼管理制度的人,應該一個一個抓去關起來才對,都是因為世界上有這樣的人存在,才使得我們無法自由發揮寶貴的創意!

繼續閱讀 << "《好創意,更要好管理》:感性與理性的衝突碰撞"


Mar 06 2008

初探Nintendo DS程式開發與設計(一)

Nintendo Dual Screen

是的,你沒有看錯,本篇文章的主題是「NDS 程式設計」

由任天堂公司所開發的 Nintendo Dual Screen 攜帶型掌上遊樂器,前幾年甫一上市就席捲了全世界的遊戲市場,而在 NDS 平台上的程式設計與開發,也已經是行之有年並且十分活躍的社群活動。一開始是由 GBA 平台,開啟了業餘愛好者在 Console 平台上自製程式的可能性,接著在效能強大的 NDS 掌上型遊樂器問世之後,很快地就有幾位能力高強的程式設計者,開發出能夠製作 NDS 程式的函式庫與工具

我自己原來就非常喜歡玩 NDS 上的各種遊戲,在機緣巧合之下,最近剛好接觸到 NDS 程式開發的相關知識,覺得實在是非常新奇有趣又好玩!所以往後在這個新增的「學習筆記」分類中,我將會分享自己在學習過程中所獲得的一些心得與經驗;包括從門外漢一步步踏入這個新領域的過程中,所需建立的概念以及所需閱讀的文章,並且由淺入深地詳細解釋每個必要步驟,希望能夠對於有興趣學習 NDS 程式設計的讀者有一點幫助。如果其中內容有所錯誤或疏漏之處,也請不吝指正。

在搜尋引擎中,鍵入 NDS 程式開發或 NDS 程式設計的相關字句,立即就能夠找到許多相關於 NDS 程式開發的網站教學,然而,對於一個完全沒有 Console 平台程式寫作經驗的人來說,應該要從哪裡入門比較合適呢?在本篇文章中,將使用 libnds 函式庫與 devkitPro 開發工具,加上 PAlib 的環境設定為輔,在 Windows 平台下,初探 NDS 程式設計領域中 Frame Buffer 的使用以及 Input System 的操作,並提供完整的程式碼範例下載。

繼續閱讀 << "初探Nintendo DS程式開發與設計(一)"


Mar 03 2008

熱門文章排名與新的投票調查主題

在側邊欄位加了一個「熱門文章」的排名列表。這個排名的評分方式,是以直接點擊、分類點擊、存檔點擊,還有留言迴響等等要素的加權值所自動計算出來的。可以參考看看猴子靈藥的來訪者,對於哪幾篇文章的關注程度比較高喔!

在目前的排行榜中:

讓我們恭喜這些得獎者~ XD

另外,更新了「投票調查」的主題,請各位閒暇之餘去按一下投票選項吧~感謝支持! :D