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 相关文章推荐
javascript FormatNumber函数实现方法
Dec 30 Javascript
javascript中节点的最近的相关节点访问方法
Mar 20 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
js如何调用qq互联api实现第三方登录
Mar 28 Javascript
javascript中$(function() {});写与不写有哪些区别
Aug 10 Javascript
angular实现商品筛选功能
Feb 01 Javascript
jQuery实现页码跳转式动态数据分页
Dec 31 jQuery
JS中的算法与数据结构之字典(Dictionary)实例详解
Aug 20 Javascript
element实现合并单元格通用方法
Nov 13 Javascript
vue实现在线学生录入系统
May 30 Javascript
Vue看了就会的8个小技巧
Jan 21 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
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报表之jpgraph柱状图实例代码
2011/08/22 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
php随机获取金山词霸每日一句的方法
2015/07/09 PHP
php编程每天必学之验证码
2016/03/03 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
jQuery无刷新上传之uploadify3.1简单使用
2016/06/18 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
JS实现同一DOM元素上onClick事件与onDblClick事件并存的解决方法
2018/06/07 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
简单介绍Python中的RSS处理
2015/04/13 Python
Python中time模块与datetime模块在使用中的不同之处
2015/11/24 Python
Pycharm学习教程(7)虚拟机VM的配置教程
2017/05/04 Python
详解Django中类视图使用装饰器的方式
2018/08/12 Python
Python logging模块用法示例
2018/08/28 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
Python反爬虫技术之防止IP地址被封杀的讲解
2019/01/09 Python
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2014年银行工作总结范文
2014/11/12 职场文书
中学感恩教育活动总结
2015/05/05 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
死磕 java同步系列之synchronized解析
2021/06/28 Java/Android