Archive for September, 2010

一個好的程式設計??

Friday, September 17th, 2010


電影「駭客任務」裡面有一句台詞,尼奧問: 「What is Martix?」,莫斐斯:「Martix is a CONTROL」。
而我覺得程式設計也是如此,一個好的程式設計 = 一個好的控制流程

今天在debug一個UI錯誤時,看到有一些code真的快讓我吐血。重覆的code出現了好幾次,一堆event跳躍式的控制寫法,一堆例外處理判斷。上面講的都是寫程式時的大忌。

一個好的程式碼除了要段落分明、格式清楚外(這是基本),更要避免不斷重覆的code出現。如果一段類似的程式邏輯出現兩次以上,你就應該要把它寫成function。這不是每個寫程式的人都應該具備的基本知識嗎??…… ~”~ 為何我還是不斷看到這樣的code出現,這是要我…………. 怎麼教?? (教這個好像在羞辱人一樣….. ~”~)

而在處理event時,儘量要統一在一個地方處理。不要一下子換這段處理,一下子又跳到那段處理。這會讓人搞不清楚,到底這個event收到時,真正是在哪裡被做。如果是一個複雜的event處理邏輯,可以在class object內定義一個global flag變數去control,也總比到處綁callback function再拿掉好,雖然在object內用global變數其實也是不太好的做法。

而處理一段邏輯時,最好將所有的可能的情形先做分析,做一個統一並且一致化的處理或設計。才不會一下子漏了這塊沒想到,補一補,一下子又漏了那塊,再補一補。這樣補下來的結果,只會讓程式碼變得非常複雜難以理解和除錯。

除了上面提到的這些,在做模組化(Modulize)的設計時,要儘量避免不同的程式模組彼此相依的設計。若要溝通,最好透過一個中介層或API處理。這點尤其是在寫底層library時尤其重要。若一個模組的code切不乾淨時,也是會造成日後maintain上的困難。

這些,學校老師不一定會教,我也是這幾年工作慢慢累積這些經驗的。這些原則,說起來沒什麼,可是很多人往往就是做不好。我覺得一個好的軟體工程師要自己會去想,自己去反省過去寫過的code的優缺點,這樣程式的功力才會進步。最好要時時刻刻把這些準則放在心裡,不要想說為了貪圖一時的方便,而用比較投機的寫法,這是不對的。

最後,發表個感言:
如果你問我:「程式設計對我而言是什麼?」
我會說:「程式設計對我而言,是一個帶領人們進入神奇國度的東西,是一個好的控制,一個控制的藝術」

Dream

Tuesday, September 14th, 2010


What * is * DREAM?
Dream is a energy to make me stronger,
a energy to make me believe this world is beautiful,
a energy to help me pass the shadow of life,
a energy to make me feel I am the one who will do the best.

Without dream, you will feel life is boring and significant-less.
With dream, you will do everything toward that goal even the process is hard.

Having a dream is a beautiful thing.
But the more important is, you need to do it realistically, not just think.
So, take your foot up, toward whatever you want.
Every step will be sweet and with harvest.

People say “no pain, no gain”. I say “no dream, no success”.
Hope everyone get your own dream… Keep Walking!

StarCraft II: 睽違十二年的RTS終極大作

Thursday, September 9th, 2010


寫這篇,其實已經晚了,因為上市第一天我就入手SC2開始瘋狂玩…. :shock: 玩到現在才勉強擠出時間來寫這篇 :P 。講到StarCraft(星海爭霸),就不得不提到WarCraft II(魔獸爭霸2)。這兩款遊戲分別是帶領即時戰略遊戲和Blizzard進入另一個里程碑的世紀大作。若說Blizzard是RTS的幕後推手也不為過,雖然第一款RTS遊戲(應該是Dune2,沙丘魔堡2)並不是他做的。

註: RTS = Real Time Strategy,即時戰略遊戲

沙丘魔堡2的盒子及遊戲畫面

WarCraft II的盒子及遊戲畫面

真懷念War2肥肥(Orge)的肥屁股啊~~ XD,還有那令人聞之喪膽的「喔~喔~喔~」加嗜血術的聲音,聽到這聲音代表你要被操家了或你操別人家… XD。第一次接觸到War2(俗稱”挖土”)時,是在我大一上的某一天清晨。有個神秘學長突然在BBS問我要不要打War2? 就這樣墜進了War2、RTS的深淵。在這之前從沒玩過連線遊戲,只在電動間跟人打過快打旋風或合作玩遊戲。第一次連線玩War2時當場驚為天人! 驚嘆著網路怎麼這麼神奇,往後的日子裡(直到SC發片),每天都要打到欲罷不能才肯停手。還差點被二一…….. Orz

