文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

怎么用Vue做个贪吃蛇游戏

2023-07-04 15:52

关注

这篇文章主要介绍了怎么用Vue做个贪吃蛇游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Vue做个贪吃蛇游戏文章都会有所收获,下面我们一起来看看吧。

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,并对元素进行增删改查操作.

得益于Vue3出色的跨平台能力,我实现了Temir,一个用Vue组件来编写命令行界面应用的工具.开发者只需要使用Vue就可以编写命令行应用,不需要任何额外的学习成本.顺便值得一提的是,它还支持HMR~

怎么用Vue做个贪吃蛇游戏

贪吃蛇游戏实现

有了Temir,我们就具备了使用Vue.js编写命令行游戏的条件,接下来我们来看看游戏的具体实现:

实现拆解

首先我们对游戏实现进行一下简单的拆解,从元素+逻辑的维度来看,可以简单分为几部分:

怎么用Vue做个贪吃蛇游戏

元素初始化

竞技台

蛇的爬行与食物的生成都需要依赖坐标,最简单的坐标其实只需要一个索引值.因此竞技台的组成也很简单,就是由很多个小盒子(这里以⬛表示)组成,每一个盒子对应一个坐标(索引),我们要做的是一个28*28的竞技台,因此它的索引集合就是(0~783).

const basic = 28const 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做个贪吃蛇游戏

关于“怎么用Vue做个贪吃蛇游戏”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么用Vue做个贪吃蛇游戏”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