摘要:基本介紹一款移動(dòng)端貪吃蛇大作戰(zhàn)游戲。主要的游戲邏輯有貪吃蛇移動(dòng)碰撞檢測貪吃蛇碰撞碰撞墻壁和吃食物。貪吃蛇的身體如何跟隨頭部移動(dòng)需要分為兩種情況,在單位時(shí)間內(nèi)貪吃蛇移動(dòng)一單位長度和貪吃蛇移動(dòng)多單位長度。
基本介紹
一款移動(dòng)端貪吃蛇大作戰(zhàn)游戲。(只支持移動(dòng)端)
這是一個(gè)臨近 deadline 的課設(shè)項(xiàng)目,為了方便地使用TS,我直接使用angular-cli生成了TypeScript的項(xiàng)目結(jié)構(gòu)。如果你有好用的TS項(xiàng)目生成器(請推薦給我),使用TypeScript + ES6即可,不推薦使用angular,體積過于龐大。
源碼:https://github.com/suyingtao/...
在幾天時(shí)間內(nèi)開發(fā)出了單人版和多人版,代碼不那么美觀,請諒解~
使用node實(shí)現(xiàn)的多人游戲源碼不忍直視,故不開源。如果你有充足的時(shí)間和精力,歡迎擴(kuò)展出多人游戲版本~
游戲的玩法和貪吃蛇大作戰(zhàn)基本一致。左側(cè)搖桿控制方向,右側(cè)按鈕加速。當(dāng)你控制的貪吃蛇頭部碰撞到墻壁或其他貪吃蛇時(shí),Gameover。
每一段時(shí)間會(huì)自動(dòng)生成傻瓜式的AI,它只能隨機(jī)轉(zhuǎn)向和躲避墻壁。
Demo使用了touch事件,不支持PC端。
請使用移動(dòng)設(shè)備訪問 http://verysao.com/dragon
npm i // 安裝依賴 ng serve -p 0 // 本地啟動(dòng)Build
ng build –-prod –-aot --env=prod文件結(jié)構(gòu)
主要代碼都位于src/app內(nèi),以下是src/app文件夾內(nèi)的目錄結(jié)構(gòu)及文件說明。
. |____app.component.html |____gameover | |____gameover.component.scss | |____gameover.component.html | |____gameover.component.ts 游戲結(jié)束彈窗 | |____gameover.component.spec.ts |____room | |____room.component.scss | |____room.component.ts 多人模式下的房間(未開發(fā)) | |____room.component.html | |____room.component.spec.ts |____app.component.scss |____app.component.spec.ts |____app.module.ts |____app.component.ts 游戲核心邏輯、渲染主畫面 |____speed-up | |____speed-up.component.html | |____speed-up.component.scss | |____speed-up.component.ts 加速按鈕 | |____speed-up.component.spec.ts |____menu | |____menu.component.ts 主菜單 | |____menu.component.spec.ts | |____menu.component.html | |____menu.component.scss |____joystick | |____joystick.component.spec.ts | |____joystick.component.scss | |____joystick.component.html | |____joystick.component.ts 搖桿按鈕 |____rank | |____rank.component.html | |____rank.component.spec.ts | |____rank.component.scss | |____rank.component.ts 積分榜 |____factory 類 | |____speedUp.ts 加速類 | |____food.ts 食物類 | |____joystick.ts 搖桿類 | |____dragon.ts 貪吃蛇類 |____ws | |____ws.service.ts websocket服務(wù)(用于多人游戲)游戲邏輯
貪吃蛇是由一連串的位置坐標(biāo)和半徑描述而成。
主要的游戲邏輯有: 貪吃蛇移動(dòng) 、 碰撞檢測(貪吃蛇碰撞、碰撞墻壁和吃食物)、 AI。
貪吃蛇的移動(dòng)距離根據(jù) 方向 + 速度 + 時(shí)間 求出,而方向又由 搖桿方向 + 角速度 + 時(shí)間 求出。
碰撞檢測就是對 貪吃蛇、食物 循環(huán)遍歷。
邏輯都比較簡單,就不細(xì)說。
渲染原理使用canvas繪制游戲畫面。
在app.component.ts的ngOnInit中渲染搖桿及加速按鈕,因?yàn)檫@兩部分是不變的,不需要不斷地重新繪制。
渲染的主要函數(shù)為app.component.ts內(nèi)的render函數(shù),依次繪制出地圖、食物、貪吃蛇,當(dāng)重疊時(shí),先繪制的會(huì)位于底層。
在render函數(shù)內(nèi)使用了 clearRect(0, 0, this.width, this.height) 和 requestAnimationFrame(this.render.bind(this)) 不斷地清空、繪制、清空、繪制,從而達(dá)到了動(dòng)態(tài)的效果。
Q&A如何貪吃蛇始終位于屏幕中心?
原理是當(dāng)貪吃蛇移動(dòng)時(shí),讓地圖隨著貪吃蛇相反的方向偏移,這樣就使得貪吃蛇一直位于屏幕中心了。
貪吃蛇的身體如何跟隨頭部移動(dòng)?
需要分為兩種情況,在單位時(shí)間內(nèi)貪吃蛇移動(dòng)一單位長度 和 貪吃蛇移動(dòng)多單位長度。
一單位長度時(shí)比較簡單,只需將舊的頭部左邊unshift進(jìn)body數(shù)組,body數(shù)組pop掉最后一個(gè),然后給頭部賦新值。
多單位長度時(shí),需要計(jì)算出舊頭部移動(dòng)到新頭部可能出現(xiàn)的坐標(biāo),然后依次unshift進(jìn)body數(shù)組內(nèi),body再pop掉多余的坐標(biāo)。
貪吃蛇出生的光圈大小和位置如何計(jì)算?
貪吃蛇的頭部和身體都是一個(gè)一個(gè)點(diǎn),光圈能夠隨著貪吃蛇形態(tài)的變化而變化。
這其實(shí)是一個(gè)最小覆蓋圓算法。TypeScript實(shí)現(xiàn)最小覆蓋圓的增量算法
如果有所收獲,請點(diǎn)個(gè)贊~ https://github.com/suyingtao/...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/93509.html
摘要:感覺游戲?qū)徍诵抡?shí)施后,國內(nèi)手游市場略冷清,是不是各家的新游戲都在排隊(duì)等審核。不過現(xiàn)在微信已經(jīng)悍然屏蔽了它的分享這個(gè)游戲就是現(xiàn)在免費(fèi)榜排名第一的貪吃蛇大作戰(zhàn)。不過這實(shí)在是一個(gè)挺好實(shí)現(xiàn)的游戲,于是一時(shí)技癢,拿做了一個(gè)實(shí)現(xiàn)。 感覺游戲?qū)徍诵抡?shí)施后,國內(nèi)手游市場略冷清,是不是各家的新游戲都在排隊(duì)等審核。媒體們除了之前競相追捧《Pokemon Go》熱鬧了一把,似乎也聽不到什么聲音了。直到最...
摘要:點(diǎn)擊預(yù)覽在之前的代碼風(fēng)格,和樣式上做了大調(diào)整,如下圖,主要是美化了移動(dòng)端移動(dòng)端中間的圓點(diǎn)按鈕是重新開始,周圍的方向按鈕和游戲手柄操作一樣端鍵盤方向鍵控制本次得分歷史最高分移動(dòng)端端適配蛇的樣式美化游戲設(shè)置障礙物源碼關(guān)注我 Intro 點(diǎn)擊預(yù)覽 在之前的代碼風(fēng)格,和樣式上做了大調(diào)整,如下圖,主要是美化了移動(dòng)端 Before showImg(https://segmentfault.com...
此篇文章主要是詳細(xì)介紹了python完成簡單的貪吃蛇小游戲附編號(hào),文章內(nèi)容緊扣主題進(jìn)行詳盡的基本介紹,具有很強(qiáng)的參考意義,需用的朋友可以學(xué)習(xí)一下 序言: 不知道有沒有同學(xué)們和我一樣,最開始觸碰程序編程的動(dòng)機(jī)就是為了做一個(gè)游戲打? 接下來要跟大家分享是指一個(gè)pygame所寫的貪食蛇手機(jī)游戲: 貪食蛇這一個(gè)手機(jī)游戲在編程設(shè)計(jì)里的熟客,由于: 簡易,最基本游戲情節(jié)你只需要蛇和食物2個(gè)就可以...
閱讀 1640·2021-10-25 09:46
閱讀 3235·2021-10-08 10:04
閱讀 2383·2021-09-06 15:00
閱讀 2784·2021-08-19 10:57
閱讀 2088·2019-08-30 11:03
閱讀 989·2019-08-30 11:00
閱讀 2389·2019-08-26 17:10
閱讀 3559·2019-08-26 13:36