gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

手把手帶你使用Vue開發(fā)一個(gè)五子棋小游戲!

本篇文章帶大家利用Vue基礎(chǔ)語法來寫一個(gè)五子棋小游戲,希望對(duì)大家有所幫助!

手把手帶你使用Vue開發(fā)一個(gè)五子棋小游戲!

在之前的文章中,用JS的基礎(chǔ)語法寫了一個(gè)五子棋小游戲,今天用Vue的基礎(chǔ)語法來寫一個(gè),感受一下兩者的區(qū)別。。至于怎么判斷勝負(fù),我還是把上篇文章的方法復(fù)制粘貼過來了,如果想了解這個(gè)邏輯,可以看我之前的那篇文章。(學(xué)習(xí)視頻分享:vuejs視頻教程)

1.繪制游戲區(qū)域和游戲元素

開始寫代碼之前,一定要記得先導(dǎo)包Vue文件。棋盤還是用二維數(shù)組來渲染,可以使用Array(15).fill(0).map(()=>Array(15).fill(0))方法來快速生成數(shù)組。

    //創(chuàng)建Vue實(shí)例     let vm = new Vue({       //掛載到對(duì)應(yīng)的盒子上       el: '#app',       data: {         //快速生成用來渲染棋盤的數(shù)組,15*15,默認(rèn)值是0         list: Array(15).fill(0).map(()=>Array(15).fill(0))       },     })

數(shù)組生成之后,就可以用v-for方法對(duì)Html進(jìn)行渲染了。第一層循環(huán)生成tr標(biāo)簽,第二層循環(huán)生成td標(biāo)簽。然后將index和index02這兩個(gè)參數(shù)傳入點(diǎn)擊事件函數(shù)中,并且使用vue樣式綁定,將黑棋和白棋這兩種樣式綁定在td中。

 <div id="app">     <table>       <!-- 渲染tr -->       <tr v-for="(item,index) in list">         <!-- 渲染td,綁定點(diǎn)擊事件,并把參數(shù)傳遞到事件中 -->         <td v-for="(item02,index02) in item" @click="doClick(index,index02)"           :class="{'bgc1':item02==1,'bgc2':item02==2}"></td>       </tr>     </table>     <!-- 悔棋按鈕 -->     <button @click="withdraw">悔棋</button>   </div>

附上CSS樣式

  <style>     * {       margin: 0;       padding: 0;       box-sizing: border-box;       list-style: none;     }      table {       position: relative;       width: 730px;       height: 730px;       margin: 0 auto;       border: 5px solid black;       background: url(./src=http___pic45.nipic.com_20140804_2372131_155038114014_2.jpg&refer=http___pic45.nipic.webp) no-repeat;       background-size: 100%;       background-position: center;       padding: 24px 12px;     }      td {       width: 35px;       height: 35px;       border-radius: 50%;       margin-right: 13px;       margin-bottom: 11px;       cursor: pointer;     }      .bgc1 {       background-color: black;     }      .bgc2 {       background-color: white;     }      button {       position: absolute;       width: 200px;       height: 100px;       bottom: 100px;       right: 200px;       text-align: center;       line-height: 100px;       font-size: 25px;     }   </style>

手把手帶你使用Vue開發(fā)一個(gè)五子棋小游戲!

2.點(diǎn)擊事件

首先用flag變量來判斷黑白棋順序。數(shù)組里的默認(rèn)值都是0,點(diǎn)擊下棋的原理就是改變這個(gè)值,上面td的樣式綁定中,如果值變?yōu)?,就渲染出bgc1樣式,也就是黑色。值為2就渲染出白色。在這個(gè)事件中,數(shù)組的值改變后,頁面不會(huì)重新渲染,所以需要用this.$set()方法,讓v-for強(qiáng)制更新。因?yàn)槲覀冇玫氖荲ue語法,這個(gè)事件函數(shù)要寫入methods中。

    //所有黑棋數(shù)組     let blackArr = []     //所有白棋數(shù)組     let whiteArr = []     //下棋順序變量     let flag = true          //創(chuàng)建Vue實(shí)例    let vm = new Vue({       //掛載到對(duì)應(yīng)的盒子上       el: '#app',       data: {         //用來渲染棋盤的數(shù)組,15*15         list: Array(15).fill(0).map(()=>Array(15).fill(0))       },       methods: {         //點(diǎn)擊事件,參數(shù)a,b對(duì)應(yīng)td里的index,index02         doClick(a, b) {           //判斷是黑棋還是白棋           if (flag) {             //判斷格子內(nèi)是否已經(jīng)有棋子             if (this.list[a][b] == 0) {               //改變點(diǎn)擊的td對(duì)應(yīng)的數(shù)組元素的值,并且強(qiáng)制更新數(shù)組渲染頁面               this.$set(this.list[a], b, 1)               flag = !flag               //將對(duì)應(yīng)的棋子坐標(biāo)添加至總數(shù)組中,后面判斷勝負(fù)需要用               blackArr.push([a, b])             }           } else {             this.$set(this.list[a], b, 2)             flag = !flag             whiteArr.push([a, b])           }         },       },     })

