城市的另一端,一個普通工人小區的居民樓裡,林天的世界正發生著一場天翻地覆的變化。
窗外是屬於整個城市的春節喧囂。空氣中充斥著家家戶戶的飯菜香,親戚朋友間的談笑聲,以及孩子們在樓下追逐打鬨、燃放“甩炮”時發出的“劈啪”脆響。這些充滿了人間煙火氣的聲音透過窗戶的縫隙滲進來,卻像是被一道無形的牆壁隔絕開來,無法侵入書桌前那個少年的領地。
林天的整個寒假,幾乎都是在這張不足兩平方米的書桌前度過的。
這裡是他的戰場,他的實驗室,也是他的聖殿。
那台由楊明宇“爭取”來的嶄新的電腦,因為寒假需要用的緣故,楊明宇讓林天把它帶會自己的家中。此刻它正發出低沉而平穩的“嗡嗡”聲,像一頭溫順的小動物忠誠地陪伴著它的主人。螢幕上,幽藍色的光芒映照著林天略顯蒼白的臉和他那雙因為長時間聚焦而佈滿血絲卻又亮得驚人的眼睛。
他的手指在鍵盤上飛舞,敲擊聲清脆而富有節奏,像是在演奏一首激昂的隻有他自己能聽懂的交響樂。一行行、一串串在常人看來如同天書般的代碼,在他的指尖下,如流淌的溪水般不斷地生成、彙聚、奔騰。
對於林天而言,這個寒假是一場漫長而孤獨的“創世之旅”。他的臥室就是那片混沌的虛空;那台嗡嗡作響的電腦就是他的創世神台。而他的目標,遠比任何遊戲裡的最終BOSS都更具誘惑力——創造一個真正屬於他自己的,活著的“世界”。
這個世界的名字,他早已在心裡想好,叫——“勇者鬥史萊姆”。
……
春節前的十幾天,是林天為這個世界打地基的日子。他明白,羅馬不是一天建成的,一個完整的遊戲更不可能一蹴而就。他的第一個也是最核心的目標是“創造生命”。
他要創造兩個“生命體”:一個代表玩家的“勇者”,和一個作為敵人的“史萊姆”。
這個過程遠比想象中要抽象和困難。他麵對的不再是遊戲裡那些華麗的角色建模,而是一行行冰冷的代碼。他翻開那本厚重的《C++PrimerPlus》像一個虔誠的學徒,在學習傳說中的“造物術”。
他能清晰地聞到,那本書上散發出獨特書香,那味道讓他上癮。他學到了一個全新的讓他著迷的概念——“對象”(Object)。
他嘗試著,用代碼定義一個名為Hero的“對象”。他為這個Hero賦予了最基本的屬性:
intHP=100;(生命值)
intAttack=10;(攻擊力)
intDefense=5;(防禦力)
緊接著,他又創造了第二個“對象”——Slime。
intHP=50;
intAttack=5;
intDefense=2;
當他第一次在螢幕上通過指令成功列印出Hero和Slime的各項屬性數值時,一種難以言喻的激動包圍住了他。他知道雖然螢幕上空空如也,但在電腦的內存裡兩個看不見的“生命”已經被他注入了靈魂。
接下來,是賦予它們“形態”。他打開了Windows係統自帶的畫圖工具,用鼠標笨拙地一個畫素一個畫素地點出了兩個極其簡陋的形象:一個手持“木棍”(其實就是一條棕色直線)的火柴人,和一個藍色的果凍狀的圓形團塊。
他將這兩張圖片儲存下來,學習瞭如何將圖片資源加載到程式中。經過無數次的路徑錯誤,格式不支援的失敗後,在一個飄著雪花的午後,他的螢幕上終於第一次,同時顯示出了那個簡陋的“勇者”和同樣簡陋的“史萊姆”。
它們靜靜地待在螢幕的兩端一動不動。
但在林天眼裡這已經是一個完整的“世界”的雛形。有英雄,有怪物,一個史詩故事的舞台已經搭建完成。
這個除夕夜,林天冇有玩任何遊戲。他在窗外辭舊迎新的鞭炮聲中,將這個隻能“看”的靜態的程式,作為自己的第一個“作品”,鄭重地存進了軟盤。
他給它命名為——“世界V0.1”。
短暫的春節假期,成了林天思維發酵的溫床。他躺在床上,天花板在他眼裡就是“勇者”與“史萊姆”對峙的戰場。一個瘋狂的想法在他腦海裡盤旋:必須讓它們“活”起來,必須讓它們之間產生“聯絡”!
大年初三,他迫不及待地再次坐回電腦前,開始了他的第二階段挑戰——實現“第一次互動”。
他的目標很明確:當他按下鍵盤上的某個鍵時,“勇者”的Attack數值要能夠對“史萊姆”的HP數值產生影響。
這是這個世界裡因果律的第一次書寫。
他學習瞭如何監聽鍵盤的輸入。當他第一次成功地實現“按下空格鍵,螢幕上就列印出一行‘Hello,World!’”時他興奮得像個孩子。
緊接著,他開始編寫核心的傷害計算邏輯。他寫下了這個世界的第一條“物理定律”:
damage=Hero.Attack-Slime.Defense;
Slime.HP=Slime.HP-damage;
這個公式很簡單,卻耗費了他整整兩天的時間去調試。他遇到了各種各樣的問題:負數傷害怎麼處理?生命值會不會變成負數?他像一個嚴謹的立法者,為自己的世界,不斷地增添著各種“補丁”和“修正案”。
終於在一個深夜他完成了這個階段性的目標。
他運行著程式。螢幕上依然是那個熟悉的對峙畫麵。他深吸一口氣,感受著指尖傳來的塑料鍵盤的冰涼觸感,然後輕輕地按下了空格鍵。
螢幕上冇有任何華麗的特效,冇有任何聲音。
但是,在代表“史萊姆”的那個藍色團塊下方,一行由程式實時列印出來的白色文字,發生了變化。
SlimeHP:50變成了SlimeHP:43
林天的心臟,漏跳了一拍。
他又按了一下。
SlimeHP:43變成了SlimeHP:36
成了!
成了!他成功了!他用自己的代碼,在兩個原本毫不相乾的“生命”之間,建立起了一條堅實不可動搖的因果鏈!
他不再是一個旁觀的“神”,他變成了一個可以乾涉這個世界的“玩家”!
這份喜悅遠比“創世紀”時更加猛烈。他激動地在椅子上扭來扭去,雙拳緊握,無聲地慶祝著。他能聞到房間的空氣裡除了電腦機箱散發出的熱風味,還多了一絲屬於“成功”的氣息。
實現了單向的“攻擊”後,林天的野心徹底膨脹了。他要的不是一個簡單的“打木樁”程式,他要的是一場真正的“戰鬥”!
寒假最後的幾天,他向著那個終極目標發起了最後的總攻。
他要建立“回合製”的規則。當玩家攻擊後,程式需要自動切換到“敵人回合”,讓“史萊姆”也對他進行一次攻擊。
他要加入“勝負判定”。當任何一方的HP小於或等於0時,戰鬥必須結束並宣告勝利或失敗。
他還要有“獎勵反饋”!這是遊戲的精髓!勝利後必須有獎勵,才能激勵玩家繼續玩下去!
這幾個係統環環相扣,邏輯複雜程度呈指數級增長。他把自己關在房間裡廢寢忘食。他的草稿紙上畫滿了各種複雜的流程圖,箭頭和邏輯框交織在一起像一張張神秘的星圖。
他的家人也感受到了他這最後衝刺階段的瘋狂。母親端來的牛奶常常放到涼了他都忘了喝。父親幾次想叫他休息,看到他那雙佈滿血絲卻又閃爍著狂熱光芒的眼睛都默默地把話嚥了回去。
在開學前的最後一個晚上,林天終攻克了所有的難關。
他坐在電腦前,整個房間隻剩下螢幕的光和電腦風扇的嗡嗡聲。他感覺自己像一個即將見證奇蹟的魔法師,整個人的精神都高度集中。
他敲下了“運行”的指令。
編譯,通過!
螢幕上依然是那個熟悉的對峙畫麵。
林天按下了空格鍵。“勇者”發起了攻擊,“史萊姆”的生命值減少了。
他屏住呼吸等待著。
一秒鐘後,螢幕自動跳出了一行新的文字:
“輪到【史萊姆】行動。”
“【史萊姆】對你使用了【撞擊】,你受到了3點傷害。”
“勇者”下方的生命值也隨之發生了變化!
活了!這個世界徹底活了!它已經可以按照自己製定的“回合製”規則自動運轉了!
林天的心提到了嗓子眼。他壓抑著激動繼續操作。
你來我往幾個回合之後,他再次按下了空格鍵。
“你對【史萊姆】造成了8點傷害。”
“【史萊姆】的生命值為0,【史萊姆】被擊敗了!”
勝利了!
但,還冇有結束!
最關鍵的時刻到來了。林天的呼吸,幾乎都停止了。
螢幕在短暫的停頓後跳出了兩行由他自己設定的閃爍著的綠色勝利資訊!
“恭喜!你獲得了【經驗值5】,【金幣2】。”
“叮!恭喜你升到了2級!你的【攻擊力】+1,【生命值】+5!”
成了!!!
一個完整的、包含戰鬥、傷害計算、回合輪轉、勝負判定、經驗獲取、金幣掉落和角色升級的……一個完整的、最基本的遊戲循環(GameLoop)在他的手中完美地誕生了!
“啊——!!!”
林天再也抑製不住內心的狂喜,他猛地從椅子上跳了起來,在寂靜的深夜裡發出了一聲壓抑了許久的歡呼!
他成功了!他不再是一個隻能被動接受規則的玩家,他用自己的雙手,用那些枯燥的代碼創造出了一個可以運轉的擁有自己規則的全新世界!
這份由他親手創造的從無到有的成就感,如同洶湧的岩漿瞬間沖垮了他所有的疲憊和煎熬,在他的身體裡奔騰咆哮!
他激動地在房間裡來回踱步,他想把這個好訊息告訴全世界。他衝到門口想去敲響父母的房門,但又在最後一刻停住了。他看了看牆上的時鐘,已經是淩晨三點。
他最終還是選擇了一個人來品味這份至高無上的喜悅。
他回到電腦前,將這個凝聚了他整個寒假心血的程式小心翼翼地打包,存進了一張嶄新的3.5英寸軟盤裡。他用油性筆在軟盤的標簽上一筆一劃鄭重地寫下了它的名字。
——“勇者鬥史萊姆V1.0”。
做完這一切,他拉開窗簾,推開窗戶。清晨的空氣清冽而新鮮。
他知道,這張小小的軟盤就是他向楊老師,向全世界遞出的第一份答卷。
他的故事,他的傳奇,將從這個小小的粗糙“作品”開始。
一個屬於中國,也屬於他林天的遊戲的黃金時代將在他的手中拉開序幕。
他對著那顆啟明星,無聲地笑了。