但那時War2的設計並不是很平衡(呃…應該說極度不平衡),那時只有兩個種族: 獸人與人類。獸人的第三級兵種肥肥可以放嗜血術增加攻擊力,而人類的第三級兵種騎士可以放神光術補血。但在對戰時,其實根本來不及補血,所以騎士肯定是被抓狂過的肥肥打成肉醬的 XD。所以其實對戰時都是獸人大獸,我還記得當時對戰幾乎都是打Garden of War(戰爭花園)這張地圖。

後來SC在我大三那年發片了,身為RTS迷和系代表(War2比賽代表 XD)當然是二話不說就買來玩,就算吃泡麵也甘願。

StarCraft一代及其資料片 Brood War (怒火燎原)的外盒和後來出的戰鬥組合包

Loading畫面
   

當時SC一代就已經有三個種族 – Terran(人)、Protoss(神)、Zerg(蟲)。三族的兵種和建築相差非常多,但平衡度卻仍然維持得非常不錯,這在當時是一大創舉和挑戰(因為從來沒有人做出這種遊戲)。日後發行的許多RTS遊戲,如: AOE(世紀帝國)、RA(紅色警戒)…etc. 都沒辦法超越它。AOE雖然宣稱有8個種族之多,但其實各種族之間的差異非常小,其它RTS遊戲也是如此。也因此,SC後來被挑選為WCG(World Cyber Game)的競技遊戲之一,直到今日仍被當作韓國職業電玩比賽的項目之一。

遊戲畫面 (真懷念毛毛蟲啊~~ :cry: )

當時,我讀的科系每年都有全國的”大電盃”比賽(就是全國所有電機系的競賽),除了比藍球、排球、壘球這類常見的運動外,還有比SC(之前是War2),很特別吧? XD。身為系上神手的我,雖然書讀的不怎麼樣,但每年都得靠我拿下這項比賽的前三名,當時還挺驕傲的勒~~ :mrgreen: 。也因此認識了不少別的學校的好手。

在大五延畢那年的暑假,WCG第一次舉辦了世界電玩比賽,那可是整個電玩界的大事。當時台灣的選秀賽我也有參加,是在高雄場。不過說起來真是曲折離奇,我原本是透過網咖幫我報名(真是奇怪的規定~~),結果不知為何報名沒成功。而我同學也有報名,但是他報成功了,我就想說去替他加油一下和看看別人比賽也好。結果一到比賽場地,是一間頗大間的網咖。網咖的老闆看到我穿”大電盃”的T-Shirt,就問我說: 「你看起來應該是高手吼?」,他大概以為”電”那個字是”電玩”的意思,其實不是,那個”電”是”電機”的意思 XD。我說:「沒有啦!」,然後他又問:「你有參加比賽吧?」,我說:「我原本有報名,可是不知道為什麼沒報成功,所以今天只是來替同學加油」。結果他二話不說就叫工作人員臨時加我的名字上去,讓我也參加比賽。我就這樣莫名奇妙的去比了 @@;;

第一場對戰,我用人類玩,差點輸給一個小弟弟 ~”~ (因為那時我比較喜歡玩人類)。後來幾場想說還是改用我擅長的神族玩比較保險好了。結果,一路過關斬將,讓我打進了分區8強。隔天,就坐著遊覽車莫名奇妙的上台北打全國決賽了。結果,又一路過關斬將,莫名奇妙的被我打進前4強,最後居然拿到亞軍… :shock: 那天,我姐住台北還趕來替我加油~ 真謝謝她阿~ :P 。而當時我並不知道打到前四強就可以代表台灣到韓國參加WCG世界電玩比賽,原本只是為了拿獎金(亞軍有五萬塊,不過要扣15%的稅) :shock: 。猶豫了一下後(因為出國比賽的期間剛好已經開學了,不過我只有修一學分的保齡球課),想說這是人生的難得經驗,就還是決定去了,然後請同學幫我跟老師講一下(結果他也沒幫我講,害我差點要被當掉… 囧rz)。回想起來,還真要感謝當時那位高雄網咖店的老闆啊~~~

當時拿到的台灣區亞軍獎牌,現在還留在我的書房展示櫃裡(得意貌 → :mrgreen: )

還有去韓國比賽時,主辦單位送的星海、WCG手錶與WCG徽章

Player Guide選手名冊和WCG證書(不知道給這要幹嘛,找遊戲相關工作時用的???? XD)

第三排的倒數第二個外國人(裝可愛嘟嘴那個),就是當時的星海世界冠軍,我還記得他的ID叫:「Grrrrrrrrrr…..」

有了台灣亞軍這個光環之後,後來老爸和老媽也比較少唸我打電動了,大概知道打電動是兒子的特異功能吧…XD。整個過程真的是只有”莫名奇妙”四個字可以形容… @@。不過我覺得我當時運氣是蠻好的啦,雖然我跟一般人比算蠻強的了,但我相信應該還有更多比我厲害的高手才對,可能只是沒參加比賽或不小心輸掉了。就這樣,我就飛到韓國去打星海了!! 這也是我生平第一次出國… :shock:

