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中的继承实例代码
Apr 27 Javascript
如何使用jQuery Draggable和Droppable实现拖拽功能
Jul 05 Javascript
js 判断上传文件大小及格式代码
Nov 13 Javascript
加载列表时jquery获取ul中第一个li的属性
Nov 02 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
Dec 24 Javascript
浅谈angularjs module返回对象的坑(推荐)
Oct 21 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
Dec 29 Javascript
vue中英文切换实例代码
Jan 21 Javascript
vue前端工程的搭建
Mar 31 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
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
JavaScript中一些特殊的字符运算
2017/08/17 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
20个最常见的jQuery面试问题及答案
2018/05/23 jQuery
JavaScript 截取字符串代码实例
2019/09/05 Javascript
vue如何实现动态加载脚本
2020/02/05 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
[59:44]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 paiN vs iG
2018/03/31 DOTA
python实现zencart产品数据导入到magento(python导入数据)
2014/04/03 Python
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python多进程库multiprocessing中进程池Pool类的使用详解
2017/11/24 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
Python的Tqdm模块实现进度条配置
2021/02/24 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
养殖人员的创业计划书范文
2013/12/26 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
2014年党支部承诺书
2014/05/30 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年环卫工作总结
2014/11/22 职场文书
感动中国何玥观后感
2015/06/02 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
vue+element ui实现锚点定位
2021/06/29 Vue.js