日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
手表游戲—黑白翻棋 之 學(xué)習(xí)筆記(前篇)

想了解更多內(nèi)容,請訪問:

和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.

前言

去年我們木棉花組織發(fā)過一篇文章“HarmonyOS手表游戲——黑白翻棋”,本文是我對該文章的一個學(xué)習(xí)筆記,隨著IDE的升級,一些代碼也需要作修改。以下是我的學(xué)習(xí)筆記及部分代碼的修改O(∩_∩)O

源代碼請移步至→原文章地址

概述

正文內(nèi)容只展示部分代碼,完整代碼可以下載附件(附件1是源代碼的代碼更新)。效果圖如下:

正文

1.創(chuàng)建一個空白的工程

DevEco Studio下載安裝成功后,打開DevEco Studio,點擊左上角的File,點擊New,再選擇New Project,選擇Empty Ability(JS),然后點擊Next,給項目命名WatchGame_BW,選擇設(shè)備類型Wearable,最后點擊Finish。

2.界面布局

通過效果圖可見,初始布局分三個部分,由上至下分別是文本框、棋盤(畫布組件)、按鈕;游戲成功的布局有四個部分:文本框、棋盤(畫布組件)、游戲成功界面、按鈕。(完整代碼及解釋可以去看原文章)

這里記幾個小要點:

1.當(dāng)前步數(shù)顯示的是一個動態(tài)的值,不是一個固定的值,這里以動態(tài)變量currentSteps來顯示數(shù)據(jù)

2.游戲成功的文本框是顯示在畫布組件之上的(覆蓋),而不是在畫布組件的下方。該實現(xiàn)可通過添加一個堆疊容器stack,將游戲成功的文本組件放在畫布組件之后