當時在韓國讓我最難忘的不是韓國的泡菜和烤肉(雖然也挺好吃,而且每天吃… Orz),也不是什麼景點或美女,而是每天晚上跟全世界的星海阿宅好手(其實有不少是帥哥)窩在選手村(美其名叫選手村,其實是在郊外大一點的獨立旅館)的一樓電腦間,利用LAN區網互相廝殺,一直玩到半夜才肯遲遲離去睡覺的時光(那時不管玩多久都不會累,好像打了針的marine一樣…)。真的好特別!!!! @@ 小小的一間,味道其實不太好聞(因為外國人都有體味和古龍水味…XD),但卻是讓我一輩子也忘不了的美好經驗,即使是被痛電了(有一場還被韓國的女職業選手(長的頗正 XD)電…. 身為男人的顏面盡失…. Orz) 。後來,打著打著,打到前24強時,被一位韓國職業選手和一位美國好手(好像是國中生)KO掉了,便無緣再晉級。

恩~ 好! 歷史和往事回憶完了,該談談星海二了。(原本只是想講一下星海2的優缺點,怎麼搞的像出回憶錄和RTS歷史簡介….囧rz)

StarCraft二代一般版及典藏版外盒
   

遊戲畫面

這次的星海二,整體而言,我覺得是有比一代進步很多的,僅管有些人不這麼認為。我列出下面幾點:

Battle.net
這次新版的Battle.net比以往多加了很多功能,尤其是分階級制度。一代時對戰都要自己開遊戲等人加入,遇到的盟友或敵人實力完全是良幼不齊,只能碰運氣。而新版Battle.net除了可以透過Server自動幫你挑選合適的盟友與對手外,所有的聯賽紀錄都會被儲存在Server上,所以即使你重灌或換了台電腦,紀錄還是都在。(So~~ 千萬不要投機用作弊程式,被抓到就永不翻身!)

分階制度:
青銅<白銀<黃金<白金<鑽石

當你在某一階級,打贏了好幾場電腦指派給你等級比較高的對手後,就有機會昇階。反之,若你輸了好幾場比你低階的對手後,就可能會被降階。而Server在配對時,有可能會將已經組成團隊(AT)的玩家與Random Team的玩家作配隊,但RT玩家通常都會階級較高。不過這次Battle.net並沒辦法像以前一樣,可以自由選擇要加入的區域(如美西、亞洲…等)。而是當初買遊戲時,遊戲附的序號就已經決定你要玩的區域了,所以就只能待在台灣Server玩,可能是為了要控管帳號吧…I Guess~~。

單位
二代目前的單位種類並沒有比一代多,很多還是保留一代的設計,所以被許多玩家譏為根本只是一代的翻版。雖然單位種類數跟一代是差不多的,不過許多單位的能力和外形都有被調過了,所以玩起來還是跟一代不太一樣。有些一代的單位被拿掉了,但也有一些新單位的加入,像神族的巨像、虛空鑑、聖母鑑,蟲族的毒爆蟲、感染蟲、蟑螂,人類的死神、掠奪者、雷神等等。而二代的資料片目前也已經開始著手在進行了,只是不知道發片日期是何時就是(也許明年聖誔節?),希望到時候有更多不一樣的兵種可讓玩家選擇,加油! Blizzard~~。

遊戲畫面
這就不用什麼講了,這次SC2採用了新的3D繪圖引擎,替遊戲畫面品質上加分了不少。也因此讓硬體商賺飽飽,出現了一堆換機昇級潮。SC2的畫面完整支援了所有的解析度,也可以自己依電腦等級調整顯示品質。PO出我的電腦配備作為參考:
Hardware
Mainboard: MSI 770-C45
CPU: AMD Phenom II X4 955
VGA: MSI R5770 Hawk 1GB GDDR5
RAM: DDR3 PC1333 2G x2
HD: Kingston SNV425 64GB SSD (Boot HD)
Seagate 7200RPM 500GB
Seagate 7200RPM 250GB

Software
OS: Windows 7 32-bit 旗鑑版
DirectX: DirectX 11
VGA Driver: ATI Catalyst™ 10.7a Beta Driver
Anti-Virus: AVG

SC2建議顯示品質: 超高

PS. 建議玩SC2一定要用Win7才會玩得比較順~~

