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的实现原理的模拟代码 -2 数据部分
Aug 01 Javascript
封装的原生javascript弹出层代码
Sep 24 Javascript
浅谈Javascript事件处理程序的几种方式
Jun 27 Javascript
jQuery怎么解析Json字符串(Json格式/Json对象)
Aug 09 Javascript
理解jquery事件冒泡
Jan 03 Javascript
详解XMLHttpRequest(一)同步请求和异步请求
Sep 14 Javascript
JavaScript获取服务器端时间的方法
Nov 29 Javascript
Bootstrap基本组件学习笔记之面板(14)
Dec 08 Javascript
分分钟玩转Vue.js组件(二)
Mar 01 Javascript
axios 实现post请求时把对象obj数据转为formdata
Oct 31 Javascript
vue实现图片懒加载的方法分析
Feb 05 Javascript
js实现翻牌小游戏
Jul 31 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新手上路(十三)
2006/10/09 PHP
PHP无法访问远程mysql的问题分析及解决
2013/05/16 PHP
php向js函数传参的几种方法
2014/08/10 PHP
php多线程并发实现方法
2016/09/30 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
详解js中call与apply关键字的作用
2016/11/21 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
微信小程序商城项目之淘宝分类入口(2)
2017/04/17 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
Node.js进阶之核心模块https入门
2018/05/23 Javascript
vue.js图片转Base64上传图片并预览的实现方法
2018/08/02 Javascript
在Python中使用NLTK库实现对词干的提取的教程
2015/04/08 Python
Python之父谈Python的未来形式
2016/07/01 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
python通过getopt模块如何获取执行的命令参数详解
2017/12/29 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
2019/06/28 Python
python二元表达式用法
2019/12/04 Python
python实现简单俄罗斯方块
2020/03/13 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
高一新生军训方案
2014/05/12 职场文书
品酒会策划方案
2014/05/26 职场文书
兵马俑的导游词
2015/02/02 职场文书
2016年寒假社会实践活动总结
2015/03/27 职场文书
Python办公自动化解决world文件批量转换
2021/09/15 Python
如何优化vue打包文件过大
2022/04/13 Vue.js
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android