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去除空格的几种方法
Oct 03 Javascript
FileUpload上传图片(图片不变形)
Aug 05 Javascript
子页向父页传值示例
Nov 27 Javascript
javascript排序函数实现数字排序
Jun 26 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
Oct 27 Javascript
JavaScript获取各大浏览器信息图示
Nov 20 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
Jan 20 Javascript
jQuery给表格添加分页效果
Mar 02 Javascript
vue-baidu-map 进入页面自动定位的解决方案(推荐)
Apr 28 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
Mar 27 Javascript
微信小程序页面传多个参数跳转页面的实现方法
May 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
LotusPhp笔记之:基于ObjectUtil组件的使用分析
2013/05/06 PHP
PHP eval函数使用介绍
2013/12/08 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
js正则表达式的使用详解
2013/07/09 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
javascript Array 数组常用方法
2015/04/05 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
javascript实现简单的分页特效
2015/08/12 Javascript
jQuery制作网页版选项卡
2016/07/28 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
nodejs通过钉钉群机器人推送消息的实现代码
2019/05/05 NodeJs
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
基于小程序请求接口wx.request封装的类axios请求
2020/07/02 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
Python中tell()方法的使用详解
2015/05/24 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
代办委托书怎样写
2014/04/08 职场文书
保护母亲河倡议书
2014/04/14 职场文书
安全技术说明书
2014/05/09 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
乡镇领导干部个人对照检查材料思想汇报
2014/09/23 职场文书
公民授权委托书
2014/10/15 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
党支部综合考察意见
2015/06/01 职场文书