3.“游戲成功”的顯示在初始時不會顯示,所以要設(shè)置屬性show,對應(yīng)設(shè)一個布爾型變量isShow,并令isShow的初始值為假,游戲成功時其值為真,當(dāng)為真時就可以顯示了

 
 
 
 
  1.  
  2.      
  3.         當(dāng)前步數(shù):{{currentSteps}} 
  4.      
  5.      
  6.          
  7.              
  8.                  
  9.                     游戲成功 
  10.                  
  11.             
 
  •      
  •      
  •  

    相應(yīng)的組件大小顏色等屬性設(shè)置在entry>src>main>js>default>pages.index>index.css文件里通過class設(shè)定的名稱來去設(shè)置,代碼如下:

     
     
     
     
    1. .container { 
    2.     flex-direction: column; 
    3.     justify-content: center; 
    4.     align-items: center; 
    5.     width:240px; 
    6.     height:240px; 
    7. .steps { 
    8.     font-size: 10px; 
    9.     text-align:center; 
    10.     width:100px; 
    11.     height:18px; 
    12.     letter-spacing:0px; 
    13.     margin-top:5px; 
    14. .canvas{ 
    15.     width:160px; 
    16.     height:160px; 
    17.     background-color: #BBADA0; 
    18. .bit { 
    19.     width: 75px; 
    20.     height: 15px; 
    21.     background-color: #AD9D8F; 
    22.     font-size: 10px; 
    23.     margin-top: 5px; 
    24.  
    25. .stack{ 
    26.     width: 160px; 
    27.     height: 160px; 
    28.     margin-top: 5px; 
    29.  
    30. .subcontainer{ 
    31.     left: 25px; 
    32.     top: 47.5px; 
    33.     width: 110px; 
    34.     height: 65px; 
    35.     justify-content: center; 
    36.     align-content: center; 
    37.     background-color: #E9C2A6; 
    38.  
    39. .gameover{ 
    40.     font-size: 19px; 
    41.     color:black; 

    代碼更新部分:組件大小的數(shù)據(jù)全部都在原文章源代碼的基礎(chǔ)上減半再作微調(diào),即原文章的數(shù)據(jù)不適用,以上代碼是我調(diào)整修改后的

    3.實現(xiàn)色塊的翻轉(zhuǎn)

    要先在運動手表上生成一個7*7的棋盤,并且點擊棋盤中任一色塊,其上下左右四個色塊也會跟著一起變色(在邊緣的色塊則只會改變其中若干個色塊的顏色)

    原文章的實現(xiàn)方法是給這49個色塊分別添加一個按鈕,并分別添加點擊事件。

    布局方面如上所述,色塊(按鈕)是顯示在棋盤(畫布)之上,而游戲成功界面是顯示在色塊(按鈕)及畫布之上,因此stack里的順序應(yīng)該是canvas、button、gameover;且按鈕的相關(guān)大小間距的數(shù)據(jù)也要如上“代碼更新部分”一樣作修改,代碼(修改的部分)如下:

     
     
     
     
    1. .bitgrid1{ 
    2.     left:2.5px; 
    3.     top:2.5px; 
    4.     width:20px; 
    5.     height:20px; 
    6.     border-color:transparent; 
    7.     background-color:transparent 
    8.  
    9. .bitgrid2{ 
    10.     left:25px; 
    11.     top:2.5px; 
    12.     width:20px; 
    13.     height:20px; 
    14.     border-color:transparent; 
    15.     background-color:transparent 
    16. .bitgrid3{ 
    17.     left:47.5px; 
    18.     top:2.5px; 
    19.     width:20px; 
    20.     height:20px; 
    21.     border-color:transparent; 
    22.     background-color:transparent 
    23. .bitgrid4{ 
    24.     left:70px; 
    25.     top:2.5px; 
    26.     width:20px; 
    27.     height:20px; 
    28.     border-color:transparent; 
    29.     background-color:transparent 
    30.  
    31. .bitgrid5{ 
    32.     left:92.5px; 
    33.     top:2.5px; 
    34.     width:20px; 
    35.     height:20px; 
    36.     border-color:transparent; 
    37.     background-color:transparent 
    38. .bitgrid6{ 
    39.     left:115px; 
    40.     top:2.5px; 
    41.     width:20px; 
    42.     height:20px; 
    43.     border-color:transparent; 
    44.     background-color:transparent 
    45. .bitgrid7{ 
    46.     left:137.5px; 
    47.     top:2.5px; 
    48.     width:20px; 
    49.     height:20px; 
    50.     border-color:transparent; 
    51.     background-color:transparent 
    52. .bitgrid8{ 
    53.     left:2.5px; 
    54.     top:25px; 
    55.     width:20px; 
    56.     height:20px; 
    57.     border-color:transparent; 
    58.     background-color:transparent; 
    59. .bitgrid9{ 
    60.     left:25px; 
    61.     top:25px; 
    62.     width:20px; 
    63.     height:20px; 
    64.     border-color:transparent; 
    65.     background-color:transparent; 
    66. .bitgrid10{ 
    67.     left:47.5px; 
    68.     top:25px; 
    69.     width:20px; 
    70.     height:20px; 
    71.     border-color:transparent; 
    72.     background-color:transparent; 
    73. .bitgrid11{ 
    74.     left:70px; 
    75.     top:25px; 
    76.     width:20px; 
    77.     height:20px; 
    78.     border-color:transparent; 
    79.     background-color:transparent; 
    80.  
    81. .bitgrid12{ 
    82.     left:92.5px; 
    83.     top:25px; 
    84.     width:20px; 
    85.     height:20px; 
    86.     border-color:transparent; 
    87.     background-color:transparent; 
    88. .bitgrid13{ 
    89.     left:115px; 
    90.     top:25px; 
    91.     width:20px; 
    92.     height:20px; 
    93.     border-color:transparent; 
    94.     background-color:transparent; 
    95. .bitgrid14{ 
    96.     left:137.5px; 
    97.     top:25px; 
    98.     width:20px; 
    99.     height:20px; 
    100.     border-color:transparent; 
    101.     background-color:transparent; 
    102. .bitgrid15{ 
    103.     left:2.5px; 
    104.     top:47.5px; 
    105.     width:20px; 
    106.     height:20px; 
    107.     border-color:transparent; 
    108.     background-color:transparent; 
    109. .bitgrid16{ 
    110.     left:25px; 
    111.     top:47.5px; 
    112.     width:20px; 
    113.     height:20px; 
    114.     border-color:transparent; 
    115.     background-color:transparent; 
    116. .bitgrid17{ 
    117.     left:47.5px; 
    118.     top:47.5px; 
    119.     width:20px; 
    120.     height:20px; 
    121.     border-color:transparent; 
    122.     background-color:transparent; 
    123. .bitgrid18{ 
    124.     left:70px; 
    125.     top:47.5px; 
    126.     width:20px; 
    127.     height:20px; 
    128.     border-color:transparent; 
    129.     background-color:transparent; 
    130.  
    131. .bitgrid19{ 
    132.     left:92.5px; 
    133.     top:47.5px; 
    134.     width:20px; 
    135.     height:20px; 
    136.     border-color:transparent; 
    137.     background-color:transparent; 
    138. .bitgrid20{ 
    139.     left:115px; 
    140.     top:47.5px; 
    141.     width:20px; 
    142.     height:20px; 
    143.     border-color:transparent; 
    144.     background-color:transparent; 
    145. .bitgrid21{ 
    146.     left:137.5px; 
    147.     top:47.5px; 
    148.     width:20px; 
    149.     height:20px; 
    150.     border-color:transparent; 
    151.     background-color:transparent; 
    152. .bitgrid22{ 
    153.     left:2.5px; 
    154.     top:70px; 
    155.     width:20px; 
    156.     height:20px; 
    157.     border-color:transparent; 
    158.     background-color:transparent; 
    159. .bitgrid23{ 
    160.     left:25px; 
    161.     top:70px; 
    162.     width:20px; 
    163.     height:20px; 
    164.     border-color:transparent; 
    165.     background-color:transparent; 
    166. .bitgrid24{ 
    167.     left:47.5px; 
    168.     top:70px; 
    169.     width:20px; 
    170.     height:20px; 
    171.     border-color:transparent; 
    172.     background-color:transparent; 
    173. .bitgrid25{ 
    174.     left:70px; 
    175.     top:70px; 
    176.     width:20px; 
    177.     height:20px; 
    178.     border-color:transparent; 
    179.     background-color:transparent; 
    180.  
    181. .bitgrid26{ 
    182.     left:92.5px; 
    183.     top:70px; 
    184.     width:20px; 
    185.     height:20px; 
    186.     border-color:transparent; 
    187.     background-color:transparent; 
    188. .bitgrid27{ 
    189.     left:115px; 
    190.     top:70px; 
    191.     width:20px; 
    192.     height:20px; 
    193.     border-color:transparent; 
    194.     background-color:transparent; 
    195. .bitgrid28{ 
    196.     left:137.5px; 
    197.     top:70px; 
    198.     width:20px; 
    199.     height:20px; 
    200.     border-color:transparent; 
    201.     background-color:transparent; 
    202. .bitgrid29{ 
    203.     left:2.5px; 
    204.     top: 92.5px; 
    205.     width:20px; 
    206.     height:20px; 
    207.     border-color:transparent; 
    208.     background-color:transparent; 
    209. .bitgrid30{ 
    210.     left:25px; 
    211.     top:92.5px; 
    212.     width:20px; 
    213.     height:20px; 
    214.     border-color:transparent; 
    215.     background-color:transparent; 
    216. .bitgrid31{ 
    217.     left:47.5px; 
    218.     top:92.5px; 
    219.     width:20px; 
    220.     height:20px; 
    221.     border-color:transparent; 
    222.     background-color:transparent; 
    223. .bitgrid32{ 
    224.     left:70px; 
    225.     top:92.5px; 
    226.     width:20px; 
    227.     height:20px; 
    228.     border-color:transparent; 
    229.     background-color:transparent; 
    230.  
    231. .bitgrid33{ 
    232.     left:92.5px; 
    233.     top:92.5px; 
    234.     width:20px; 
    235.     height:20px; 
    236.     border-color:transparent; 
    237.     background-color:transparent; 
    238. .bitgrid34{ 
    239.     left:115px; 
    240.     top:92.5px; 
    241.     width:20px; 
    242.     height:20px; 
    243.     border-color:transparent; 
    244.     background-color:transparent; 
    245. .bitgrid35{ 
    246.     left:137.5px; 
    247.     top:92.5px; 
    248.     width:20px; 
    249.     height:20px; 
    250.     border-color:transparent; 
    251.     background-color:transparent; 
    252. .bitgrid36{ 
    253.     left:2.5px; 
    254.     top:115px; 
    255.     width:20px; 
    256.     height:20px; 
    257.     border-color:transparent; 
    258.     background-color:transparent; 
    259. .bitgrid37{ 
    260.     left:25px; 
    261.     top:115px; 
    262.     width:20px; 
    263.     height:20px; 
    264.     border-color:transparent; 
    265.     background-color:transparent; 
    266. .bitgrid38{ 
    267.     left:47.5px; 
    268.     top:115px; 
    269.     width:20px; 
    270.     height:20px; 
    271.     border-color:transparent; 
    272.     background-color:transparent; 
    273. .bitgrid39{ 
    274.     left:70px; 
    275.     top:115px; 
    276.     width:20px; 
    277.     height:20px; 
    278.     border-color:transparent; 
    279.     background-color:transparent; 
    280.  
    281. .bitgrid40{ 
    282.     left:92.5px; 
    283.     top:115px; 
    284.     width:20px; 
    285.     height:20px; 
    286.     border-color:transparent; 
    287.     background-color:transparent; 
    288. .bitgrid41{ 
    289.     left:115px; 
    290.     top:115px; 
    291.     width:20px; 
    292.     height:20px; 
    293.     border-color:transparent; 
    294.     background-color:transparent; 
    295. .bitgrid42{ 
    296.     left:137.5px; 
    297.     top:115px; 
    298.     width:20px; 
    299.     height:20px; 
    300.     border-color:transparent; 
    301.     background-color:transparent; 
    302. .bitgrid43{ 
    303.     left:2.5px; 
    304.     top:137.5px; 
    305.     width:20px; 
    306.     height:20px; 
    307.     border-color:transparent; 
    308.     background-color:transparent; 
    309. .bitgrid44{ 
    310.     left:25px; 
    311.     top:137.5px; 
    312.     width:20px; 
    313.     height:20px; 
    314.     border-color:transparent; 
    315.     background-color:transparent; 
    316. .bitgrid45{ 
    317.     left:47.5px; 
    318.     top:137.5px; 
    319.     width:20px; 
    320.     height:20px; 
    321.     border-color:transparent; 
    322.     background-color:transparent; 
    323. .bitgrid46{ 
    324.     left:70px; 
    325.     top:137.5px; 
    326.     width:20px; 
    327.     height:20px; 
    328.     border-color:transparent; 
    329.     background-color:transparent; 
    330.  
    331. .bitgrid47{ 
    332.     left:92.5px; 
    333.     top:137.5px; 
    334.     width:20px; 
    335.     height:20px; 
    336.     border-color:transparent; 
    337.     background-color:transparent; 
    338. .bitgrid48{ 
    339.     left:115px; 
    340.     top:137.5px; 
    341.     width:20px; 
    342.     height:20px; 
    343.     border-color:transparent; 
    344.     background-color:transparent; 
    345. .bitgrid49{ 
    346.     left:137.5px; 
    347.     top:137.5px; 
    348.     width:20px; 
    349.     height:20px; 
    350.     border-color:transparent; 
    351.     background-color:transparent; 

    然后在index.js文件里用一個7*7的數(shù)組表示色塊,其中0表示白色,1代表黑色,這樣我們就能定義一個用0和1表示鍵,顏色表示值的字典COLORS,并且定義全局常量邊長SIDELEN為20,間距MARGIN為2.5,定義一個全局變量的二維數(shù)組grids,其中的值全為0

     
     
     
     
    1. var grids=[[0, 0, 0, 0, 0, 0, 0], 
    2.            [0, 0, 0, 0, 0, 0, 0], 
    3.            [0, 0, 0, 0, 0, 0, 0], 
    4.            [0, 0, 0, 0, 0, 0, 0], 
    5.            [0, 0, 0, 0, 0, 0, 0], 
    6.            [0, 0, 0, 0, 0, 0, 0], 
    7.            [0, 0, 0, 0, 0, 0, 0], 
    8.            [0, 0, 0, 0, 0, 0, 0]]; 
    9.  
    10. const SIDELEN=20; 
    11. const MARGIN=2.5; 
    12. const COLORS = { 
    13.     "0": "#FFFFFF", 
    14.     "1": "#000000" 

    設(shè)置色塊的點擊事件

    要點:點擊時對應(yīng)獲取該方塊的位置(例如該方塊時第3行第4個,則坐標(biāo)為(2,3)),并將該坐標(biāo)傳給函數(shù)changeOneGrids,去判斷該方塊上下左右是否有方塊,并調(diào)用函數(shù)change變換其數(shù)組的值——若0則變?yōu)?,若1則變?yōu)?

     
     
     
     
    1. change(x,y){ 
    2.         if(this.isShow==false){ 
    3.             if(grids[x][y] == 0){ 
    4.                 grids[x][y] = 1; 
    5.             }else{ 
    6.                 grids[x][y] = 0; 
    7.             } 
    8.         } 
    9.     }, 
    10. changeOneGrids(x,y){ 
    11.         if(x>-1 && y>-1 && x<7 && y<7){ 
    12.             this.change(x,y); 
    13.         } 
    14.         if(x+1>-1 && y>-1 && x+1<7 && y<7){ 
    15.             this.change(x+1,y); 
    16.         } 
    17.         if(x-1>-1 && y>-1 && x-1<7 && y<7){ 
    18.             this.change(x-1,y); 
    19.         } 
    20.         if(x>-1 && y+1>-1 && x<7 && y+1<7){ 
    21.             this.change(x,y+1); 
    22.         } 
    23.         if(x>-1 && y-1>-1 && x<7 && y-1<7){ 
    24.             this.change(x,y-1); 
    25.         } 

    最后調(diào)用函數(shù)drawgrids去“上色”

     
     
     
     
    1. drawGrids(){ 
    2.         context=this.$refs.canvas.getContext('2d'); 
    3.         for (let row = 0 ;row < 7 ;row++){ 
    4.             for (let column = 0; column < 7;column++){ 
    5.                 let gridStr = grids[row][column].toString(); 
    6.  
    7.                 context.fillStyle = COLORS[gridStr]; 
    8.                 let leftTopX = column * (MARGIN + SIDELEN) + MARGIN; 
    9.                 let leftTopY = row * (MARGIN + SIDELEN) + MARGIN; 
    10.                 context.fillRect(leftTopX, leftTopY, SIDELEN, SIDELEN); 
    11.             } 
    12.         } 
    13.     }, 

    4.實現(xiàn)題目的隨機生成

    隨機生成一個色塊被打亂的7x7的棋盤,這里是在原來全白的棋盤上隨機生成20個黑色塊。

    要點:把二維數(shù)組的下標(biāo)放進一個列表中,Math.random()函數(shù)是隨機[0,1)內(nèi)的小數(shù),Math.floor(x)為得出小于或等于x的最大整數(shù),每次隨機生成一個數(shù)后,讀取剛才的列表對應(yīng)的下標(biāo),即獲得一個在7x7內(nèi)的隨機的坐標(biāo),調(diào)用函數(shù)changeOneGrids(x,y)

     
     
     
     
    1. initGrids(){ 
    2.         let array = []; 
    3.         for (let row = 0; row < 7; row++) { 
    4.             for (let column = 0; column < 7; column++) { 
    5.                 if (grids[row][column] == 0) { 
    6.                     array.push([row, column]) 
    7.                 } 
    8.             } 
    9.         } 
    10.         for (let i = 0; i < 20; i++){ 
    11.             let randomIndex = Math.floor(Math.random() * array.length); 
    12.             let row = array[randomIndex][0]; 
    13.             let column = array[randomIndex][1]; 
    14.             this.changeOneGrids(row,column); 
    15.         } 
    16.     } 

    5.游戲結(jié)束

    當(dāng)該7x7數(shù)組的值全為1時游戲成功,此時isShow的值為真,色塊的點擊事件就不起效(change函數(shù)里加個對isShow的真假判斷)

     
     
     
     
    1. gameover(){ 
    2.         for (let row = 0 ;row < 7 ;row++){ 
    3.             for (let column = 0; column < 7;column++){ 
    4.                 if (grids[row][column]==1){ 
    5.                     return false; 
    6.                 } 
    7.             } 
    8.         } 
    9.         return true; 
    10.     } 

    然后在changeOneGrids函數(shù)里調(diào)用gameover函數(shù);同時,隨著每一次點擊,都會調(diào)用changeOneGrids函數(shù),所以步數(shù)的增加可以直接在每次changeOneGrids函數(shù)被調(diào)用時累加

     
     
     
     
    1. if(this.isShow==false){ 
    2.            this.currentSteps+=1;; 
    3.        } 
    4.        if(this.gameover()){ 
    5.            this.isShow=true; 
    6.        } 

    6.重新開始

    最后編寫重新按鈕對應(yīng)的函數(shù)restartGame(),作用是是二維數(shù)組、isShow和當(dāng)前步數(shù)全部置為初始化界面

     
     
     
     
    1. restartGame(){ 
    2.      this.initGrids(); 
    3.      this.drawGrids(); 
    4.      this.isShow = false; 
    5.      this.currentSteps = 0; 
    6.  } 

    修改的說明

    1.畫布組件的getContext不支持在onInit和onReady中進行調(diào)用,因此我改在drawGrids中調(diào)用,然后再在onShow中調(diào)用drawGrids

    2.隨機生成打亂的色塊時,會調(diào)用changeOneGrids函數(shù),此時會增加步數(shù)20

     
     
     
     
    1. data: { 
    2.         currentSteps: -20, 
    3.     }? 

    3.同1,色塊的隨機生成函數(shù)initGrids也放在onShow中調(diào)用

    結(jié)語

    以上是我的初步學(xué)習(xí)筆記啦,我修改過的源代碼會上傳到附件,更多詳細的注解步驟可去看原文章。該學(xué)習(xí)筆記還有后續(xù)哦,后續(xù)是對其中一些功能實現(xiàn)采用另一種算法來實現(xiàn),代碼會在該篇的基礎(chǔ)上再作修改,并且還會對相關(guān)知識注解作一個小分享,敬請期待(●ˇ?ˇ●)

    文章相關(guān)附件可以點擊下面的原文鏈接前往下載

    https://harmonyos./resource/1222

    想了解更多內(nèi)容,請訪問:

    和華為官方合作共建的鴻蒙技術(shù)社區(qū)

    https://harmonyos.


    網(wǎng)頁標(biāo)題:手表游戲—黑白翻棋 之 學(xué)習(xí)筆記(前篇)
    文章地址:http://www.5511xx.com/article/djighje.html