3.悔棋功能

悔棋的原理就是將最后一顆棋子的值變?yōu)?。如何知道哪顆棋子是最后一顆呢,上面不是聲明了兩個(gè)全局?jǐn)?shù)組嗎,數(shù)組里的最后一個(gè)元素不就是最后一顆棋子了。值改變?yōu)?后,要把這個(gè)元素從全局?jǐn)?shù)組中刪除,因?yàn)檫@個(gè)數(shù)組不僅是悔棋的時(shí)候用到,后面判斷勝負(fù)也會(huì)用到,不刪除的話會(huì)干擾到判斷勝負(fù)?;谄迨录暮瘮?shù)同樣要寫在methods里面。

        //悔棋事件         withdraw() {           //判斷前面一步下的是黑棋還是白棋           if (!flag) {             //獲取最后一顆棋子的位置             const a = blackArr[blackArr.length - 1][0]             const b = blackArr[blackArr.length - 1][1]             //將最后一刻棋子對(duì)應(yīng)的數(shù)組元素的值改為0,并且強(qiáng)制更新數(shù)組渲染頁面             this.$set(this.list[a], b, 0)             //把這個(gè)棋子從總數(shù)組里面刪除,否則會(huì)影響到輸贏判斷             blackArr.splice(blackArr.length - 1, 1)             flag = !flag           } else {             const a = whiteArr[whiteArr.length - 1][0]             const b = whiteArr[whiteArr.length - 1][1]             this.$set(this.list[a], b, 0)             whiteArr.splice(whiteArr.length - 1, 1)             flag = !flag           }         }

4.判斷勝負(fù)

判斷勝負(fù)的邏輯我前面的文章中已經(jīng)寫過一遍了,這里我就不做贅述了。感興趣的可以去看前面一篇文章,如何用原生JS寫五子棋。這里直接把方法拿過來,在點(diǎn)擊事件里面調(diào)用就可以了,記得參數(shù)要傳進(jìn)去

