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