国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

使用TypeScript和Canvas編寫(xiě)移動(dòng)端貪吃蛇大作戰(zhàn)游戲

AlphaWallet / 515人閱讀

摘要:基本介紹一款移動(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

游戲截圖

本地運(yùn)行
    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)最小覆蓋圓的增量算法

Thanks

如果有所收獲,請(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

相關(guān)文章

  • 爆款游戲貪吃大作戰(zhàn)》的 Python 實(shí)現(xiàn)

    摘要:感覺(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)不到什么聲音了。直到最...

    chaos_G 評(píng)論0 收藏0
  • Canvas 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的貪吃

    摘要:點(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...

    Jochen 評(píng)論0 收藏0
  • python完成簡(jiǎn)單的貪吃游戲附編號(hào)

      此篇文章主要是詳細(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è)就可以...

    89542767 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<