中文化
這對英文不是挺好的玩家來說,感覺差很多。以前一代是全英文介面,並沒有出多國翻譯(官方)。這使得許多玩家要硬記單位和建築的英文單字,而可能有點怯手。尤其是玩劇情模式時,只能聽英文語音和介紹,完全不知道是發生了什麼事。二代花了很多功夫在做中文化,而且做的很”完整”,舉凡你看到的、聽到的全都是100%中文化過的,連角色講話的”嘴形”都有調過… :shock: 我只能說:「啊!?? 你嚇到我啦~~」(這句是經典又欠扁的SCV工人的語音 ~”~)。不過對戰時聽到中文語音,我實在是有點不習慣,所以去抓了中英語音切換程式。只有玩劇情模式時,才切回中文語音。

有關中英語音切換,可以參考巴哈這篇文章

操控
二代的編隊總算改成無上限了,以往一代一隊只能編12個單位。這對手速慢的玩家來說是一大苦惱,我手速不算慢,但連我都這樣覺得,真的好累 ~”~。而建築編隊也無上限且可混編,以前一代一次只能編”一個”,真的很不方便。不過這也造就了許多一代的操控神人出現(我記得韓國好像有個變態人類高手叫Boxer? 他可以用兩隻兀鷹殺光敵人家2x隻的工兵,車子還活著… 好可怕… :shock: :shock: :shock: )。

AI
這代的電腦AI加強了許多,以往電腦的兵大概只會笨笨的往前衝,完全不會退。現在不僅會退兵還會提早喊:「GG」,半夜玩的時候,真是又嚇到我了….@@。但有些AI我覺得Blizzard做過頭了,像SCV會自動修理附近的單位和建築,這對其他兩族似乎不太公平? 而且過度自動化的結果,會讓玩家少了”玩遊戲”的掌控感覺,這並不是一件好事。

地圖
以前一代,大多都只打”The Hunters”這張8人地圖,而現在,多人對戰用的地圖多了很多不同的選擇。隨著不同的地圖,有的易守難攻,有的很開放很難擋門,在對戰時就有不同的打法,即使是一模一樣的種族和玩家。而新版的地圖編輯器聽說(我還沒試過)功能非常強大,國外就有人用SC2的地圖編輯器做出像WOW世界的遊戲地圖,期待未來有更多玩家自製有趣的地圖出現。

Replay錄像
二代的Replay記錄了更多的數據,例如: APM(Actions Per Minute)、建築/生兵順序的時間點、單位一覽、資源、對話記錄…等等,記錄的非常詳盡。讓玩家在打完一場精彩的對戰後,還可以看重播,檢討成功或失敗的點,非常的讚! 可能是Blizzard為了日後SC2被拿來當作職業競賽項目或大型電玩比賽時,比賽中的精彩Replay可能會被拿到各大網站甚至電視上撥,所以把錄像功能做的非常完善。

劇情模式
這次Blizzard在星海2的劇情模式下了許多功夫,可能比對戰部份還多。不僅有劇情模式專用的遊戲大廳,而且還有分不同的路線可選擇。而劇情模式有點像在玩RPG Game一樣,可以自己選擇角色對話或觸發事件。在劇情模式裡,出現了許多以前一代的單位和特殊單位,這些是在對戰時玩不到的,也有不同的科技樹可選擇。劇情裡穿插了許多一代的回憶和二代新面臨的問題,讓人有整個故事連貫的感覺。偶爾還會看到一些Kuso的畫面和對話,只能說Blizzard真的很用心! ;-)

合作對抗電腦
這是二代新的功能,很適合新手一開始練習時玩玩。選擇好要用的種族和電腦難度後,就像打聯賽一樣,電腦會自動幫你找玩家盟友一起打電腦。你說以前一代都可以一打七了,有什麼好合作的? 嗯~ 你二代先打贏困難電腦再說這句話比較好。如果你打贏了困難電腦,再去挑戰極難的,如果可以不用賤招正常打贏電腦,那代表你的實力已經有一定水準了。

成就系統
成就系統應該是Blizzard在開發WOW時想出來的點子(或參考別人…),有點像是在收集卡片一樣。可以讓玩家除了打正規戰玩玩劇情外,還有別的事可做,滿足玩家的收集慾。個人是覺得還不錯啦~ :)

但目前二代才剛開放測試完沒多久,所以有些單位或種族的平衡性仍有待改善。我相信以Blizzard的作風,是會一直持續更新的遊戲的平衡性和臭蟲的。所以各位玩家也不用太失望~~ 總之,沒玩過RTS的玩家可以來玩玩看,不確定自己喜不喜歡的話,可以先買99元的一日試玩包來玩。而星海的老玩家們~ 快點回籠吧~ 我在Battle.net上等著你們的挑戰~~ ;-) 錯過這次,也許要再等12年了…. Orz

SC2相關網站:
星海爭霸2 官網
星海爭霸二藏寶箱 (Replay Upload功能做的很讚! ;-) )
巴哈姆特 星海爭霸板

下次再寫這麼多字,不知道什麼時候了…. Orz