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编程开发中的五个实用小技巧
Jul 22 Javascript
js中实现多态采用和继承类似的方法
Aug 22 Javascript
JavaScript 学习笔记之操作符(续)
Jan 14 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
Jul 18 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
Mar 03 Javascript
微信小程序 页面传值详解
Mar 10 Javascript
package.json文件配置详解
Jun 15 Javascript
JS实现定时任务每隔N秒请求后台setInterval定时和ajax请求问题
Oct 15 Javascript
JS构造一个html文本内容成文件流形式发送到后台
Jul 31 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
Aug 22 Javascript
JS实现盒子拖拽效果
Feb 06 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 常用函数库和一些实用小技巧
2009/01/01 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
js调用后台、后台调用前台等方法总结
2014/04/17 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
Javascript实现单例模式
2016/01/24 Javascript
jQuery插件Validation快速完成表单验证的方式
2016/07/28 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
webpack4 css打包压缩问题的解决
2018/05/18 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
Vue中正确使用Element-UI组件的方法实例
2020/10/13 Javascript
vue-cli —— 如何局部修改Element样式
2020/10/22 Javascript
Python实现的字典值比较功能示例
2018/01/08 Python
python实现根据文件关键字进行切分为多个文件的示例
2018/12/10 Python
详解python读取和输出到txt
2019/03/29 Python
python脚本后台执行方式
2019/12/21 Python
Django的CVB实例详解
2020/02/10 Python
python如何进入交互模式
2020/07/06 Python
详解python算法常用技巧与内置库
2020/10/17 Python
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
给交警的表扬信
2014/01/12 职场文书
英文请假条
2014/04/11 职场文书
白岩松演讲
2014/05/21 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
身边的榜样活动方案
2014/08/20 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
2014年小学教师工作总结
2014/11/10 职场文书
评测 | 大屏显示带收音机的高端音箱,JBL TUNE2便携式插卡音箱实测
2021/04/24 无线电