久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

教你用Vue輕松做個貪吃蛇游戲(附演示代碼)

本文要分享的是如何使用Vue.js實現一個命令行貪吃蛇游戲(temir-snake-game).對于貪吃蛇游戲想必大家都不陌生了,使用Vue.js實現一個Web版的貪吃蛇游戲似乎沒什么難度,那如果是命令行版的呢?是不是你會對它的實現原理感興趣呢?讓我們開始吧!

Vue.js寫一個命令行貪吃蛇游戲

安裝

npm install temir-snake-game -g
登錄后復制

開始游戲

在終端窗口運行temir-sg.

對于Windows系統,推薦使用hyper終端進行體驗.

將Vue渲染到命令行界面

使用Vue.js實現命令行貪吃蛇游戲,首先意味著我們要將Vue.js渲染到命令行界面,才能開始具體的游戲實現.我們經常用Vue.js來編寫Web應用,但是Vue的能力卻不僅僅局限于此,它的舞臺也不只有瀏覽器.Vue3擁有出色的跨平臺能力,我們可以通過createRenderer API創建一個自定義渲染器,通過創建宿主環境中對應的Node和Element,并對元素進行增刪改查操作.【推薦:vue.js視頻教程】

得益于Vue3出色的跨平臺能力,我實現了Temir,一個用Vue組件來編寫命令行界面應用的工具.開發者只需要使用Vue就可以編寫命令行應用,不需要任何額外的學習成本.順便值得一提的是,它還支持HMR~

教你用Vue輕松做個貪吃蛇游戲(附演示代碼)

前端(vue)入門到精通課程,老師在線輔導:聯系老師
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

關于Temir就不在這里進行詳細的介紹了,有興趣的童鞋可以上Github查看介紹或者看使用Vue.js編寫命令行界面這篇文章.

貪吃蛇游戲實現

有了Temir,我們就具備了使用Vue.js編寫命令行游戲的條件,接下來我們來看看游戲的具體實現:

實現拆解

首先我們對游戲實現進行一下簡單的拆解,從元素+邏輯的維度來看,可以簡單分為幾部分:

教你用Vue輕松做個貪吃蛇游戲(附演示代碼)

元素初始化

競技臺

蛇的爬行與食物的生成都需要依賴坐標,最簡單的坐標其實只需要一個索引值.因此競技臺的組成也很簡單,就是由很多個小盒子(這里以⬛表示)組成,每一個盒子對應一個坐標(索引),我們要做的是一個28*28的競技臺,因此它的索引集合就是(0~783).

const basic = 28 const backgroundIcon = '⬛' const arena = ref<string[]>([])  function initArena() {  arena.value = Array.from({ length: basic * basic }, () => backgroundIcon) }
登錄后復制

前面我們提到了坐標的概念,蛇身的組成就是一串有規律的坐標.

const snakeIcon = '?' // 坐標(索引)30,29 長度為2的蛇身 const snakeBody = ref([30, 29])
登錄后復制

食物

食物的生成其實也就是隨機一個坐標(索引),只不過要注意的是,我們需要避開蛇身本身的坐標.

const foodIcon = '?' // 食物坐標 const foodCoord = ref(77)  // 生成食物 function generateFood() {   const food = Math.floor(Math.random() * basic * basic)   // 與蛇身沖突,重新生成   if (snakeBody.value.includes(food)) {     generateFood()     return   }   foodCoord.value = food }
登錄后復制

初始化后的元素長這樣 :

教你用Vue輕松做個貪吃蛇游戲(附演示代碼)

蛇的爬行

蛇的爬行邏輯有兩個基礎元素,方向 + 步數.前面我們提到了競技臺的組成是一個28*28的行列式結構,那么關于方向和步數的映射,就比較清晰了:

const map = {  left: -1,  right: 1,  top: -28,  bottom: 28 }
登錄后復制

有了兩個基本元素,我們就可以得出我們每一次爬行的下一個坐標.我們只需要在每次爬行的時候往蛇頭添加對應的坐標,并移除蛇尾所在的坐標就可以達到蛇爬行的效果.

