vue实现井字棋游戏


Posted in Javascript onSeptember 29, 2020

本文实例为大家分享了vue实现井字棋游戏的具体代码,供大家参考,具体内容如下

之前看react的教程时看到的小游戏,试着用vue做一个。右边的winner提示胜者,还没有胜者时提示下一个棋子的种类。restart按钮点击可重新开始。go to step可跳转到第n步。

vue实现井字棋游戏

html:

<div id="app">
 <ul id="board" class="white normal">
 <li class="square" v-for="i, idx in datas" @click=set(idx)>{{i}}</li>
 </ul>
 <div id="console">
 <div id="hint" class="white">{{hint}}</div>
 <input type="button" class="white" id="restart" value="restart" @click="init()"/>
 <ul id="history" class="normal">
  <li class="history" v-for="i, idx in history">
  <input type="button" class="white" :value="'go to step' + (idx + 1)" @click=jump(idx) />
  </li>
 </ul>
 </div>
</div>

css:

<style type="text/css">
 body {
 background: #5af;
 }
 
 .white {
 background: #fff;
 border-radius: 11px;
 outline: none;
 border: none;
 }
 
 .normal {
 list-style: none;
 padding: 0px;
 margin: 0px;
 }
 
 #app {
 display: flex;
 justify-content: space-between;
 width: 450px;
 height: 306px;
 position: absolute;
 top: 0;
 bottom: 0;
 left: 0;
 right: 0;
 margin: auto;
 }
 
 #board {
 display: flex;
 width: 306px;
 height: 306px;
 flex-wrap: wrap;
 overflow: hidden;
 }
 
 #hint {
 width: 100px;
 height: 22px;
 text-align: center;
 margin: 10px;
 }
 
 #restart {
 width: 70px;
 height: 22px;
 margin: 10px;
 }
 
 #history,
 .history {
 margin: 5px;
 }
 
 .square {
 height: 100px;
 width: 100px;
 border: #ebebeb solid 1px;
 flex: 0 0 auto;
 font-size: 50px;
 font-weight: 900;
 line-height: 100px;
 text-align: center;
 }
</style>

js:

new Vue({
 el: '#app',
 data: {
 datas: Array(9).fill(''),
 history: [],
 next: true,
 winner: '',
 cases: [
  [0, 1, 2],
  [3, 4, 5],
  [6, 7, 8],
  [0, 3, 6],
  [1, 4, 7],
  [2, 5, 8],
  [0, 4, 8],
  [2, 4, 6],
 ]
 },
 methods: {
 //放置棋子
 set(idx) {
  if (!this.datas[idx] && !this.winner) {
  this.$set(this.datas, idx, this.next_player);
  this.history.push({
   status: [...this.datas],
   player: this.next
  });
  if (this.is_win(this.next_player)) {
   this.winner = this.next_player;
  }
  this.next = !this.next;
  }
 },
 //跳转到第n步
 jump(idx) {
  this.datas = this.history[idx].status;
  this.history.splice(idx + 1, this.history.length - idx - 1);
  this.next = !this.history[idx].player;
  this.winner = this.is_win('O') 
  ? 'O' 
  : this.is_win('X') 
   ? 'X' 
   : '';
 },
 //判断是否胜出
 is_win(player) {
  return this.cases.some(arr => arr.every(el => this.datas[el] === player));
 },
 //初始化
 init() {
  this.datas = Array(9).fill('');
  this.history = [];
  this.next = true;
  this.winner = '';
 }
 },
 computed: {
 next_player() {
  return this.next ? 'O' : 'X';
 },
 hint() {
  return this.winner ? 'winner: ' + this.winner : 'next: ' + this.next_player;
 }
 }
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
Apr 15 Javascript
Checbox的操作含已选、未选及判断代码
Nov 07 Javascript
深入理解JavaScript高级之词法作用域和作用域链
Dec 10 Javascript
javascript中全局对象的parseInt()方法使用介绍
Dec 19 Javascript
JavaScript多线程详解
Aug 12 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
Nov 06 Javascript
小巧强大的jquery layer弹窗弹层插件
Dec 06 Javascript
Node.js学习之TCP/IP数据通讯(实例讲解)
Oct 11 Javascript
详解js的作用域、预解析机制
Feb 05 Javascript
node.js 模块和其下载资源的镜像设置的方法
Sep 06 Javascript
Vue是怎么渲染template内的标签内容的
Jun 05 Javascript
Openlayers实现图形绘制
Sep 28 Javascript
js实现移动端图片滑块验证功能
Sep 29 #Javascript
js+cavans实现图片滑块验证
Sep 29 #Javascript
如何利用JS将手机号中间四位变成*号
Sep 29 #Javascript
原生JavaScript实现刮刮乐
Sep 29 #Javascript
原生JavaScript实现拖动校验功能
Sep 29 #Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 #Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
Sep 29 #Javascript
You might like
用PHP函数解决SQL injection
2006/10/09 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
php 记录进行累加并显示总时长为秒的结果
2011/11/04 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
2020/06/06 PHP
javascript下数值型比较难点说明
2010/06/07 Javascript
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
2013/08/07 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
详解Javascript中的原型OOP
2016/10/12 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
vue瀑布流组件实现上拉加载更多
2020/03/10 Javascript
python字符串连接方式汇总
2014/08/21 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python unittest单元测试openpyxl实现过程解析
2020/05/27 Python
python自动打开浏览器下载zip并提取内容写入excel
2021/01/04 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
什么是makefile? 如何编写makefile?
2013/01/02 面试题
交通志愿者活动总结
2014/06/27 职场文书
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
雷锋的观后感
2015/06/10 职场文书
大学生军训感言
2015/08/01 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
python实战之90行代码写个猜数字游戏
2021/04/22 Python
Python类方法总结讲解
2021/07/26 Python
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
Python数据处理的三个实用技巧分享
2022/04/01 Python
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