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

站長資訊網
最全最豐富的資訊網站

手把手帶你使用Vue開發一個五子棋小游戲!

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

手把手帶你使用Vue開發一個五子棋小游戲!

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

1.繪制游戲區域和游戲元素

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

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

數組生成之后,就可以用v-for方法對Html進行渲染了。第一層循環生成tr標簽,第二層循環生成td標簽。然后將index和index02這兩個參數傳入點擊事件函數中,并且使用vue樣式綁定,將黑棋和白棋這兩種樣式綁定在td中。

 <div id="app">     <table>       <!-- 渲染tr -->       <tr v-for="(item,index) in list">         <!-- 渲染td,綁定點擊事件,并把參數傳遞到事件中 -->         <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開發一個五子棋小游戲!

2.點擊事件

首先用flag變量來判斷黑白棋順序。數組里的默認值都是0,點擊下棋的原理就是改變這個值,上面td的樣式綁定中,如果值變為1,就渲染出bgc1樣式,也就是黑色。值為2就渲染出白色。在這個事件中,數組的值改變后,頁面不會重新渲染,所以需要用this.$set()方法,讓v-for強制更新。因為我們用的是Vue語法,這個事件函數要寫入methods中。

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

3.悔棋功能

悔棋的原理就是將最后一顆棋子的值變為0。如何知道哪顆棋子是最后一顆呢,上面不是聲明了兩個全局數組嗎,數組里的最后一個元素不就是最后一顆棋子了。值改變為0后,要把這個元素從全局數組中刪除,因為這個數組不僅是悔棋的時候用到,后面判斷勝負也會用到,不刪除的話會干擾到判斷勝負?;谄迨录暮瘮低瑯右獙懺趍ethods里面。

        //悔棋事件         withdraw() {           //判斷前面一步下的是黑棋還是白棋           if (!flag) {             //獲取最后一顆棋子的位置             const a = blackArr[blackArr.length - 1][0]             const b = blackArr[blackArr.length - 1][1]             //將最后一刻棋子對應的數組元素的值改為0,并且強制更新數組渲染頁面             this.$set(this.list[a], b, 0)             //把這個棋子從總數組里面刪除,否則會影響到輸贏判斷             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.判斷勝負

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

手把手帶你使用Vue開發一個五子棋小游戲!

  //橫軸獲勝邏輯     function XWin(a, b) {       //當前X軸的所有棋子集合數組       let xAllArr = []       //判斷橫軸勝負邏輯的X軸棋子數組       let xWinArr = []       //判斷下的是黑棋還是白棋       if (!flag) {         blackArr.map(item => {           if (item[0] == a) {             //將當前排的所有棋子加入對應數組             xAllArr.push(item[1])           }         })       } else {         whiteArr.map(item => {           if (item[0] == a) {             xAllArr.push(item[1])           }         })       }       //把橫排總數組排序,方便比較       xAllArr.sort((a, b) => a - b)       for (let i = 1; i < xAllArr.length; i++) {         if (xAllArr[i] == (+xAllArr[i - 1] + 1)) {           //如果相鄰的兩個棋子數量相差1,就將其添加至勝負邏輯數組           xWinArr.push(xAllArr[i])         } else {           //否則得清空           xWinArr = []         }       }       //獲勝條件       if (xWinArr.length == 4) {         //這里要用定時器將彈框變成異步任務,否則第五顆棋子渲染不出來就提示獲勝了         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開發一個五子棋小游戲!

寫在最后

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

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

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

手把手帶你使用Vue開發一個五子棋小游戲!