手把手帶你使用Vue開發(fā)一個(gè)五子棋小游戲!

  //橫軸獲勝邏輯     function XWin(a, b) {       //當(dāng)前X軸的所有棋子集合數(shù)組       let xAllArr = []       //判斷橫軸勝負(fù)邏輯的X軸棋子數(shù)組       let xWinArr = []       //判斷下的是黑棋還是白棋       if (!flag) {         blackArr.map(item => {           if (item[0] == a) {             //將當(dāng)前排的所有棋子加入對(duì)應(yīng)數(shù)組             xAllArr.push(item[1])           }         })       } else {         whiteArr.map(item => {           if (item[0] == a) {             xAllArr.push(item[1])           }         })       }       //把橫排總數(shù)組排序,方便比較       xAllArr.sort((a, b) => a - b)       for (let i = 1; i < xAllArr.length; i++) {         if (xAllArr[i] == (+xAllArr[i - 1] + 1)) {           //如果相鄰的兩個(gè)棋子數(shù)量相差1,就將其添加至勝負(fù)邏輯數(shù)組           xWinArr.push(xAllArr[i])         } else {           //否則得清空           xWinArr = []         }       }       //獲勝條件       if (xWinArr.length == 4) {         //這里要用定時(shí)器將彈框變成異步任務(wù),否則第五顆棋子渲染不出來就提示獲勝了         if (!flag) {           setTimeout(function () {             alert('黑棋獲勝!')             location.reload()           }, 100)         } else {           setTimeout(function () {             alert('白棋獲勝!')             location.reload()           }, 100)         }       }     }     //豎軸獲勝邏輯     function YWin(a, b) {       let yAllArr = []       let yWinArr = []       if (!flag) {         blackArr.map(item => {           if (item[1] == b) {             yAllArr.push(item[0])           }         })       } else {         whiteArr.map(item => {           if (item[1] == b) {             yAllArr.push(item[0])           }         })       }       yAllArr.sort((a, b) => a - b)       for (let i = 1; i < yAllArr.length; i++) {         if (yAllArr[i] == (+yAllArr[i - 1] + 1)) {           yWinArr.push(yAllArr[i])         } else {           yWinArr = []         }       }       if (yWinArr.length == 4) {         if (!flag) {           setTimeout(function () {             alert('黑棋獲勝!')             location.reload()           }, 100)         } else {           setTimeout(function () {             alert('白棋獲勝!')             location.reload()           }, 100)         }       }     }     //正斜軸獲勝邏輯     function X_YWin(a, b) {       let x_yAllArr = []       let x_yWinArr = []       if (!flag) {         blackArr.map(item => {           if ((item[0] - a) == (item[1] - b)) {             x_yAllArr.push(item[1])           }         })       } else {         whiteArr.map(item => {           if ((item[0] - a) == (item[1] - b)) {             x_yAllArr.push(item[1])           }         })       }       x_yAllArr.sort((a, b) => a - b)       for (let i = 1; i < x_yAllArr.length; i++) {         if (x_yAllArr[i] == (+x_yAllArr[i - 1] + 1)) {           x_yWinArr.push(x_yAllArr[i])         } else {           x_yWinArr = []         }       }       if (x_yWinArr.length == 4) {         if (!flag) {           setTimeout(function () {             alert('黑棋獲勝!')             location.reload()           }, 100)         } else {           setTimeout(function () {             alert('白棋獲勝!')             location.reload()           }, 100)         }       }     }    //反斜軸獲勝邏輯     function Y_XWin(a, b) {       let y_xAllArr = []       let y_xWinArr = []       if (!flag) {         blackArr.map(item => {           if (0 - (item[0] - a) == (item[1] - b)) {             y_xAllArr.push(item[1])           }         })       } else {         whiteArr.map(item => {           if (0 - (item[0] - a) == (item[1] - b)) {             y_xAllArr.push(item[1])           }         })       }       y_xAllArr.sort((a, b) => a - b)       for (let i = 1; i < y_xAllArr.length; i++) {         if (y_xAllArr[i] == (+y_xAllArr[i - 1] + 1)) {           y_xWinArr.push(y_xAllArr[i])         } else {           y_xWinArr = []         }       }       if (y_xWinArr.length == 4) {         if (!flag) {           setTimeout(function () {             alert('黑棋獲勝!')             location.reload()           }, 100)         } else {           setTimeout(function () {             alert('白棋獲勝!')             location.reload()           }, 100)         }       }     }

手把手帶你使用Vue開發(fā)一個(gè)五子棋小游戲!

寫在最后

到這里五子棋的功能就寫完了,Vue的基礎(chǔ)語法比原生的DOM語法要便捷了不少。判斷勝負(fù)的邏輯,我還是照搬了上篇文章,感興趣的可以去看我前面的文章:

《如何使用原生JS,快速寫出一個(gè)五子棋小游戲 》

https://juejin.cn/post/7107172938062757925?share_token=83f7dc0c-3038-4310-b9b5-ba8a7c914af4

手把手帶你使用Vue開發(fā)一個(gè)五子棋小游戲!