function move() {   const h = snakeBody.value[0]   // 計算下一次爬行坐標,并添加至蛇頭   head.value = h + direction.value   snakeBody.value.unshift(head.value)    // 吃到食物,重新生成   if (head.value === foodCoord.value) {     generateFood()   }   // 只有在未吃到食物的時候,才需要移除蛇尾   else { snakeBody.value.pop() } }
登錄后復制

越界邏輯

貪吃蛇的游戲結束規則判斷就是爬行時蛇頭越界(這里的界限指的是超出競技臺的范圍)或者碰到蛇身.

function isOutOfRange(h: number) {     // 1. 蛇頭碰到蛇身   return snakeBody.value.indexOf(h, 1) > 0     // 2. 蛇頭超出競技臺上方     || h < 0     // 3. 蛇頭超出競技臺下方     || h > basic * basic - 1     // 4. 蛇頭超出競技臺右方     || (direction.value === 1 && h % basic === 0)     // 5. 蛇頭超出競技臺左方     || (direction.value === -1 && h % basic === basic - 1) }
登錄后復制

方向控制

貪吃蛇游戲核心的操作邏輯在于操縱蛇的方向進行食物的捕捉.所以我們需要做的就是捕捉用戶方向鍵的輸入進行方向的切換.Temir提供了useInput函數監聽用戶的輸入.

import { useInput } from '@temir/core' useInput(onKeyBoard, { isActive: true })  function onKeyBoard(_, keys) {   const { upArrow, downArrow, leftArrow, rightArrow } = keys   const d = {     [+leftArrow]: -1,     [+rightArrow]: 1,     [+upArrow]: -basic,     [+downArrow]: basic,   }[1] ?? direction.value   direction.value = (snakeBody.value[1] - snakeBody.value[0] === d) ? direction.value : d }
登錄后復制

UI繪制

關于UI的繪制與呈現Temir提供了一些Vue組件,我們只需要像構建Flexbox布局那樣構建終端UI:

<script setup> import { computed } from 'vue' import { TBox, TText } from '@temir/core' import { useGame } from './composables' import Header from './components/Header.vue' import Home from './components/Home.vue' import Game from './components/Game.vue' import GameOver from './components/GameOver.vue' import Exit from './components/Exit.vue' const { playStatus } = useGame() const activeComponent = computed(() => {   return {     unplayed: Home,     playing: Game,     over: GameOver,     exit: Exit,   }[playStatus.value] }) </script>  <template>   <TBox     :width="100"     justify-content="center"     align-items="center"     flex-direction="column"     border-style="double"   >     <Header />     <component :is="activeComponent" />   </TBox> </template>
登錄后復制

到這里,貪吃蛇的實現就結束了,對具體實現感興趣的可以戳源碼查看.

演示

教你用Vue輕松做個貪吃蛇游戲(附演示代碼)

教你用Vue輕松做個貪吃蛇游戲(附演示代碼)

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
欧美精品中文| 成人小电影网站| 日韩精品视频中文字幕| 国产色噜噜噜91在线精品| 国产网站在线| 狠狠干成人综合网| 欧美日本久久| 久久精品欧美一区| 亚久久调教视频| av最新在线| 蜜臀国产一区二区三区在线播放| 日韩精品免费一区二区夜夜嗨| 久久免费影院| 国产精品色网| 麻豆国产91在线播放| 97精品视频在线看| 中文字幕日本一区| а√天堂8资源在线| 蜜臀av在线播放一区二区三区| 国产精品mm| 国产亚洲在线| 国产精品毛片久久久| 99精品美女| 97精品国产99久久久久久免费| 日韩中文在线电影| 日韩精品一区二区三区中文在线| 在线天堂资源www在线污| 亚洲色图网站| 成人久久久久| 国产一卡不卡| 欧美不卡视频| 久久精品一区二区国产| 黄色成人91| 久久精品国内一区二区三区| 久久国产精品亚洲77777| 国产suv精品一区二区四区视频| 亚洲综合婷婷| 久久久国产亚洲精品| 国产日韩一区二区三免费高清| 九一国产精品| 国产精品毛片久久| 欧美在线不卡| 午夜在线播放视频欧美| 国产成人精选| 欧美亚洲福利| 伊人影院久久| 日韩一区电影| 久久一区视频| 国产欧美一区二区精品久久久 | 美女av在线免费看| 日韩高清一区在线| 女人天堂亚洲aⅴ在线观看| 久久av免费看| 日韩一区精品| 国产精品毛片| 在线日韩av| 正在播放日韩精品| 国产精品sm| 日本在线一区二区三区| 日韩视频一区| 播放一区二区| 91嫩草亚洲精品| 久久福利在线| 日本午夜精品久久久| 午夜在线精品| 美女网站一区| 99久久亚洲精品蜜臀| 91综合视频| 精品国产18久久久久久二百| 国产精品一区亚洲| 欧美精品福利| 久久激情综合网| 7m精品国产导航在线| 亚洲青青久久| 亚洲少妇一区| 亚洲国产日韩欧美在线| 欧美日韩中文一区二区| 日韩欧美一区二区三区免费看| 国产不卡一区| 国产一区二区三区天码| 国产黄色精品| 国产精品1区在线| 日韩和的一区二在线| 亚洲欧美专区| 中文亚洲免费| 欧美日韩国产在线观看网站| 日韩欧美一区二区三区免费观看| 老司机精品视频在线播放| 国产精品一区二区美女视频免费看 | 中文无码日韩欧| 中文精品视频| 日韩精品一级中文字幕精品视频免费观看| 亚洲特色特黄| 亚洲少妇一区| 免费欧美在线视频| 蜜臀va亚洲va欧美va天堂| 久久福利精品| 亚洲精品少妇| 日韩欧美精品一区二区综合视频| 日韩欧乱色一区二区三区在线| 日韩欧美中文字幕在线视频| 日本中文字幕不卡| 精品国产亚洲一区二区三区| 国产美女久久| 久久久国产精品网站| 国产一区二区亚洲| 秋霞国产精品| 亚洲一区二区三区高清不卡| 美女精品一区| 日韩**一区毛片| 国产伦理久久久久久妇女| 久久精品97| 欧美国产另类| av免费不卡国产观看| 在线日韩一区| 蜜桃久久久久久| 7777精品| 日韩av在线中文字幕| 韩国精品主播一区二区在线观看| 婷婷久久一区| 亚洲精品在线a| 久久不卡国产精品一区二区| 欧美激情99| 极品av在线| 国产亚洲一区二区手机在线观看| 国产精品99久久精品| 亚洲欧美日韩综合国产aⅴ| 在线看片不卡| 亚洲欧美日本日韩| 免播放器亚洲| 中文字幕日韩欧美精品高清在线| 丝袜脚交一区二区| 亚洲精品在线国产| 国产日韩三级| 精品国产一区二区三区噜噜噜| 韩国一区二区三区视频| 欧美不卡高清| 日韩一区二区三区免费视频| 欧美国产亚洲精品| 私拍精品福利视频在线一区| 丝袜美腿亚洲一区| 四虎精品一区二区免费| 欧美啪啪一区| 精品国产aⅴ| 欧美天堂视频| 自由日本语亚洲人高潮| 国产一区二区三区四区五区传媒| 精品国产三区在线| 欧美日韩四区| 国产精品2023| 午夜久久tv| 国产毛片久久久| 精品在线99| 免费日韩成人| 国产精品日本欧美一区二区三区| 国产精品极品国产中出| 久久精品影视| 91精品日本| 亚洲国产一区二区在线观看| 国产精品美女在线观看直播| 黄色免费成人| 国产中文字幕一区二区三区| 丝袜a∨在线一区二区三区不卡| 精品国产亚洲一区二区在线观看| 亚洲黄页一区| 福利一区在线| 亚洲精品影视| 久久国产影院| 国产精品三p一区二区| 亚洲综合婷婷| 国产精品一区亚洲| 91精品精品| 国产精品亚洲综合久久| jiujiure精品视频播放| 久久99青青| 蜜臀精品久久久久久蜜臀| 中文av在线全新| 久久精品99国产精品| 国产视频一区三区| 国产白浆在线免费观看| 日本精品一区二区三区在线观看视频| 久久国产日韩| 久久av国产紧身裤| 亚洲影视一区| 欧美日韩一二三四| 国产一区二区三区四区五区传媒| 蜜臀久久久久久久| 一区二区三区四区在线看| 精品日韩一区| 欧美一区成人| 蜜臀国产一区二区三区在线播放 | 日韩免费在线| 精品五月天堂| 久久精品 人人爱| 一区二区三区国产在线| 欧美日韩激情| 久久裸体视频| 国产激情在线播放| 欧美黄色一区二区| 久久精品xxxxx|