【相關視頻教程推薦:web前端】

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
99久久久精品视频| 亚洲欧美激情网| www.精品在线| 欧美日韩一道本| 国产黄色激情视频| 亚洲天堂第一区| 日韩视频在线免费播放| 国产又猛又黄的视频| 国模杨依粉嫩蝴蝶150p| 成 年 人 黄 色 大 片大 全| 久久香蕉视频网站| 欧美日韩亚洲国产成人| 中文字幕1234区| 亚洲精品手机在线观看| 欧美精品aaaa| 手机视频在线观看| 九九九在线观看视频| 不卡av免费在线| 亚洲一级片网站| 91看片破解版| 日韩国产精品毛片| 欧美 国产 精品| 亚洲理论电影在线观看| 国产精品12345| 免费观看精品视频| av无码精品一区二区三区| 国产v亚洲v天堂无码久久久| 成人精品视频一区二区| 午夜激情福利在线| 日韩 国产 一区| japanese在线播放| 精品少妇人欧美激情在线观看| 妞干网在线视频观看| 男人日女人逼逼| 一级在线免费视频| 99精品视频国产| 成人在线免费观看视频网站| 男人的天堂狠狠干| 五月婷婷狠狠操| 91蝌蚪视频在线| 国产美女主播在线| 亚洲最大成人在线观看| www.久久com| 免费av手机在线观看| 日韩av一二三四| 国产精品999.| 日本在线xxx| 九九热99视频| 日本wwwcom| 欧美精品久久久久久久久25p| 警花观音坐莲激情销魂小说| 怡红院av亚洲一区二区三区h| 亚洲一级免费观看| 国产资源在线免费观看| 在线免费观看视频黄| 亚洲爆乳无码精品aaa片蜜桃| 黄色国产精品视频| 97超碰免费观看| 看欧美ab黄色大片视频免费| 91视频成人免费| 国产激情在线观看视频| 爱爱爱视频网站| 日本女优爱爱视频| 国产乱人伦精品一区二区三区| 婷婷丁香激情网| www..com日韩| 米仓穗香在线观看| 一级黄色特级片| 干日本少妇首页| 成人毛片100部免费看| 天天综合网久久| 男女曰b免费视频| 全黄性性激高免费视频| 国产高清999| 成人亚洲精品777777大片| 日韩欧美视频网站| 黄色一级片国产| 国产精品12p| 精品国产乱码久久久久久1区二区| 91视频最新入口| 亚洲国产精品成人天堂| av中文字幕av| 亚洲精品中文字幕乱码无线| 青青青国产在线视频| 成年人视频网站免费| 男人天堂成人网| 亚洲三级在线观看视频| 婷婷六月天在线| 一区二区三区 日韩| 欧美丰满熟妇xxxxx| 日本成年人网址| 激情六月丁香婷婷| 北条麻妃在线视频观看| 婷婷五月综合缴情在线视频| 97免费视频观看| 免费在线看黄色片| 美脚丝袜脚交一区二区| 91黄色在线看| 国产美女在线一区| 欧美日本视频在线观看| 69堂免费视频| 亚洲性生活网站| 色综合色综合色综合色综合| 日本成人黄色网| 午夜免费福利视频在线观看| 色播五月综合网| 天天久久综合网| 吴梦梦av在线| 欧美高清中文字幕| 成人免费视频91| 国产成人久久777777| 538在线视频观看| 在线黄色免费观看| 色婷婷一区二区三区在线观看| 欧美日韩视频免费在线观看| 欧美黄网在线观看| 黄色免费视频大全| 亚洲精品午夜在线观看| 日日噜噜噜夜夜爽爽| 日韩av中文字幕第一页| 日本三区在线观看| 中文国产在线观看| 岛国大片在线播放| 日本精品久久久久中文字幕| 日本免费色视频| 五月天激情图片| 日韩中文字幕二区| 亚洲国产欧美91| 日韩欧美国产免费| 91 视频免费观看| 欧美成人高潮一二区在线看| 浓精h攵女乱爱av| 黄黄视频在线观看| 日韩手机在线观看视频| www.桃色.com| 尤物av无码色av无码| 91小视频在线播放| 欧美一级视频在线播放| 激情五月俺来也| 国产资源在线视频| 91大神免费观看| 免费激情视频在线观看| 久久久久久久久影视| 国产裸体舞一区二区三区| 国产日韩欧美大片| 天天色综合社区| 成人免费aaa| 99re6这里有精品热视频| 国产自偷自偷免费一区| 91免费黄视频| 先锋影音男人资源| www.夜夜爽| 色诱视频在线观看| 九九爱精品视频| 久久福利一区二区| 一级黄色片国产| 午夜激情福利在线| 国模无码视频一区二区三区| 一级网站在线观看| 五月婷婷六月丁香激情| 日韩手机在线观看视频| www.99热这里只有精品| 91免费视频黄| 一区二区三区国产好的精华液| 丁香啪啪综合成人亚洲| 热99这里只有精品| 日韩欧美精品免费| 乱熟女高潮一区二区在线| 91香蕉国产线在线观看| 欧美日韩一区二区三区69堂| 国产视频一区二区三区在线播放 | 久久久国产精华液999999| 日韩激情免费视频| 2018国产在线| 免费看毛片的网址| r级无码视频在线观看| 蜜桃视频一区二区在线观看| 日本福利视频导航| 国产a级片免费看| 男女h黄动漫啪啪无遮挡软件| 日本77777| 法国空姐在线观看免费| 99热一区二区三区| 中文字幕日韩精品无码内射| 欧美日韩午夜爽爽| 国产欧美精品aaaaaa片| 大陆av在线播放| 欧美色图另类小说| 亚洲乱码国产一区三区| 少妇性l交大片| 羞羞的视频在线| 色香蕉在线观看| 97免费视频观看| 欧美日韩一道本| 日本va中文字幕| 亚洲天堂伊人网| 日本免费a视频| 日韩黄色片视频| 国产永久免费网站| 欧洲金发美女大战黑人|