本文实例为大家分享了vue实现井字棋游戏的具体代码,供大家参考,具体内容如下
之前看react的教程时看到的小游戏,试着用vue做一个。右边的winner提示胜者,还没有胜者时提示下一个棋子的种类。restart按钮点击可重新开始。go to step可跳转到第n步。
html:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
< 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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
<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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
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;
}
}
})
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_43756316/article/details/108827919