基地保留节目--塔防游戏
版權聲明:本文由神州數碼云基地團隊整理撰寫,若轉載請注明出處。
7月的某一天晚上9點,2021年剛畢業的尹煊博在公司里緊鎖著眉梢,一邊敲擊著鍵盤一邊自言自語的囔囔著:“為啥我的兵就出不來呢?”這天應該是他入職還沒滿一個月,而他正和其他小伙伴一起負責塔防游戲第四個版本的開發工作。目測現在他正在囔囔的問題,應該已經不知道是他開始塔防游戲后遇到的第幾百個問題了。
塔防游戲開發是神州數碼武漢云基地針對應屆畢業生培訓開發的一個代碼開發培訓項目,也是每一屆學生必須經歷的培訓項目,每一個新版本需要在上一個版本上進行改進。所以每次項目啟動會上都會發出絕望的靈魂疑問----這個游戲我們剛畢業的學生怎么做的出來,但是每次項目總結的時候大家又會收獲滿滿的大談特談。這是一個怎么樣的項目?讓學生們如此又愛又恨呢?
先來聽聽往屆學生對項目的感想:
尹煊博
2021年5月份基地實習,2021年7月成為正式員工,負責塔防第四期開發工作。
今年剛進公司沒多久,給我們分配了一個做塔防游戲的任務,其中的各種辛酸往事就不提了,還是讓我分享一下我們做塔防游戲的經過吧。
首先領導提出了一個需求,要玩家對戰。聽到這個需求大家都懵了,塔防如何才能對戰?在我們眼里,這個需求就和“五彩斑斕的黑”一樣。但是需求出來了,光吐槽沒有用,我們得解決問題呀,開了幾次會之后,我們得出了幾種方案。第一種,最樸素的方式,兩個玩家分別進行游戲,最后看誰的得分高。第二種,一個玩家扮演怪,一個玩家扮演塔,進行怪和塔的對戰。
第一種太過簡單,pass~,第二種經過討論,發現太難平衡,pass~,于是有了最終采納的方案,這是我參考以前玩的一個RPG想出來的:怪物不再擁有起點和終點,而是在一個閉環里繞圈,兩個玩家在兩個場地上各自游戲,都扮演防御塔。這時候就有朋友要問了,那你這各玩各的哪來的對戰一說呢?這里整個游戲的重點就來了,怪初始在兩邊場上都只有一只,在己方場上殺死一只怪,會在對方場上增加兩只怪,這樣兩個場地就交互起來了,相當于是對手場上的怪是自己派過去的,多么巧妙地設計啊,一下就解決了對戰過程中如何刷怪地問題。并且殺一只生成兩只,能讓兩邊的怪隨著游戲的進行不斷增多。最后就是勝負地判斷了,理所當然的,哪邊怪少,就說明哪邊厲害,他就獲得勝利。
游戲里一部分代碼參考了上一版的設計思路,修改了一些上一版不好的地方,并修復了一些bug。在上一版的基礎上,我們增加了這些東西:
1. 更改整個游戲模式,把傳統的塔防改為了2人對戰模式
2. 我們部署了服務器,來進行玩家登錄,玩家匹配,游戲中的數據交互,這些功能我們是使用websocket來實現通信的
3. 上一版的防御塔是一聲令下所有防御塔同時攻擊,我們給每一個防御塔分配自己的攻擊間隔,并且加上了防御塔打怪的邏輯,比如優先打血少的怪
4. 增加了聊天功能,兩個玩家對戰的時候可以實時聊天
5. 增加了技能,消耗金錢可以使用技能
6. 增加了怪物圖片的預加載
7. 垃圾回收
目前基本功能實現了,還有很多增加的地方,比如把1v1增加到2v2,多一個隊友能讓游戲有更多的不確定性,我覺得游戲就是要每一盤都不一樣才好玩。我還在游戲中埋了一個小彩蛋,提示一下,和聊天框有關哦,來猜一猜彩蛋是什么吧。
開發的過程辛苦而又充實,有時候會遇到令人沮喪的bug,絞盡腦汁就是想不出來問題出在哪里,但是解決掉bug之后的感覺,真的很爽。我現在還記得那個月黑風高的夜晚,怪怎么都出不來,我反復查看代碼都不知道是為什么,而且大夏天的還有蚊子,我的心急如焚的同時還在往蚊子咬的包上掐十字。最后我在控制臺輸出變量,逐個排錯,把錯誤鎖定到了前端畫布上,結果調整了一下畫布的屬性,成了!錯誤原因竟然是畫布的大小太小了,怪畫到畫布的外面去了。困擾了我半天的錯誤,竟這么簡單。我心里好像出了一口惡氣一樣(內心os:”你個bug看我辦不辦你就完了”)。小伙伴們也花了很大的心思,美術風格上進行了主題的設計,還有數值策劃,功能分析,前前后后開了好多個大大小小的會議。
這個培訓項目非常令人難忘,如果學校里也能采用類似的寓教于樂的教學方式,我相信我應該會更厲害~,另外提一句,游戲里的一些內容都是我們小伙伴自己畫的,這屆學生暗藏高人啊!
孫雪魁
2021年春進入基地實習,2021年7月成為正式員工,負責塔防第三期開發工作。
春末實習,通過一張offer,我來到了神州數碼的武漢云基地。在這里,我見到了一群同樣懵懂但很有活力的同伴們。我們迅速轉變身份,努力的想融入公司的節奏中。第一個項目是實習生塔防游戲第三版的開發。我們知道這是第一個啟蒙項目,是我們走出校園的第一個關卡,我們不敢懈怠。
很幸運,帶我們完成任務的老師是超級厲害的坤少。坤少的講解很詳細,但是我們八個小伙伴當中只有一半的人是計算機專業,對于另外的四個數學專業的小伙伴,無疑是聽天書一樣。代碼第一遍通讀下來,我們全都聽的昏昏沉沉。
首先,很多專有名詞,不知道什么意思。然后,JavaScript的技術棧,幾乎沒人學過。接著,游戲運行原理難以理解。最后,版本控制到底是個啥?
帶著無數的疑問我們開始了第一輪為期一周的開發工作。根據坤少的建議,我們按照自身方向劃分出不同職務。開始了我們的技術掃盲工作。
身為游戲引擎和策劃的我,根據大家的頭腦風暴,拋開技術水平,開始設想這個游戲要怎樣設計才更好玩。最后我們對上一個版本制定出以下需要改進的地方:
1, 金額不夠,不會彈出提示。
2, 塔的樣子都一個風格,不足以看出來威力大小。應該加上不同樣式的子彈。
3, 塔的攻速都是一樣的,貴的塔和一般的塔,面對走位怪 都無可奈何。
4, 塔的攻擊方式,太單一,只能發射顆粒。應該加上某些的aoe傷害,或者減速效果。
5, 需要塔可以升級,并且升級以后,會變得不一樣。視覺效果更厲害。需要介紹屬性。
6, 小怪的大小應該調整,要讓人一眼看出這個小怪是 高等級的 還是低等級的。小怪的行走方式需要動起來。
7, 獲取金錢的方式 應該加多。單純的靠打怪 掙錢就一直很缺錢。哪怕是游戲高手 也很缺錢!
8, 音樂,這一點不加上會很單調。
9, 結尾處應該放置一個象征性的 保護對象。或者一個門,不應該直接跑出圖畫外。
10, 可以增加功能,就是技能。比如說放技能 會一瞬間發射一堆子彈。或者 加大 aoe 效果的范圍和強度。
11, 改變整體風格,為塔防游戲設計一個背景。
12, 需要更多的地圖。
在三天左右的基礎知識掃盲以后,我們開始研讀起來了代碼。前端和UI開始設計整體格調。隨著期間不停的向前輩們請教,我們在第一個周期里,終于明白了游戲的運作原理。其核心無非就是JavaScript的定時器方法。全篇的實現,都是周期性的執行各個板塊的函數,才讓游戲動了起來。
在第二個周期里,我們開始按照上面的需求草圖,進行分頭開發。不懂的就去找百度。每天都開會。我像個螞蚱一樣,反復橫跳于塔,怪,子彈,地圖等核心板塊之間。最后不負眾望的完成了第一個閉環。雖然當時感覺很累,回想起來,又特別美好。現在那些小伙伴都變成了我職場生活中最寶貴的財富。
接下來,最大的挑戰是那一堆各種莫名其妙的bug。最后的幾天里,我們從早到晚的忙,感覺上班的時間過得特別快。每次的修好一個bug,都會讓我們成就感爆棚。然后在那個周末,我們在這個陌生的城市,就行了第一次聚餐,雖然才相處不到兩周時光,卻讓人感覺都是老朋友一樣。
離距離交付還有兩天時候,頁面卡頓的bug還是找不到原因。這時候坤少都不抱希望了。讓我們準備交付的代碼和材料。可是總感覺一卡一卡的游戲,還能叫游戲嗎?我們就挨個輸出變量,一點點的找原因。最后發現,在游戲狀態判斷函數里面,每一次初始化,都會重新調用一組定時器。結果定時器被越開越多。實際上,我們只需要一組就滿足了。結果幾十上百個定時器互相作用,導致游戲卡成ppt了。最后我們在交付的前一晚,通宵干掉了這個bug,完成了交付。
這是我們的第一個項目,對我們來說它意義非凡。可能我們這八個小伙伴,在未來會去到不同的崗位發光發熱,但是我們都不會忘記這第一個讓我們拼勁十足的塔防項目。
謝楓
2020年冬進入基地實習,2021年7月成為正式員工,負責塔防第二期開發工作。
塔防游戲是我進入神州數碼云基地的第一個團隊協同開發任務,這個項目讓我第一次接觸到這種團隊開發的模式。并且這一期的塔防游戲是一個從0到1的過程,那么其中也遇見過各種各樣的困難。解決開發中問題的同時,也在開拓自己的知識面,提高自己的軟件開發能力。
在開發過程中,遇見了不少難點。首先從開發語言來說,整個項目使用JavaScript進行開發。對于使用JS進行游戲開發,基礎知識還是較為匱乏,常常走彎路。好在我們及時查漏補缺,對新學的知識進行歸檔記錄。將每個人學到的新知識進行一個歸檔總結。開發效率逐漸提高。
其次從開發過程的角度來看,主要的重難點集中在游戲功能的各個開發模塊中。其中小兵移動、建造防御塔、子彈發射、選塔等等。列出這些需求的時候,腦子都是一團亂麻,不知道從何下手。此時帶領我們的學長坤少給了我們一個建議。讓我們多開會討論,細分細分再細分功能點。從此之后,我們團隊就陷入了各種討論需求的會議中。有什么問題一個人解決不了的,直接會議室走起。效果還是很顯著的,沒有像無頭蒼蠅一樣找不到方向。開始一行代碼一行代碼的寫。由于大家的JS基礎都比較薄弱,直接演變成一三五寫BUG,二四六改BUG,最后直接自閉了。為了解決無知的問題,每天百度都要打開上百次,只能一個功能點一個功能點的磨。最終所有功能點形成一個閉環的時候,大家都感覺像獲得了新生。
最后,到達測試環節,又進行了一個漫長又痛苦的找BUG和改BUG的階段。“為什么你的代碼運行沒問題,我的有問題“,這是我們最常說的一句話。這個階段非常的令人崩潰。只能一行代碼一行代碼的測試,最終再去解決問題。來看看我們一部分BUG。
通過此次開發任務,更明白了寫代碼之前的工作準備也是很重要的。項目開始之初保證足夠的項目文檔:需求,功能點,任務時間甘特圖等等。更需要有一個明確的里程碑目標。根據項目人員能力和特長,任務分配需要詳細的落實。代碼提交規范、新知識的歸檔記錄等等細節也要做好統籌規劃。
?最后我想說,這真是一個讓人又愛有恨的項目。
江坤
2020年畢業,目前是基地數據團隊TiDB4PG的主要開發人員之一,有興趣的同學可以關注一下我們的項目:https://github.com/DigitalChinaOpenSource/TiDB-for-PostgreSQL
我應該算是這個項目的第一個開發人員,談及其歷史是一言難盡。最早老板交代項目的時候,我人就傻了,我們團隊還做游戲的?做為一個資深的死肥宅,玩過游戲無數,曾多少次夢想能夠打造一款屬于自己的游戲,竟然要在今天實現了?我的腦海中瞬間涌出無數的游戲情節,人物模型,構造,玩法,是RPG還是FPS,還是moba等等等等,甚至連充值系統都思考好了。然而最終看到要求的時候呆住了,要求很簡單,就一個簡單的html塔防游戲大概三四天時間讓我做完,雖說與夢想差距有億點點大,但是對游戲熱愛的我依然充滿激情開始了這個項目。
Html基礎并不好的我,想要在短短幾天內完成這個小任務還是有點難度的,中間遇到的問題也是非常多,例如小怪的尋路算法,塔的攻擊模式,畫布的層次如何設計,如何保證動畫流暢性和穩定性,還有游戲性等等。在做游戲的過程中,也是非常感謝基地的其他同事,很明顯大家對做游戲都挺感興趣的,在我制作過程中不斷的過來提出各種建議(需求),讓一個原本就不簡單的任務變得更是艱難,當然在提出建議(需求)的同時也是給出了很多解決方案,這讓整個項目也是能平穩的前進,最后按時完成。
其實在整個塔防項目的過程中,感受最多的是這個項目并沒有考驗我代碼開發能力有多強,而是解決問題的能力,面對種種突如其來的問題時,以我的經驗是很難直接解決的,所以我需要有各種辦法去解決這些問題,可以找同事,可以百度,可以刪功能甚至可以直接解決發現問題的人等等,但是怎么去快速解決這些問題最終達到一個滿意的效果,這是需要磨練的。
后面來了一批又一批新的實習生,塔防也開始了第二期,第三期等,那么我也作為了一個小組長去帶領他們了解項目并繼續開發這個項目,因為我是做這個項目過來的,所以他們會遇到哪些問題,我是清楚的,同時有一個區別是后面的塔防都是一組一組來做的,不再是像我一樣單槍匹馬,所以也會遇到一些新的問題,比如任務分工,代碼管理和進度同步等等。
在這一塊上,我也是會盡量的牽引大家,幫助大家去正視這些問題,分析這些問題,最后解決問題,那么在這個過程中,簡單總結比較重要的兩點:1. 文檔。 2. 定期會議。這兩者都是在團隊協作過程中非常重要的,充分的過程文檔和定期的同步會議,能讓大家溝通的更為順暢,能夠更快的分析問題所在并及時解決問題。
最后看到塔防項目能有一批又一批優秀的學生來開發,來填充,感覺是很奇妙的,雖然不是自己親手一步一步的完善這個游戲,但仍然感覺到這個游戲正向著自己一開始的那個夢不斷的走去,期待它的成長。
金佳
作為這個培訓項目的負責人,設計的初衷就是讓學生在最短的時間內,了解項目開發的整個生命周期,從需求整理開始,原型設計,UI設計,任務拆解,進度跟蹤,代碼開發,版本管理,回歸測試,上線發布等等對了解掌握開發流程里的各個環節工作內容。由于是團隊協作,學生們在項目過程中還會真實體會到團隊開發過程中的各類問題,最常見的問題就是,“我的代碼怎么又被你覆蓋了~!“,這一類問題雖然在高級程序看來是條件反射般不過腦操作,但是對于學生來說確實需要一個有針對性的技能訓練過程。
說到最后,也是我們今天的目的,就是把這個項目開源到github上,讓學生從入職的第一天起就開始學會擁抱開源世界~~!
項目地址:
https://github.com/DigitalChinaOpenSource/dc-towerdefender
內網地址:
https://towerdefense-towerdefense.dev.wh.digitalchina.com/
總結
以上是生活随笔為你收集整理的基地保留节目--塔防游戏的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 常用测试命令
- 下一篇: 注册和登录还有那个加密的密码