【相關(guān)視頻教程推薦:web前端】

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
男人天堂999| 福利视频一二区| av在线播放天堂| www激情五月| 国产亚洲天堂网| 国产爆乳无码一区二区麻豆| 天天干天天爽天天射| 黄色一级片播放| 日韩精品一区二区三区电影| 中文字幕精品一区二区三区在线| 欧美 日韩 国产一区| 久久久性生活视频| 日b视频免费观看| 国产乱子伦精品视频| 国产精品中文久久久久久| 在线观看免费的av| 91极品尤物在线播放国产| 午夜免费精品视频| 亚洲无吗一区二区三区| 欧美伦理片在线看| 最近免费中文字幕中文高清百度| 免费观看日韩毛片| 麻豆传传媒久久久爱| www.xxx亚洲| 九色porny自拍| 精品999在线| 久久成年人网站| 2021狠狠干| 久草视频这里只有精品| 国产亚洲黄色片| 国产日韩一区二区在线| 男人女人黄一级| 在线观看日本www| japanese在线播放| 欧美成人高潮一二区在线看| 高清在线观看免费| 一路向西2在线观看| 欧美爱爱视频网站| 国产精品入口芒果| 麻豆传传媒久久久爱| 亚洲激情在线看| 黄色a级片免费看| 97在线免费公开视频| 爱爱爱爱免费视频| 欧美高清中文字幕| 另类小说第一页| 国产黄色激情视频| 久久九九国产视频| 久久观看最新视频| 丁香婷婷激情网| 精品久久久无码人妻字幂| 激情婷婷综合网| 亚洲av首页在线| 日韩在线xxx| 国产 国语对白 露脸| 91淫黄看大片| 人妻av中文系列| 毛片毛片毛片毛片毛| 国产午夜福利100集发布| 一区二区三区国产好的精华液| 很污的网站在线观看| 在线a免费观看| 成人免费视频久久| 国产精品一区二区免费在线观看| 天天色天天综合网| 日本一本二本在线观看| 欧美 亚洲 视频| 毛片毛片毛片毛| 欧美性猛交久久久乱大交小说| 17c丨国产丨精品视频| 91av视频免费观看| 亚洲精品高清无码视频| 妞干网在线观看视频| ijzzijzzij亚洲大全| 91欧美视频在线| 日韩有码免费视频| 国产精品专区在线| 国产精品videossex国产高清| 手机在线国产视频| 艹b视频在线观看| 国产又大又黄又粗的视频| 日韩五码在线观看| 99色这里只有精品| 亚洲精品久久久久久久蜜桃臀| 久久久精品视频国产| 激情成人在线观看| 久久6免费视频| 日本人69视频| 亚洲一二三不卡| 性久久久久久久久久久久久久| 日韩一级免费片| 又色又爽又黄视频| 免费在线观看污污视频| 超碰在线资源站| 咪咪色在线视频| 亚洲精品天堂成人片av在线播放 | 国产aaa一级片| 青青草原成人网| 日韩精品一区二区三区久久| 欧美精品久久久久久久免费| 亚洲精品无码国产| 日本精品www| 在线观看免费的av| 中国一级黄色录像| www国产免费| 黄色免费福利视频| 91淫黄看大片| 偷拍盗摄高潮叫床对白清晰| 国产日韩第一页| 欧美 丝袜 自拍 制服 另类 | 久久久一本二本三本| 99999精品视频| 一级片视频免费观看| 天天成人综合网| 欧日韩免费视频| 一区二区成人网| 欧美性受xxxx黑人猛交88| 久久久久久久9| 欧美日韩在线中文| 国产日韩欧美久久| www.日本三级| 91人人澡人人爽人人精品| 超碰中文字幕在线观看| 成人黄色大片网站| 成人性生交免费看| 免费视频爱爱太爽了| 久久久久久久久久久久91| 青青草综合在线| 中文字幕国产免费| 欧美黑人经典片免费观看| 丝袜制服一区二区三区| 国产女人18毛片| 一区二区xxx| 能在线观看的av| 日韩亚洲欧美一区二区| 中文久久久久久| 国产极品尤物在线| 黄色小视频大全| 超碰超碰在线观看| 久久精品.com| 久久国产精品网| 成年丰满熟妇午夜免费视频| 欧美婷婷精品激情| av片中文字幕| 欧美日韩黄色一级片| 国产人妻互换一区二区| 一道本视频在线观看| 成人在线免费在线观看| 999久久欧美人妻一区二区| 国内av一区二区| 欧美三级午夜理伦三级富婆| 日韩国产欧美亚洲| 国产免费一区二区视频| aaaaaaaa毛片| 一本二本三本亚洲码| 免费一区二区三区在线观看| 免费黄色特级片| 91看片就是不一样| 日日碰狠狠丁香久燥| 免费在线激情视频| 蜜桃免费在线视频| 亚洲黄色小视频在线观看| 亚洲性生活网站| 污版视频在线观看| 天天久久综合网| 91性高潮久久久久久久| 婷婷激情综合五月天| 欧美日韩久久婷婷| 亚洲黄色网址在线观看| 91网站在线观看免费| 日韩欧美一级在线| 青青青青草视频| 逼特逼视频在线| 男人舔女人下面高潮视频| 一区二区三区国产免费| 欧美在线aaa| 蜜臀av性久久久久蜜臀av| 国产传媒久久久| 红桃av在线播放| 加勒比av中文字幕| 裸体裸乳免费看| 青青草成人免费在线视频| 成年人免费大片| 欧美成人福利在线观看| av磁力番号网| 女人扒开屁股爽桶30分钟| 亚洲综合日韩欧美| 成年人视频大全| 日韩毛片在线免费看| 免费网站在线观看黄| 性高湖久久久久久久久aaaaa| heyzo亚洲| 久久婷婷中文字幕| 欧日韩免费视频| 日韩欧美理论片| 国产 福利 在线| 久久免费视频2| 色婷婷综合久久久久中文字幕 | 黄黄视频在线观看| 爱福利视频一区二区|