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 相关文章推荐
srcElement表格样式
Sep 03 Javascript
两个DIV等高的JS的实现代码
Dec 23 Javascript
Ext JS Grid在IE6 下宽度的问题解决方法
Feb 15 Javascript
JS网页播放声音实现代码兼容各种浏览器
Sep 22 Javascript
Windows8下搭建Node.js开发环境教程
Sep 03 Javascript
jQuery中scrollTop()方法用法实例
Jan 16 Javascript
javascript使用闭包模拟对象的私有属性和方法
Oct 05 Javascript
websocket+node.js实现实时聊天系统问题咨询
May 17 Javascript
微信小程序多列选择器range-key使用详解
Mar 30 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
Dec 11 Javascript
深入解析ES6中的promise
Nov 08 Javascript
详解Vue 全局变量,局部变量
Apr 17 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/11/25 PHP
php error_log 函数的使用
2009/04/13 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
JavaScript实现音乐自动切换和轮播
2017/11/05 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
详解vue开发中调用微信jssdk的问题
2019/04/16 Javascript
解读Python中degrees()方法的使用
2015/05/18 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
Python3编程实现获取阿里云ECS实例及监控的方法
2017/08/18 Python
浅谈python中的占位符
2017/11/09 Python
Python决策树和随机森林算法实例详解
2018/01/30 Python
python flask实现分页的示例代码
2018/08/02 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
python的pip安装以及使用教程
2018/09/18 Python
python实现简单飞行棋
2020/02/06 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
曼城官方网上商店:Manchester City
2019/09/10 全球购物
技校毕业生的自我评价
2013/12/27 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
《湘夫人》教学反思
2014/02/21 职场文书
公司活动总结怎么写
2014/06/25 职场文书
幼儿园元旦主持词
2015/07/06 职场文书
车间安全生产管理制度
2015/08/06 职场文书
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技