本文第一次寫于2015年06年29日惠啄,我收到永航科技實(shí)習(xí)Offer的前一天场仲。蹭一下游戲十年的熱點(diǎn)橄唬,決定把文章重寫,原文名為《記憶回溯-王思妮》耙厚。
????????我的初中是就讀在湘陰縣茶湖譚的永紅中學(xué)强挫,就在那木窗之中,木椅之上的那一天颜曾。她說她很喜歡炫舞纠拔,能不能做個(gè)單機(jī)版秉剑。年少無知的我夸下了悍汉溃口,聽的人也未必當(dāng)真。無法兌現(xiàn)的承諾伴隨著時(shí)光诡曙,也許只有聽的我有著當(dāng)年的記憶臀叙。
?????????然而對(duì)游戲業(yè)的熱愛是遠(yuǎn)遠(yuǎn)和王思妮無關(guān)的,直到現(xiàn)在价卤,我也沒有打開過QQ炫舞端游玩上一把對(duì)局劝萤。第一次見到電腦,256MB的內(nèi)存存儲(chǔ)就和現(xiàn)在的4g內(nèi)存條一樣珍貴慎璧。而第一次見到的游戲床嫌,在當(dāng)時(shí)的鄉(xiāng)鎮(zhèn),還是如日中天(為什么我以前寫文章還會(huì)用成語)的傳奇胸私。我并沒有玩過這個(gè)游戲厌处,但對(duì)這個(gè)游戲的印象非常深刻。是表哥帶我第一次見到了游戲岁疼,就這樣腦海中就一直揮之不去.....
? ? ? ?? 第一次等到自己接觸電腦的時(shí)候阔涉,我來到了一個(gè)剛在發(fā)展中的城市廣東省河源市。我已經(jīng)很多年沒去過河源了捷绒,我也忘記了那我?guī)易哌M(jìn)黑網(wǎng)吧的喜歡紅色警戒的同學(xué)叫什么名字了瑰排。我接觸的第一個(gè)游戲是CS1.5,和一個(gè)同學(xué)1V1對(duì)戰(zhàn)暖侨,他幫我選擇了匪椭住。于是拿著雷包不知道怎么丟掉的我,輸了人生的第一場(chǎng)游戲?qū)?zhàn):用著WASD在地圖亂逛的我它碎,被同學(xué)亂槍打死函荣。
? ? ? ?? 十二年前的我打游戲就充值了,因?yàn)槟莻€(gè)時(shí)候整個(gè)廣州最火的就是夢(mèng)幻西游扳肛。這個(gè)游戲讓我墮落傻挂,讓我迷失。其中發(fā)生了太多的故事挖息,久遠(yuǎn)到我已經(jīng)找不到河源市那家我就讀的學(xué)校了金拒。那個(gè)網(wǎng)吧,我記得當(dāng)時(shí)還有兩臺(tái)液晶顯示屏機(jī)器套腹,最好的配置绪抛,給人玩3D游戲的。那個(gè)游戲的名字我已經(jīng)忘了电禀,同事李陽就來源于這家公司幢码。我從未玩過這個(gè)游戲,但是我還記得我常用這個(gè)和人吹牛逼尖飞,記憶剝離了身邊人的存在症副,只剩下了自己在一座孤城店雅。
? ? ? ? ? 現(xiàn)在的我已經(jīng)不愿意提及CF開掛和魔獸地圖編輯器的那些事。在非“學(xué)習(xí)”的路上贞铣,中二的我闹啦,總是想做一個(gè)完美的產(chǎn)品,卻不知道換來的辕坝,對(duì)于年輕人來說:唯一的成本窍奋,就是時(shí)間。耗費(fèi)大量時(shí)間的我酱畅,中間發(fā)生了種種故事讓其被塵埃掩蓋在歷史的垃圾堆中琳袄,到最后只剩一下一個(gè)硬盤,當(dāng)硬盤在網(wǎng)吧掛掉的那一天纺酸,我走上了人生的另外一條道路挚歧。
? ? ? ? ? 一不小心就浪費(fèi)了大量的筆墨來講述永航無關(guān)的故事。
? ? ? ? 大學(xué)無所事事的我吁峻,開始學(xué)習(xí)各類游戲程序相關(guān)的技術(shù)滑负,越學(xué)越菜的圖形學(xué),烏龜一樣的前進(jìn)用含。然后來到了北京應(yīng)聘(那個(gè)給我發(fā)面試邀請(qǐng)的HR已經(jīng)離職了)矮慕。我應(yīng)聘了兩年公司,其中一家給京東做服務(wù)的創(chuàng)業(yè)公司啄骇,名字都不記得了痴鳄。因?yàn)橥耆床坏竭@家公司工作的前景,然后就去應(yīng)聘了北京永航科技缸夹,我去面試的還在想痪寻,估計(jì)是面試不過的。
? ? ? ?? 首先發(fā)了郵件的我虽惭,以為都會(huì)像在其他招聘網(wǎng)站一樣石沉大海橡类。萬萬沒想到HR會(huì)給當(dāng)時(shí)到家屁股還沒坐穩(wěn)的我打電話叫我去面試,我只好買了一張從長沙到北京的站票芽唇,就這樣來到了帝都顾画。當(dāng)時(shí)我是在OPENGPU看到了鄭大師發(fā)的帖子,那個(gè)帖子招聘的是有經(jīng)驗(yàn)的引擎開發(fā)匆笤,而我投了一個(gè)實(shí)習(xí)研侣。
? ? ? ? 面試的時(shí)候,先是給了七頁的CPP筆試題炮捧,從基礎(chǔ)考到設(shè)計(jì)庶诡。我大概做了一個(gè)小時(shí),自認(rèn)為做得還不錯(cuò)吧咆课。接著是超哥面試的我末誓,當(dāng)時(shí)的我沒想到還能回到上來璧函,刷新了自己對(duì)自己的認(rèn)知。當(dāng)時(shí)應(yīng)該是鄭哥不在基显,面試的時(shí)候是周五,做機(jī)試題的時(shí)候我做了一個(gè)小時(shí)善炫,第二題卡了好久撩幽。我于是選擇了離開。忘記當(dāng)時(shí)是一個(gè)怎么樣的流程箩艺,還要叫我周一復(fù)試窜醉,當(dāng)時(shí)住的旅館實(shí)在是太貴了,心都是痛的艺谆,但是我又不得不珍惜來之不易的機(jī)會(huì)榨惰。
?????????我周六日搜索了第二題的思路,我當(dāng)時(shí)想都沒有想第三題静汤,我也沒想到到還有周一過去還是機(jī)試琅催。我在想第一題我用了一個(gè)O(n^2)的算法本來就不出彩,還是看了一下第三題吧虫给。沒想到第三題是如此的簡單(一些寫了一部分的正則搜索藤抡,加上+的支持),加上調(diào)試也就不到十幾分鐘抹估。鄭哥還以為我接觸過正則缠黍,實(shí)際上我一起碰都沒有碰過。我當(dāng)時(shí)的想法是:"是不是沒有人做第三題药蜻,都以為第三題更難瓷式?"
? ? ? ? 接下來是HR面試,懷揣著特殊的心情语泽。我知道已經(jīng)穩(wěn)了贸典,心潮澎湃的我決定寫一篇文章。因?yàn)槭荙Q炫舞的開發(fā)商踱卵,當(dāng)時(shí)還在感嘆命運(yùn)瓤漏,這輩子難道會(huì)開發(fā)一個(gè)單機(jī)的炫舞嗎,沒想到了居然面試了正版公司颊埃。當(dāng)然還有一些比較特殊的元素蔬充,讓我對(duì)這個(gè)公司充滿了一些好感,比如說鄭哥是湖南人班利,我很喜歡王小波饥漫。
? ? ? ? ?? 王小波在《我怎樣做青年的思想工作》一文中寫到::我有個(gè)外甥,天資聰明,雖然不甚用功,也考進(jìn)了清華大學(xué)-----這個(gè)人就是叔叔
? ? ? 我在公司做的第一個(gè)活是分析炫舞時(shí)代的運(yùn)行時(shí)庫依賴,第二個(gè)活是給炫舞時(shí)代的戰(zhàn)斗系統(tǒng)加上技能支持罗标。這個(gè)系統(tǒng)大概在現(xiàn)在還是有bug的 庸队。 在做第二個(gè)活的時(shí)候我就知道了北京凌晨是看不到家鄉(xiāng)那樣的皓月积蜻。做的第三個(gè)活是炫舞時(shí)代web端的自動(dòng)打包工具,我記得開發(fā)了大約有一個(gè)月彻消,盡管這個(gè)工具沒有多少代碼竿拆,做的事情就是把別的功能拉起。做完這三個(gè)功能的我明白了一個(gè)人的力量到底有多渺小宾尚。
? ? ?? 第一個(gè)工作我還記得結(jié)論是沒有優(yōu)化的地步了丙笋,那是我第一次感覺到了挫敗感。做了一段時(shí)間的分析煌贴,結(jié)果得出啥也不能做讓我對(duì)自身能力產(chǎn)生了質(zhì)疑御板。
????????第二個(gè)工作讓我感受到了一個(gè)端游項(xiàng)目代碼的龐大,我以前從未見過如此大的工程牛郑。我一開始的心態(tài)完全是惶恐怠肋,不知道打開那個(gè)項(xiàng)目的文件,在那個(gè)角落開始寫代碼淹朋。第一次操作Perforce就差點(diǎn)把整個(gè)代碼目錄給刪除,最后找汕哥幫我解決了問題笙各。在我接受這個(gè)功能的時(shí)候,炫舞時(shí)代已經(jīng)有初步的戰(zhàn)斗系統(tǒng)础芍。我和汕哥一起合作寫這個(gè)功能酪惭,汕哥把具體技能效果怎么實(shí)現(xiàn)交給了我。在我把那陀代碼重寫之前(沒錯(cuò)者甲,我在實(shí)習(xí)就重寫了一個(gè)......一個(gè)類的全部實(shí)現(xiàn)春感,我當(dāng)時(shí)并沒有意思到這個(gè)類的接口設(shè)計(jì)有問題,我只是重寫了實(shí)現(xiàn))虏缸,代碼中已經(jīng)有了初步的技能釋放鲫懒,判斷,效果流程刽辙。我把技能的判定全部重寫窥岩,buff的判定邏輯進(jìn)行了調(diào)整。
? ? ? ? 很快我遇到了大量的bug宰缤。具體的細(xì)節(jié)我已經(jīng)記不太清楚了颂翼,都是因?yàn)榱鞒躺系膯栴}。我們戰(zhàn)斗是一個(gè)回合制的機(jī)制慨灭,一個(gè)技能操作在之前的流程中只會(huì)造成一次判定朦乏,一次計(jì)算,產(chǎn)生一個(gè)OP氧骤,并產(chǎn)生一次效果呻疹。但是策劃案中有個(gè)技能是連擊箭,人物射出多個(gè)箭矢筹陵,他們的判定是獨(dú)立的刽锤,我不得不在計(jì)算代碼中了加了一些特殊處理完成了這個(gè)邏輯镊尺。
????????還有一些很蛋疼的問題,比如說一個(gè)人物死亡之后并思,但是操作時(shí)序還沒走到他庐氮,按理來說他是不能被判定的,但是策劃案中要支持復(fù)活宋彼,又不得不把上層操作的判斷給稍微了改了一下弄砍,大量的bug讓我失去了對(duì)代碼大動(dòng)刀鋒的勇氣,生怕自己見不到明天的太陽宙暇。在緊迫的時(shí)間內(nèi),寫出來符合功能的代碼是沒有問題议泵,但是有多少美學(xué)你是根本無法把控的占贫。
????????很快有個(gè)是糊if else糊不動(dòng)的bug∠瓤冢客戶端表現(xiàn)型奥,服務(wù)器數(shù)據(jù)計(jì)算狀態(tài)不同步了。這個(gè)bug來源于一個(gè)叫嘲諷的技能碉京,這個(gè)技能的機(jī)制是隨機(jī)選擇一個(gè)怪來嘲諷厢汹,測(cè)試發(fā)現(xiàn)在組隊(duì)的時(shí)候,A使用嘲諷谐宙,A看到的是石頭怪打自己烫葬,B看到的是兔子怪打A。這個(gè)bug的根本原因是隨機(jī)凡蜻,隨機(jī)就要用到隨機(jī)種子搭综。A和B隨機(jī)出了不同的值,隨機(jī)種子是服務(wù)器下發(fā)給客戶端了划栓,值是一樣的兑巾,這意味著。兩邊的隨機(jī)次數(shù)不一樣忠荞。為什么會(huì)這樣蒋歌,因?yàn)樵诓邉澃钢挟?dāng)一個(gè)技能不能用的時(shí)候技能要變灰。UI層的代碼直接使用了技能判斷類的計(jì)算技能目標(biāo)的接口(這個(gè)接口直接返回一個(gè)vector),然后UI判斷vector是否非空來判定是否能用委煤。而當(dāng)A有嘲諷技能堂油,B沒有時(shí),A的UI層調(diào)用了無數(shù)次嘲諷的技能判斷碧绞,隨機(jī)種子已經(jīng)大大的和B不同了3剖!头遭!
? ? ?? 至于第三個(gè)工作寓免,我只能說寫打包工具能把人逼到離職癣诱。其中最大的問題是難以調(diào)試,難以調(diào)試不是說沒有源碼袜香,沒有環(huán)境撕予。而是打包程序運(yùn)行時(shí)間的太漫長了,比如說有個(gè)bug總是在最后一步才出錯(cuò)蜈首,而這個(gè)時(shí)候已經(jīng)是五個(gè)小時(shí)后了实抡。為了確保沒有問題,我選擇了在發(fā)版本那天待到了第二天早上欢策,看看到底是哪里出了問題吆寨。而現(xiàn)在已經(jīng)是兩點(diǎn)了,我感覺已經(jīng)不夠精力支持繼續(xù)寫這篇文章了踩寇。而我沒有離職的原因是因?yàn)檫@個(gè)web打包工具并沒有執(zhí)行具體的邏輯啄清,我只是把一大坨工具組合在一起,從前一個(gè)進(jìn)程取到結(jié)果送給下一個(gè)進(jìn)程俺孙。遇到了最大的一個(gè)問題是辣卒,有個(gè)工具的代碼找不到,找到了里面的代碼好像是故意寫錯(cuò)的(害我待了一晚上定位)睛榄。
? ? 未完待續(xù)