第1章
穿越代碼深淵
架構(gòu)崩潰------------------------------------------。,額頭壓在機(jī)械鍵盤上,CapsLock鍵在眉心烙出一個深紅的方格。凌晨三點四十七分,屏幕還亮著,光標(biāo)停在一百三十七行——一個關(guān)于射線檢測的無限循環(huán)*ug。,代碼的重影慢慢合攏。,一張床,一張桌,一把椅子。窗簾永遠(yuǎn)拉上,日光燈管壞了一根,發(fā)出細(xì)微的電流聲。過去兩個月,他習(xí)慣了這種白噪音。,**軟件推送:游戲客戶端開發(fā),3-5年經(jīng)驗,35歲以下。。。在**系統(tǒng)里,三十四和三十五之間只有一行代碼的距離。邊界條件永遠(yuǎn)是最容易出*ug的地方——這是他寫代碼十二年學(xué)會的道理。,把自己摔進(jìn)椅背里。,形狀像一只被壓扁的史萊姆。他盯著那只史萊姆,腦子里開始跑程序——不是工作上的,是七個月前他在前公司業(yè)余時間偷偷寫的獨立游戲?!渡顪Y秘境》。,一百層深淵,每層一個*oss。難度指數(shù)級增長,后期*oss的設(shè)計理念只有一個——“不講道理”。他花了四個月搭完架構(gòu),項目還沒做完,公司就把整個部門裁掉了?!皹I(yè)務(wù)調(diào)整,感謝您的貢獻(xiàn)?!盚R遞來賠償協(xié)議。烏卡簽了,不到十分鐘。,他投了八十多份簡歷,十二個面試,四個技術(shù)面,零個offer。每一次拒絕都很體面,但他知道真實原因?qū)懺?*軟件那行灰色小字里——三十五歲以下。,最后在簡歷上最有價值的信息,是他的出生年份。。
烏卡重新打開電腦,點進(jìn)項目文件夾。打開GameManager.**,兩萬多行代碼,沒有模塊化拆分,沒有設(shè)計模式,純意大利面條式架構(gòu)。這是他一個人的項目,想怎么寫就怎么寫。
他開始讀代碼,像考古一樣。
開頭部分注釋詳細(xì),變量命名優(yōu)雅。那是他狀態(tài)最好的時候。中間部分出現(xiàn)“tempfix later”,那是部門第一次傳出裁員消息的時候。最后部分命名變成a、*、c,注釋變成“別管了先跑起來”——那是裁員通知下來的那周。
他開始修*ug。
第一個*ug:射線檢測雙倍觸發(fā)。第二個:法師閃現(xiàn)穿墻。第三個:動畫卡頓。
改到第五個*ug時,手開始抖了。不是緊張,是累。每天只睡三四個小時,剩下的時間都在改代碼、刷**軟件、發(fā)呆。
第六個*ug——角色在特定位置跳躍后會無限下落。他翻了四十分鐘代碼,發(fā)現(xiàn)問題出在地形生成算法上:一塊地形的Y軸邊界值因浮點數(shù)精度問題被截斷成NaN。角**在NaN上時,物理引擎無法計算下落距離,就會一直往下掉。
“浮點數(shù)精度,經(jīng)典老番?!?br>他加了一個IsNaN的判斷,按了Ctrl+S。
困意像一堵墻砸下來。世界開始模糊,屏幕上的字在視野里慢慢融化。他想撐住,手肘從桌上滑了下去。
額頭第二次砸在鍵盤上,砸中了Enter鍵。
屏幕閃了一下。
然后一切陷入黑暗。
不是普通的黑暗。觸覺先恢復(fù)——腳底踩著堅實平坦的東西,像某種復(fù)合材料。然后是溫度——空氣涼涼的,帶著新拆封電子產(chǎn)品的工業(yè)氣味。聽覺最后恢復(fù):風(fēng)聲,遠(yuǎn)處低沉的嗡鳴,像服務(wù)器散熱風(fēng)扇,偶爾有芯片讀寫的脆響。
烏卡慢慢睜開眼睛。
他站在一片灰白色原野上。地面是網(wǎng)格輔助線——淺藍(lán)色等間距網(wǎng)格,Unity里用來輔助定位的那種。頭頂沒有太陽,但空間充滿均勻的光照。他穿著和現(xiàn)實中一樣的灰色衛(wèi)衣和黑色運動褲,但身體邊緣有一圈白色高亮線,像Unity里選中GameO*ject時的輪廓。
他抬起右手。一層半透明藍(lán)色光幕浮現(xiàn)在手邊,上面飄著信息:
烏卡 | LV 1 | HP 100/100 | 當(dāng)前區(qū)域:深淵秘境·第一層
心跳加速。這不是做夢。這是他的游戲。
遠(yuǎn)處傳來一聲低沉的吼叫。地平線上出現(xiàn)了一個黑色輪廓,正在變大。那是一個巨大的史萊姆狀生物,通體藍(lán)色凝膠,內(nèi)部流動著C#代碼。頭頂懸浮著血條:
史萊姆*oss·代碼腐化體 | LV 5 | HP 500/500
他設(shè)計的第一個*oss。技能:**、腐蝕、吞噬。當(dāng)時他覺得太欺負(fù)人,就把移動速度降到了0.8。
但現(xiàn)在,他沒有英雄,沒有裝備,沒有技能。只有一套現(xiàn)實世界帶過來的衛(wèi)衣,和一個永遠(yuǎn)拉不滿的血條。
史萊姆朝他蠕動過來。
但烏卡笑了。他想起了GameManager.**第兩千三百一十七行——開發(fā)者控制臺。他的右手無名指抽搐了一下,那是按波浪鍵的習(xí)慣。
一道黑色命令行彈了出來。
De*ug Console Ready.
這是他寫的世界。他知道每一個變量名,每一個隱藏的后門。
他開始打字。
烏卡重新打開電腦,點進(jìn)項目文件夾。打開GameManager.**,兩萬多行代碼,沒有模塊化拆分,沒有設(shè)計模式,純意大利面條式架構(gòu)。這是他一個人的項目,想怎么寫就怎么寫。
他開始讀代碼,像考古一樣。
開頭部分注釋詳細(xì),變量命名優(yōu)雅。那是他狀態(tài)最好的時候。中間部分出現(xiàn)“tempfix later”,那是部門第一次傳出裁員消息的時候。最后部分命名變成a、*、c,注釋變成“別管了先跑起來”——那是裁員通知下來的那周。
他開始修*ug。
第一個*ug:射線檢測雙倍觸發(fā)。第二個:法師閃現(xiàn)穿墻。第三個:動畫卡頓。
改到第五個*ug時,手開始抖了。不是緊張,是累。每天只睡三四個小時,剩下的時間都在改代碼、刷**軟件、發(fā)呆。
第六個*ug——角色在特定位置跳躍后會無限下落。他翻了四十分鐘代碼,發(fā)現(xiàn)問題出在地形生成算法上:一塊地形的Y軸邊界值因浮點數(shù)精度問題被截斷成NaN。角**在NaN上時,物理引擎無法計算下落距離,就會一直往下掉。
“浮點數(shù)精度,經(jīng)典老番?!?br>他加了一個IsNaN的判斷,按了Ctrl+S。
困意像一堵墻砸下來。世界開始模糊,屏幕上的字在視野里慢慢融化。他想撐住,手肘從桌上滑了下去。
額頭第二次砸在鍵盤上,砸中了Enter鍵。
屏幕閃了一下。
然后一切陷入黑暗。
不是普通的黑暗。觸覺先恢復(fù)——腳底踩著堅實平坦的東西,像某種復(fù)合材料。然后是溫度——空氣涼涼的,帶著新拆封電子產(chǎn)品的工業(yè)氣味。聽覺最后恢復(fù):風(fēng)聲,遠(yuǎn)處低沉的嗡鳴,像服務(wù)器散熱風(fēng)扇,偶爾有芯片讀寫的脆響。
烏卡慢慢睜開眼睛。
他站在一片灰白色原野上。地面是網(wǎng)格輔助線——淺藍(lán)色等間距網(wǎng)格,Unity里用來輔助定位的那種。頭頂沒有太陽,但空間充滿均勻的光照。他穿著和現(xiàn)實中一樣的灰色衛(wèi)衣和黑色運動褲,但身體邊緣有一圈白色高亮線,像Unity里選中GameO*ject時的輪廓。
他抬起右手。一層半透明藍(lán)色光幕浮現(xiàn)在手邊,上面飄著信息:
烏卡 | LV 1 | HP 100/100 | 當(dāng)前區(qū)域:深淵秘境·第一層
心跳加速。這不是做夢。這是他的游戲。
遠(yuǎn)處傳來一聲低沉的吼叫。地平線上出現(xiàn)了一個黑色輪廓,正在變大。那是一個巨大的史萊姆狀生物,通體藍(lán)色凝膠,內(nèi)部流動著C#代碼。頭頂懸浮著血條:
史萊姆*oss·代碼腐化體 | LV 5 | HP 500/500
他設(shè)計的第一個*oss。技能:**、腐蝕、吞噬。當(dāng)時他覺得太欺負(fù)人,就把移動速度降到了0.8。
但現(xiàn)在,他沒有英雄,沒有裝備,沒有技能。只有一套現(xiàn)實世界帶過來的衛(wèi)衣,和一個永遠(yuǎn)拉不滿的血條。
史萊姆朝他蠕動過來。
但烏卡笑了。他想起了GameManager.**第兩千三百一十七行——開發(fā)者控制臺。他的右手無名指抽搐了一下,那是按波浪鍵的習(xí)慣。
一道黑色命令行彈了出來。
De*ug Console Ready.
這是他寫的世界。他知道每一個變量名,每一個隱藏的后門。
他開始打字。