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得到网页中所有的div的id
Oct 19 Javascript
IE JS无提示关闭窗口不提示的方法
Apr 29 Javascript
基于jQuery制作迷你背词汇工具
Jul 27 Javascript
jquery插件uploadify实现带进度条的文件批量上传
Dec 13 Javascript
JSONP原理及简单实现
Jun 08 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
Angular-Touch库用法示例
Dec 22 Javascript
Bootstrap显示与隐藏简单实现代码
Mar 06 Javascript
Three.js获取鼠标点击的三维坐标示例代码
Mar 24 Javascript
vue-rx的初步使用教程
Sep 21 Javascript
vue项目部署到nginx/tomcat服务器的实现
Aug 26 Javascript
vue v-for直接循环数字实例
Nov 07 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读取xml方法介绍
2013/01/12 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
PHP正则获取页面所有图片地址
2016/03/23 PHP
PHP面向对象程序设计类的定义与用法简单示例
2016/12/27 PHP
Jquery方式获取iframe页面中的 Dom元素
2014/05/07 Javascript
微信小程序 picker-view 组件详解及简单实例
2017/01/10 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
vue实现打地鼠小游戏
2020/08/21 Javascript
Python使用chardet判断字符编码
2015/05/09 Python
Python列表切片用法示例
2017/04/19 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
将python包发布到PyPI和制作whl文件方式
2019/12/25 Python
QML用PathView实现轮播图
2020/06/03 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
美国时尚在线:Showpo
2017/09/08 全球购物
100%植物性、有机、即食餐:Sakara Life
2018/10/25 全球购物
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
心得体会开头
2014/01/01 职场文书
小学生打架检讨书
2014/01/26 职场文书
《雷雨》教学反思
2014/02/20 职场文书
运动会800米加油稿
2014/02/22 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
医院见习总结
2015/06/24 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
AJAX实现省市县三级联动效果
2021/10/16 Javascript
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL