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 相关文章推荐
不同的jQuery API来处理不同的浏览器事件
Dec 09 Javascript
用javascript关闭本窗口技巧小结
Sep 05 Javascript
javascript实现的登陆遮罩效果汇总
Nov 09 Javascript
浅谈window.onbeforeunload() 事件调用ajax
Jun 29 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
Oct 15 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
Dec 25 Javascript
javascript循环链表之约瑟夫环的实现方法
Jan 16 Javascript
基于node.js express mvc轻量级框架实践
Sep 14 Javascript
vue项目中使用ueditor的实例讲解
Mar 05 Javascript
vue和webpack打包项目相对路径修改的方法
Jun 15 Javascript
解决antd 表单设置默认值initialValue后验证失效的问题
Nov 02 Javascript
JS实现九宫格拼图游戏
Jun 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
删除无限级目录与文件代码共享
2006/07/12 PHP
PHP4引用文件语句的对比
2006/10/09 PHP
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
关于Intype一些小问题的解决办法
2008/03/28 PHP
php file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
纯js实现背景图片切换效果代码
2010/11/14 Javascript
js实现鼠标划过给div加透明度的方法
2015/05/25 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
微信 java 实现js-sdk 图片上传下载完整流程
2016/10/21 Javascript
微信小程序模板之分页滑动栏
2017/02/10 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
React路由鉴权的实现方法
2019/09/05 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
对Python中TKinter模块中的Label组件实例详解
2019/06/14 Python
Python 字符串池化的前提
2020/07/03 Python
Unineed中文官网:高端护肤美妆与时尚配饰,英国直邮
2020/07/23 全球购物
介绍一下linux的文件权限
2012/02/15 面试题
工程专业毕业生自荐信范文
2013/12/25 职场文书
家长寄语大全
2014/04/02 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
共青团员自我评价
2015/03/10 职场文书