您好,登錄后才能下訂單哦!
使用vue實(shí)現(xiàn)一個(gè)井字棋游戲?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
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; } }, //跳轉(zhuǎn)到第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; } } })
看完上述內(nèi)容,你們掌握使用vue實(shí)現(xiàn)一個(gè)井字棋游戲的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。