精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

2020征文-手機深鴻會深大小組:鴻蒙HarmonyOS手機游戲之數字華容道

系統 OpenHarmony
12月16號HarmonyOS2.0手機開發者Beta版已經發布了,作為“1+8+N”戰略的重要入口和生態核心,怎么能少得了手機應用開發呢,今天將由深鴻會深大學習小組從零基礎開發第一個HarmonyOS手機小游戲——數字華容道(界面略丑陋,大佬別噴)。

前言

12月16號HarmonyOS2.0手機開發者Beta版已經發布了,作為“1+8+N”戰略的重要入口和生態核心,怎么能少得了手機應用開發呢,今天將由深鴻會深大學習小組從零基礎開發第一個HarmonyOS手機小游戲——數字華容道(界面略丑陋,大佬別噴),此前已經在運動手表上成功開發了:HarmonyOS運動手表游戲合并、HarmonyOS手表游戲——數字華容道,同樣是深鴻會深大小組學習完HarmonyOS后自行開發的一個鴻蒙demo,詳細講述了數字華容道在鴻蒙手機上開發思路。深鴻會深大學習小組是一群熱衷于學習鴻蒙相關知識和開發鴻蒙相關應用的開發者們,我們的學習項目為:荔園Harmony、Awesome-HarmonyOS_木棉花,同時也歡迎與各位感興趣的讀者一起學習HarmonyOS開發,相互交流、共同進步。

概述

本個demo將從零基礎開始完成鴻蒙小游戲APP在手機上的編譯在項目中我們所使用到的軟件為DevEco Studio,下載地址為:DevEco Studio下載、DevEco Studio安裝教程,在項目中我們要實現的內容為數字華容道APP的開發。

1. 打開引用首先為數字華容道的初始界面,點擊開始游戲即會切換到數字華容道的游戲界面。


2. 進入數字華容道的游戲界面顯示4*4的方陣,方陣中分布有隨意打亂的1至15的數字和一個空白方格,方陣下方顯示一個“重新開始”的按鈕和一個“返回”按鈕,點擊“重新開始”按鈕即會重新生成隨意打亂的1至15的數字和一個空白方格的方陣,點擊“返回”按鈕即會切換到數字華容道的初始界面,最下方有四個指示不同方向箭頭的按鈕,點擊任一按鈕或向上、下、左、右任一方向滑動,空白方格周圍對應位置的方格便會隨之向對應的方向移動一格。

 

3. 經過若干次滑動或點擊后,當所有的數字按順序排列后,則會彈出游戲成功的界面,再滑動或點擊也不會有任何變化。 


正文

創建項目

DevEco Studio下載安裝成功后,打開DevEco Studio,點擊左上角的File,點擊New,再選擇New Project,選擇Phone選項,選擇默認的模板(java版),然后選擇保存路徑,將文件命名為MyPhoneApplication(文件名不能出現中文或者特殊字符,否則將無法成功創建項目文件),最后點擊Finish。



實現初始界面布局

首先,我們要先實現數字華容道的初始界面,點擊開始游戲即會切換到另一個空白的界面。


1. 先在entry>src>main>config.json文件中最下方"launchType": "standard"的后面添加以下代碼,并且將上方的“label”:“MyPhoneApplication”修改成"label": "數字華容道",這樣就實現去掉應用上方的標題欄和將應用名稱改為數字華容道了

config.json最下面部分代碼:

  1. "orientation""unspecified"
  2.  
  3. "name""com.example.myphoneapplication.MainAbility"
  4.  
  5. "icon""$media:icon"
  6.  
  7. "description""$string:mainability_description"
  8.  
  9. "label""數字華容道"
  10.  
  11. "type""page"
  12.  
  13. "launchType""standard"
  14.  
  15. "metaData": { 
  16.  
  17. "customizeData": [ 
  18.  
  19.  
  20. "name""hwc-theme"
  21.  
  22. "value""androidhwext:style/Theme.Emui.Light.NoTitleBar"
  23.  
  24. "extra""" 
  25.  
  26.  
  27.  

 2. 先將我們事先準備好的圖片復制粘貼到entry>src>main>resources>base>media文件夾中(ctrl+c、ctrl+v復制粘貼),并且命名為game,點擊OK。


在entry>src>main>resources>base>layout>ability_main.xml中添加布局,先將事先存在的Text組件刪去,添加Image圖片組件,引入我們剛才復制粘貼的圖片,再添加一個Button按鈕組件,加入唯一標識符id并配置好其他相應的屬性。

  1. xmlns:ohos="http://schemas.huawei.com/res/ohos" 
  2.  
  3. ohos:height="match_parent" 
  4.  
  5. ohos:width="match_parent" 
  6.  
  7. ohos:orientation="vertical"
  8.  
  9.  
  10. ohos:height="match_parent" 
  11.  
  12. ohos:width="match_parent" 
  13.  
  14. ohos:image_src="$media:game" 
  15.  
  16. ohos:layout_alignment="center" 
  17.  
  18. /> 
  19.  
  20.  
  21. ohos:id="$+id:button_game" 
  22.  
  23. ohos:height="150" 
  24.  
  25. ohos:width="515" 
  26.  
  27. ohos:text_alignment="center" 
  28.  
  29. ohos:top_margin="-810" 
  30.  
  31. ohos:left_margin="250" 
  32.  
  33. /> 

 3. 在entry>src>main>java>com.example.myphoneapplication>slice中右鍵選擇New>Java Class增加一個空白的類以用來后面編寫數字華容道的游戲界面,并且命名為SecondAbilitySlice。


將entry>src>main>java>com.example.myphoneapplication>slice>SecondAbilitySlice中的代碼修改成如下:

  1. package com.example.myphoneapplication.slice; 
  2.  
  3. import com.example.myphoneapplication.ResourceTable; 
  4.  
  5. import ohos.aafwk.ability.AbilitySlice; 
  6.  
  7. import ohos.aafwk.content.Intent; 
  8.  
  9. public class SecondAbilitySlice extends AbilitySlice { 
  10.  
  11. public void onStart(Intent intent) { 
  12.  
  13. super.onStart(intent); 
  14.  
  15.  
  16. @Override 
  17.  
  18. public void onActive() { 
  19.  
  20. super.onActive(); 
  21.  
  22.  
  23. @Override 
  24.  
  25. public void onForeground(Intent intent) { 
  26.  
  27. super.onForeground(intent); 
  28.  
  29.  

 4. 在entry>src>main>java>com.example.myphoneapplication>slice>MainAbilitySlice中的onStart函數中添加一個按鈕指向我們(2)中添加的按鈕,按鈕添加一個響應點擊事件的函數,用parsent函數跳轉到SecondAbilitySlice。

  1. package com.example.myphoneapplication.slice; 
  2.  
  3. import com.example.myphoneapplication.ResourceTable; 
  4.  
  5. import ohos.aafwk.content.Intent; 
  6.  
  7. import ohos.agp.components.Button; 
  8.  
  9. import ohos.agp.components.Component; 
  10.  
  11. public class MainAbilitySlice extends ohos.aafwk.ability.AbilitySlice { 
  12.  
  13. @Override 
  14.  
  15. public void onStart(Intent intent) { 
  16.  
  17. super.onStart(intent); 
  18.  
  19. super.setUIContent(ResourceTable.Layout_ability_main); 
  20.  
  21. Button button = (Button) findComponentById(ResourceTable.Id_button_game); 
  22.  
  23. button.setClickedListener(new Component.ClickedListener() { 
  24.  
  25. @Override 
  26.  
  27. public void onClick(Component component) { 
  28.  
  29. present(new SecondAbilitySlice(),new Intent()); 
  30.  
  31.  
  32. }); 
  33.  
  34.  
  35. @Override 
  36.  
  37. public void onActive() { 
  38.  
  39. super.onActive(); 
  40.  
  41.  
  42. @Override 
  43.  
  44. public void onForeground(Intent intent) { 
  45.  
  46. super.onForeground(intent); 
  47.  
  48.  

 至此,這一部分就完成了。

實現數字的隨機打亂

然后我們要在數字華容道的游戲界面生成隨意打亂的1至15的數字和一個空白方格的方陣。


在entry>src>main>java>com.example.myphoneapplication>slice>SecondAbilitySlice編寫代碼。

先定義個一個位置布局layout和一個二維數組grids,創建函數initializeinitialize()分別對其初始化,在onStart函數中調用函數initializeinitialize()。

  1. private float starX, starY, distanceX, distanceY; 
  2.  
  3. private DirectionalLayout layout; 
  4.  
  5. private int[][] grids; 
  6.  
  7. public void onStart(Intent intent) { 
  8.  
  9. super.onStart(intent); 
  10.  
  11. initialize(); 
  12.  
  13.  
  14. public void initialize(){ 
  15.  
  16. layout = new DirectionalLayout(this); 
  17.  
  18. grids = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8,}, {9, 10, 11, 12}, {13, 14, 15, 0}}; 
  19.  

 然后定義函數drawGrids(int[][] grids)用于繪制4*4方陣和其二維數組對應的數字。

  1. public void drawGrids(int[][] grids){ 
  2.  
  3. layout.setLayoutConfig((new ComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,ComponentContainer.LayoutConfig.MATCH_PARENT))); 
  4.  
  5. Component.DrawTask task=new Component.DrawTask() { 
  6.  
  7. public void onDraw(Component component, Canvas canvas) { 
  8.  
  9. Paint mPaint = new Paint(); 
  10.  
  11. mPaint.setColor(Color.GRAY); 
  12.  
  13. RectFloat rect=new RectFloat(2,230,1078,1306); 
  14.  
  15. canvas.drawRect(rect,mPaint); 
  16.  
  17. for(int row = 0; row < 4; row++){ 
  18.  
  19. for(int column = 0; column < 4; column++){ 
  20.  
  21. mPaint.setColor(Color.CYAN); 
  22.  
  23. RectFloat rectFloat=new RectFloat(22+column*262,250+row*262,272+column*262,500+row*262); 
  24.  
  25. canvas.drawRect(rectFloat,mPaint); 
  26.  
  27. mPaint.setColor(Color.YELLOW); 
  28.  
  29. mPaint.setTextSize(125); 
  30.  
  31. if(grids[row][column]!=0){ 
  32.  
  33. if(grids[row][column]<10){ 
  34.  
  35. canvas.drawText(mPaint, String.valueOf(grids[row][column]),105+column*262,425+row*262); 
  36.  
  37.  
  38. else
  39.  
  40. canvas.drawText(mPaint, String.valueOf(grids[row][column]),65+column*262,425+row*262); 
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47. }; 
  48.  
  49. layout.addDrawTask(task); 
  50.  
  51. setUIContent(layout); 
  52.  

 再定義函數changeGrids(int[][] grids,int direction),每次接收一個方向,2表示上移,-1表示左移,1表示右移,-2表示下移,找出空白方格所在位置對應的二維數組下標,對應的方格和空白方格對應的二維數組的數值對調。

  1. public void changeGrids(int[][] grids,int direction){ 
  2.  
  3. int row_0 = 3; 
  4.  
  5. int column_0 = 3; 
  6.  
  7. int temp
  8.  
  9. for(int row = 0; row < 4; row++) { 
  10.  
  11. for (int column = 0; column < 4; column++) { 
  12.  
  13. if(grids[row][column] == 0){ 
  14.  
  15. row_0 = row; 
  16.  
  17. column_0 = column
  18.  
  19.  
  20.  
  21.  
  22. if(direction == -1 && (column_0 + 1) <= 3){ 
  23.  
  24. temp = grids[row_0][column_0 + 1]; 
  25.  
  26. grids[row_0][column_0 + 1] = grids[row_0][column_0]; 
  27.  
  28. grids[row_0][column_0] = temp
  29.  
  30. }else if (direction == 1 && (column_0 - 1) >= 0) { 
  31.  
  32. temp = grids[row_0][column_0 - 1]; 
  33.  
  34. grids[row_0][column_0 - 1] = grids[row_0][column_0]; 
  35.  
  36. grids[row_0][column_0] = temp
  37.  
  38. else if (direction == 2 && (row_0 + 1) <= 3) { 
  39.  
  40. temp = grids[row_0 + 1][column_0]; 
  41.  
  42. grids[row_0 + 1][column_0] = grids[row_0][column_0]; 
  43.  
  44. grids[row_0][column_0] = temp
  45.  
  46. else if (direction == -2 && (row_0 - 1) >= 0) { 
  47.  
  48. temp = grids[row_0 - 1][column_0]; 
  49.  
  50. grids[row_0 - 1][column_0] = grids[row_0][column_0]; 
  51.  
  52. grids[row_0][column_0] = temp
  53.  
  54.  

 定義函數createGrids(int[][] grids)用于隨機生成一個表示方向的數字,循環調用函數changeGrids(grids,direction)用于隨機打亂二維數組對應的數字。

  1. public void createGrids(int[][] grids){ 
  2.  
  3. int[] array = {-1,-2,1,2}; 
  4.  
  5. for(int i = 0; i < 100; i++){ 
  6.  
  7. int random = (int)Math.floor(Math.random()*4); 
  8.  
  9. int direction = array[random]; 
  10.  
  11. changeGrids(grids,direction); 
  12.  
  13.  

 最后在initialize()函數中調用createGrids(grids)函數和drawGrids(grids)函數。

  1. public void initialize(){ 
  2.  
  3. layout = new DirectionalLayout(this); 
  4.  
  5. grids = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8,}, {9, 10, 11, 12}, {13, 14, 15, 0}}; 
  6.  
  7. createGrids(grids); 
  8.  
  9. drawGrids(grids); 
  10.  

 至此,這一部分完成了。

實現滑動或點擊調換數字

添加“重新開始”和“返回”按鈕,在最下方添加四個指示不同方向箭頭的按鈕,點擊任一按鈕或向上、下、左、右任一方向滑動,空白方格周圍對應位置的方格便會隨之向對應的方向移動一格。


在entry>src>main>java>com.example.myphoneapplication>slice>SecondAbilitySlice編寫代碼。

先定義一個函數drawButton()用于繪制所有的按鈕,四個指示不同方向箭頭的按鈕分別添加四個響應點擊事件的函數,分別調用對應的changeGrids(grids,direction)函數實現空白方格周圍對應位置的方格便會隨之向對應的方向移動一格,并調用drawGrids(grids)函數用于繪制新的方陣。

  1. public void drawButton(){ 
  2.  
  3. Button button=new Button(this); 
  4.  
  5. button.setText("重新開始"); 
  6.  
  7. button.setTextSize(100); 
  8.  
  9. button.setTextAlignment(TextAlignment.CENTER); 
  10.  
  11. button.setTextColor(Color.WHITE); 
  12.  
  13. button.setMarginTop(1400); 
  14.  
  15. button.setMarginLeft(80); 
  16.  
  17. button.setPadding(20,20,20,20); 
  18.  
  19. ShapeElement background = new ShapeElement(); 
  20.  
  21. background.setRgbColor(new RgbColor(174, 158, 143)); 
  22.  
  23. background.setCornerRadius(100); 
  24.  
  25. button.setBackground(background); 
  26.  
  27. layout.addComponent(button); 
  28.  
  29. Button button0=new Button(this); 
  30.  
  31. button0.setText("返回"); 
  32.  
  33. button0.setTextSize(100); 
  34.  
  35. button0.setTextAlignment(TextAlignment.CENTER); 
  36.  
  37. button0.setTextColor(Color.WHITE); 
  38.  
  39. button0.setMarginTop(-170); 
  40.  
  41. button0.setMarginLeft(680); 
  42.  
  43. button0.setPadding(20,20,20,20); 
  44.  
  45. button0.setBackground(background); 
  46.  
  47. layout.addComponent(button0); 
  48.  
  49. ShapeElement background0 = new ShapeElement(); 
  50.  
  51. background0.setRgbColor(new RgbColor(174, 158, 143)); 
  52.  
  53. background0.setCornerRadius(100); 
  54.  
  55. Button button1=new Button(this); 
  56.  
  57. button1.setText("↑"); 
  58.  
  59. button1.setTextAlignment(TextAlignment.CENTER); 
  60.  
  61. button1.setTextColor(Color.WHITE); 
  62.  
  63. button1.setTextSize(100); 
  64.  
  65. button1.setMarginLeft(500); 
  66.  
  67. button1.setMarginTop(70); 
  68.  
  69. button1.setPadding(10,0,10,0); 
  70.  
  71. button1.setBackground(background0); 
  72.  
  73. button1.setClickedListener(new Component.ClickedListener() { 
  74.  
  75. @Override 
  76.  
  77. public void onClick(Component component) { 
  78.  
  79. changeGrids(grids,2); 
  80.  
  81.  
  82. }); 
  83.  
  84. layout.addComponent(button1); 
  85.  
  86. Button button2=new Button(this); 
  87.  
  88. button2.setText("←"); 
  89.  
  90. button2.setTextAlignment(TextAlignment.CENTER); 
  91.  
  92. button2.setTextColor(Color.WHITE); 
  93.  
  94. button2.setTextSize(100); 
  95.  
  96. button2.setMarginTop(10); 
  97.  
  98. button2.setMarginLeft(400); 
  99.  
  100. button2.setPadding(10,0,10,0); 
  101.  
  102. button2.setBackground(background0); 
  103.  
  104. button2.setClickedListener(new Component.ClickedListener() { 
  105.  
  106. @Override 
  107.  
  108. public void onClick(Component component) { 
  109.  
  110. changeGrids(grids,-1); 
  111.  
  112.  
  113. }); 
  114.  
  115. layout.addComponent(button2); 
  116.  
  117. Button button3=new Button(this); 
  118.  
  119. button3.setText("→"); 
  120.  
  121. button3.setTextAlignment(TextAlignment.CENTER); 
  122.  
  123. button3.setTextColor(Color.WHITE); 
  124.  
  125. button3.setTextSize(100); 
  126.  
  127. button3.setMarginLeft(600); 
  128.  
  129. button3.setMarginTop(-130); 
  130.  
  131. button3.setPadding(10,0,10,0); 
  132.  
  133. button3.setBackground(background0); 
  134.  
  135. button3.setClickedListener(new Component.ClickedListener() { 
  136.  
  137. @Override 
  138.  
  139. public void onClick(Component component) { 
  140.  
  141. changeGrids(grids,1); 
  142.  
  143.  
  144. }); 
  145.  
  146. layout.addComponent(button3); 
  147.  
  148. Button button4=new Button(this); 
  149.  
  150. button4.setText("↓"); 
  151.  
  152. button4.setTextAlignment(TextAlignment.CENTER); 
  153.  
  154. button4.setTextColor(Color.WHITE); 
  155.  
  156. button4.setTextSize(100); 
  157.  
  158. button4.setMarginLeft(500); 
  159.  
  160. button4.setMarginTop(10); 
  161.  
  162. button4.setPadding(10,0,10,0); 
  163.  
  164. button4.setBackground(background0); 
  165.  
  166. button4.setClickedListener(new Component.ClickedListener() { 
  167.  
  168. @Override 
  169.  
  170. public void onClick(Component component) { 
  171.  
  172. changeGrids(grids,-2); 
  173.  
  174.  
  175. }); 
  176.  
  177. layout.addComponent(button4); 
  178.  
  179. drawGrids(grids); 
  180.  

 然后添加一個函數slideGrids()為布局layout添加一個滑動事件,并獲取滑動開始與結束的坐標,并計算出大致的滑動方向,分別調用對應的changeGrids(grids,direction)函數實現空白方格周圍對應位置的方格便會隨之向對應的方向移動一格,并調用drawGrids(grids)函數用于繪制新的方陣,并在開頭添加相應的變量。

  1. private float starX, starY, distanceX, distanceY; 
  2.  
  3. public void slideGrids(){ 
  4.  
  5. layout.setTouchEventListener(new Component.TouchEventListener() { 
  6.  
  7. @Override 
  8.  
  9. public boolean onTouchEvent(Component component, TouchEvent touchEvent) { 
  10.  
  11. MmiPoint point = touchEvent.getPointerScreenPosition(0); 
  12.  
  13. switch (touchEvent.getAction()) { 
  14.  
  15. case TouchEvent.PRIMARY_POINT_DOWN: 
  16.  
  17. starX = point.getX(); 
  18.  
  19. starY = point.getY(); 
  20.  
  21. break; 
  22.  
  23. case TouchEvent.PRIMARY_POINT_UP: 
  24.  
  25. distanceX = point.getX() - starX; 
  26.  
  27. distanceY = point.getY() - starY; 
  28.  
  29. break; 
  30.  
  31.  
  32. if (gameover() == false){ 
  33.  
  34. if (Math.abs(distanceX) > Math.abs(distanceY)) { 
  35.  
  36. if (distanceX > 200) { 
  37.  
  38. changeGrids(grids,1); 
  39.  
  40. else if (distanceX < -200) { 
  41.  
  42. changeGrids(grids,-1); 
  43.  
  44.  
  45. else if (Math.abs(distanceX) < Math.abs(distanceY)){ 
  46.  
  47. if (distanceY > 200) { 
  48.  
  49. changeGrids(grids,-2); 
  50.  
  51. else if (distanceY < -200) { 
  52.  
  53. changeGrids(grids,2); 
  54.  
  55.  
  56.  
  57.  
  58. drawGrids(grids); 
  59.  
  60. return false
  61.  
  62.  
  63. }); 
  64.  

 最后在initialize()函數中調用slideGrids()函數和drawButton()函數。

  1. public void initialize(){ 
  2.  
  3. layout = new DirectionalLayout(this); 
  4.  
  5. grids = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8,}, {9, 10, 11, 12}, {13, 14, 15, 0}}; 
  6.  
  7. createGrids(grids); 
  8.  
  9. slideGrids(); 
  10.  
  11. drawButton(); 
  12.  
  13. drawGrids(grids); 
  14.  

 至此,這一部分完成了。

實現游戲成功界面

點擊“重新開始”按鈕即會重新生成隨意打亂的1至15的數字和一個空白方格的方陣,點擊“返回”按鈕即會切換到數字華容道的初始界面,經過若干次滑動或點擊后,當所有的數字按順序排列后,則會彈出游戲成功的界面,再滑動或點擊也不會有任何變化。


在entry>src>main>java>com.example.myphoneapplication>slice>SecondAbilitySlice編寫代碼。

首先定義一個函數drawText()用于繪制游戲成功字樣。

  1. public void drawText(){ 
  2.  
  3. Text text=new Text(this); 
  4.  
  5. text.setText("游戲成功"); 
  6.  
  7. text.setTextSize(100); 
  8.  
  9. text.setTextColor(Color.BLUE); 
  10.  
  11. text.setTextAlignment(TextAlignment.CENTER); 
  12.  
  13. text.setMarginsTopAndBottom(-2000,0); 
  14.  
  15. text.setMarginsLeftAndRight(350,0); 
  16.  
  17. layout.addComponent(text); 
  18.  
  19. setUIContent(layout); 
  20.  

 然后定義一個函數gameover()用于判斷二維數組的數字是否按順序排列,當二維數組的數字按順序排列時返回true,否則返回false。

  1. public boolean gameover() { 
  2.  
  3. int[][] gameoverGrids = {{1, 2, 3, 4}, {5, 6, 7, 8,}, {9, 10, 11, 12}, {13, 14, 15, 0}}; 
  4.  
  5. for (int row = 0; row < 4; row++) { 
  6.  
  7. for (int column = 0; column < 4; column++) { 
  8.  
  9. if (grids[row][column] != gameoverGrids[row][column]) { 
  10.  
  11. return false
  12.  
  13.  
  14.  
  15.  
  16. return true
  17.  

 再在drawButton()函數中重新開始按鈕中添加一個響應點擊事件的函數,用于調用函數initialize()實現重新生成隨意打亂的1至15的數字和一個空白方格的方陣,返回按鈕中添加一個響應點擊事件的函數,用parsen函數返回數字華容道的初始界面,四個指示不同方向箭頭的按鈕的響應點擊事件的函數中增加一個判斷,當函數gameover()返回為false時才調用各自的changeGrids(grids,direction)函數,最后增加一個判斷,當函數gameover()返回為true時調用函數drawText()。

  1. public void drawButton(){//部分代碼沒有貼出,可自行下載源代碼查看 
  2.  
  3. button.setClickedListener(new Component.ClickedListener() { 
  4.  
  5. @Override 
  6.  
  7. public void onClick(Component component) { 
  8.  
  9. initialize(); 
  10.  
  11.  
  12. }); 
  13.  
  14. button0.setClickedListener(new Component.ClickedListener() { 
  15.  
  16. @Override 
  17.  
  18. public void onClick(Component component) { 
  19.  
  20. present(new SecondAbilitySlice(),new Intent()); 
  21.  
  22.  
  23. }); 
  24.  
  25. button1.setClickedListener(new Component.ClickedListener() { 
  26.  
  27. @Override 
  28.  
  29. public void onClick(Component component) { 
  30.  
  31. if (gameover() == false){ 
  32.  
  33. changeGrids(grids,2); 
  34.  
  35.  
  36.  
  37. }); 
  38.  
  39. button2.setClickedListener(new Component.ClickedListener() { 
  40.  
  41. @Override 
  42.  
  43. public void onClick(Component component) { 
  44.  
  45. if (gameover() == false){ 
  46.  
  47. changeGrids(grids,-1); 
  48.  
  49.  
  50.  
  51. }); 
  52.  
  53. button3.setClickedListener(new Component.ClickedListener() { 
  54.  
  55. @Override 
  56.  
  57. public void onClick(Component component) { 
  58.  
  59. if (gameover() == false){ 
  60.  
  61. changeGrids(grids,1); 
  62.  
  63.  
  64.  
  65. }); 
  66.  
  67. button4.setClickedListener(new Component.ClickedListener() { 
  68.  
  69. @Override 
  70.  
  71. public void onClick(Component component) { 
  72.  
  73. if (gameover() == false){ 
  74.  
  75. changeGrids(grids,-2); 
  76.  
  77.  
  78.  
  79. }); 
  80.  
  81. if(gameover()){ 
  82.  
  83. drawText(); 
  84.  
  85.  

 在函數slideGrids()函數中增加一個判斷,當函數gameover()返回為false時才調用changeGrids(grids,direction)函數,最后增加一個判斷,當函數gameover()返回為true時調用函數drawText()。

  1. public void slideGrids(){//部分代碼沒有貼出,可自行下載源代碼查看 
  2.  
  3. if (gameover() == false){ 
  4.  
  5. //{...} 
  6.  
  7.  
  8. if(gameover()){ 
  9.  
  10. drawText(); 
  11.  
  12.  

 至此,整個demo全部完成了。

結語

以上就是數字華容道小游戲在手機的主要編寫思路以及代碼,源碼將放在附件中,歡迎大家下載,感興趣的讀者可以自行跟著編寫學習,相信你們也能夠完成的。更多深鴻會深大小組學習項目可以查看荔園Harmony,如果有遇到什么問題,或者查找出其中的錯誤之處,或者能夠優化代碼和界面,也歡迎各位在評論區留言討論,讓我們一起學習進步!

©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2020-12-11 12:27:35

鴻蒙HarmonyOS

2020-12-14 09:58:28

鴻蒙HarmonyOS手表游戲

2020-12-23 09:58:37

HarmonyOSHAPAPP

2020-12-31 12:02:15

鴻蒙Hi3861環境搭建

2021-11-02 14:55:42

鴻蒙HarmonyOS應用

2021-10-22 19:41:01

鴻蒙HarmonyOS應用

2021-01-12 12:16:55

鴻蒙HarmonyOS游戲

2021-08-25 09:54:51

鴻蒙HarmonyOS應用

2020-12-28 10:15:18

鴻蒙HarmonyOSListContain

2021-10-09 14:49:50

鴻蒙HarmonyOS應用

2020-12-22 11:09:20

鴻蒙Feature AbiAbilitySlic

2020-12-22 09:48:18

鴻蒙HarmonyOS應用程序

2024-09-27 08:51:58

2012-11-04 14:54:24

2020-12-23 11:24:34

鴻蒙開發IDE安裝

2013-10-15 09:48:03

C++Lambda函數式編程

2020-12-18 11:05:25

鴻蒙HarmonyOS游戲
點贊
收藏

51CTO技術棧公眾號

国产欧美日本一区二区三区| 亚洲私拍自拍| 欧美老人xxxx18| 欧美 另类 交| 天堂中文在线看| 日本不卡123| 欧美久久久精品| 国产精品无码永久免费不卡| 精品69视频一区二区三区| 亚洲宅男天堂在线观看无病毒| 精品国产乱码久久久久软件| 中文字幕一区2区3区| 亚洲影视一区| 亚洲视频网站在线观看| 精品国产乱码久久久久久1区二区| freexxx性亚洲精品| 欧美国产欧美综合| 国产不卡一区二区三区在线观看| 无码人妻精品一区二区三区9厂| 91精品国偷自产在线电影 | 久久久久久日产精品| 国产一区在线播放| 中文字幕在线欧美| 激情综合在线| 日韩视频中文字幕| 九色porny自拍视频| 涩爱av色老久久精品偷偷鲁| 欧美三级资源在线| koreanbj精品视频一区| 成人影院在线观看| 中文字幕第一区第二区| 韩国成人一区| 亚洲国产精彩视频| 国产综合色视频| 国产精品综合网站| 黄色片视频免费| 亚洲精选在线| 欧美日本在线视频中文字字幕| 国产一二三四区在线| 美日韩黄色大片| 精品国产乱码久久久久久蜜臀| 91福利国产成人精品播放| 大桥未久在线视频| 亚洲成人午夜影院| 国产91porn| 成人在线观看亚洲| 亚洲免费电影在线| 中文字幕制服丝袜在线| 95在线视频| 国产欧美一区二区精品性色 | 欧美在线色图| 国产一区二区三区在线观看视频 | 欧美黄色性视频| 青青操视频在线播放| 欧美在线影院| 欧美精品一区三区| 久久久夜色精品| 激情欧美一区| 26uuu另类亚洲欧美日本老年| 日本三级理论片| 亚洲激情一区| 国产91精品黑色丝袜高跟鞋| 探花视频在线观看| 视频一区在线视频| 国产精品18久久久久久首页狼| 天天爽夜夜爽人人爽| 日本不卡一区二区三区| 国产精品视频区1| 一级特黄录像免费看| 韩国成人在线视频| 国产成人精品一区二区三区福利| 色偷偷在线观看| 久久久久亚洲蜜桃| 影音欧美亚洲| 新版中文在线官网| 亚洲成人免费观看| av网站大全免费| 在线观看涩涩| 一本到一区二区三区| 高清一区在线观看| 日韩免费大片| 国产99精品| 国产成人av电影在线观看| 2020国产精品久久精品不卡| 精品国产免费无码久久久| 久久久777| 成人美女av在线直播| 国产sm主人调教女m视频| 国产精品1区2区| 久久99精品国产一区二区三区| 日本黄在线观看| 久久精品一区蜜桃臀影院| 午夜精品一区二区在线观看的 | 日韩激情av| 亚洲国产精品一区二区www| 日韩视频免费播放| 欧美xoxoxo| 在线不卡中文字幕| 一级少妇精品久久久久久久| 人人网欧美视频| 中文在线资源观看视频网站免费不卡 | 美女毛片在线观看| 亚洲在线免费| 国产欧美日韩综合精品| av男人天堂av| 国产午夜精品一区二区三区嫩草| 中文字幕欧美日韩一区二区三区| 菠萝菠萝蜜在线视频免费观看| 日韩一区欧美一区| 美女日批免费视频| 欧美国产视频| 亚洲国产精品人人爽夜夜爽| 69精品无码成人久久久久久| 欧美va天堂在线| 欧美亚洲激情在线| 国产免费无遮挡| www日韩大片| 午夜啪啪免费视频| 免费在线中文字幕| 69久久夜色精品国产69蝌蚪网| 水蜜桃av无码| 五月天久久777| 奇门遁甲1982国语版免费观看高清 | 久久久久蜜桃| 欧洲一区二区视频| 亚洲国产精品久久久久爰性色| 久久九九国产精品| 人妻激情另类乱人伦人妻| 欧美日韩尤物久久| 亚洲国产欧美精品| 黄色a级片在线观看| 蜜桃久久久久久| 欧美大陆一区二区| 欧美aaaxxxx做受视频| 欧美日韩免费一区二区三区| 风间由美一二三区av片| 69视频免费看| 成人看的视频| 国内精品久久久久影院 日本资源| 一级黄色在线观看| 99在线精品视频| 青草全福视在线| 精品福利在线| 在线成人激情视频| 无码人妻精品一区二区| 99久久精品免费看| 久久99中文字幕| 老司机aⅴ在线精品导航| 九九热精品在线| 国产深喉视频一区二区| 国产精品乱人伦中文| 国产日韩成人内射视频 | 欧美性xxxx极品hd满灌| 久久国产劲爆∧v内射| 99欧美视频| 亚洲xxxx3d| 成人在线网址| 欧美一区二区三区在线电影| 国产又粗又猛又爽又黄的视频四季| 天堂蜜桃一区二区三区 | 欧洲杯什么时候开赛| a在线免费观看| 欧美精彩视频一区二区三区| 久久久久久久久久久视频| 亚洲国产中文在线| 欧美老少配视频| www.蜜臀av| 一区二区三区在线视频观看58| 少妇伦子伦精品无吗| 国产精品v日韩精品v欧美精品网站| 91在线视频导航| а√天堂官网中文在线| 欧美一级高清片| 欧美日韩成人免费观看| 成人av电影在线播放| 无码毛片aaa在线| 国产精品欧美大片| 992tv成人免费视频| 性感美女一级片| 色综合久久88色综合天天6| 3d动漫精品啪啪一区二区下载| 久久久成人网| 亚洲欧美成人一区| 日韩一级特黄| 国产欧美一区二区三区在线老狼| 日韩一区视频在线| 一区二区国产欧美| 亚洲男人的天堂在线aⅴ视频| 9191在线视频| 亚洲美女色禁图| 国产伦理久久久| 日韩av中字| 久久精品99久久香蕉国产色戒| 国产精品久久久久毛片| 夜夜亚洲天天久久| 亚洲第一香蕉网| 精品一区二区三区日韩| 91九色在线观看视频| 欧美综合另类| 国产精品一区而去| se01亚洲视频| 美女久久久久久久| 完全免费av在线播放| 国产午夜精品美女视频明星a级| 最近中文字幕免费观看| 亚洲精品国产品国语在线app| 91丨porny丨对白| 奇米色一区二区三区四区| 欧美日韩福利在线| 成人毛片免费看| 国产另类自拍| 99久久综合国产精品二区| 久久综合久久八八| 天堂中文在线资| 91麻豆精品91久久久久久清纯| 黄色片中文字幕| 一区二区三区在线观看欧美| 老鸭窝一区二区| 国产精品一区二区三区99| 欧美视频第一区| 亚洲最大av| 日韩在线导航| 风间由美中文字幕在线看视频国产欧美| 日韩美女视频中文字幕| 免费在线中文字幕| 中文字幕在线观看日韩| 日韩一卡二卡在线| 日韩一区二区电影| 极品国产91在线网站| 欧美日韩国产丝袜另类| 久久精品一区二区三区四区五区 | 高清视频一区二区三区| 国产免费毛卡片| 亚洲理论电影| 懂色av一区二区三区在线播放| 久久青草免费| 国产精品国产三级国产专播精品人| www在线免费观看视频| 亚洲欧美日韩另类| 亚洲 欧美 激情 小说 另类| 欧美一区二区在线播放| 中文字幕在线观看欧美| 色呦呦一区二区三区| 日韩av无码中文字幕| 亚洲免费观看视频| 免费看一级黄色| 国产精品视频你懂的| 国产精品300页| 成人性生交大片免费看中文网站| 日本亚洲一区二区三区| 日韩电影在线看| 午夜久久久精品| 视频一区二区三区入口| 免费在线观看日韩视频| 999久久久亚洲| 亚洲欧洲中文| 久久成人福利| 精品国产乱码久久久久久88av| 99re8这里有精品热视频8在线| 91精品免费久久久久久久久| 亚洲青青一区| 成人在线一区二区| 亚州精品国产| 国产精品免费久久久| 成人国产激情在线| 国产精品狼人色视频一区| 91成人福利社区| 国产精品美女久久久免费| jvid一区二区三区| 国产精品一区二区电影| 精品亚洲美女网站| 91精品免费看| 日韩精品三级| 国产精品免费一区二区| 色先锋久久影院av| 欧美激情一区二区三区在线视频| 欧洲亚洲视频| 欧美性大战久久久久| 日韩精品久久| 精品成在人线av无码免费看| 91久久夜色精品国产九色| 1024av视频| 日韩av一二三| 欧美国产日韩另类 | 亚州国产精品久久久| 7777kkk亚洲综合欧美网站| 国产成人精品免高潮在线观看 | 青草在线视频| 亚洲精品自拍视频| 你懂得在线网址| 日韩中文字幕不卡视频| 国产在线69| 国内精品久久久久| 日韩国产91| 国产欧美在线一区二区| 九热爱视频精品视频| 一区二区三区四区不卡| 午夜久久黄色| 日韩黄色片视频| 久久99国产精品久久99| av av在线| 国产欧美精品日韩区二区麻豆天美| 手机在线免费看片| 亚洲精品日韩一| 国产精品尤物视频| 日韩精品最新网址| 免费黄网站在线观看| 久久亚洲电影天堂| 亚洲最大成人| 国产伦精品一区二区三区四区免费 | 日韩欧美国产片| 成人18精品视频| 成人黄色短视频| 午夜国产精品影院在线观看| 在线视频播放大全| 日韩一区二区高清| av电影在线网| 孩xxxx性bbbb欧美| 亚洲成人毛片| 欧美日本韩国在线| 亚洲精品成人影院| 一区二区三区 欧美| thepron国产精品| 美女视频久久久| 黑人巨大精品欧美一区免费视频 | 欧美日本不卡视频| 久久av少妇| 国语对白做受69| 国产精品一区二区精品视频观看| 欧美人xxxxx| 91久久在线| 中文字幕制服丝袜| 亚洲免费在线视频一区 二区| 波多野结衣家庭主妇| 日韩高清人体午夜| av影片在线| 亚洲自拍偷拍一区| 欧美成人69av| 不用播放器的免费av| 欧美激情综合在线| 国产精品久免费的黄网站| 欧美精品一区二区三区蜜臀| 日本一本在线免费福利| 成人午夜在线视频一区| 成人黄色av| 国产av人人夜夜澡人人爽| 久久夜色精品国产欧美乱极品| 国产成人一区二区三区影院在线| 日韩三级高清在线| √新版天堂资源在线资源| 国模精品一区二区三区色天香| 欧美1区2区3| 今天免费高清在线观看国语| 激情伊人五月天久久综合| 日韩女同一区二区三区 | 国产日韩三级在线| 国产一区二区99| 日韩精品极品在线观看播放免费视频| 色爱综合区网| 99r国产精品视频| 99久久夜色精品国产亚洲96| 性刺激的欧美三级视频| 国产精品美女久久久久久久久久久| 影音先锋在线国产| 亚洲精品日韩欧美| 美女福利一区二区三区| 欧美专区一二三| 日本人妖一区二区| 伊人在线视频观看| 91精品国产欧美一区二区成人| 黄视频网站在线| 丁香五月网久久综合| 极品av少妇一区二区| 亚洲天堂资源在线| 欧美日韩美女在线观看| 免费一级在线观看播放网址| 91精品国产一区| 色中色综合网| 亚洲男人天堂2021| 亚洲.国产.中文慕字在线| 日韩av成人| 亚洲在线视频福利| 日韩视频在线一区二区三区 | 黑鬼大战白妞高潮喷白浆| 国产日韩欧美高清在线| 亚洲手机在线观看| 国内伊人久久久久久网站视频| 亚洲最好看的视频| 亚洲精品视频导航| 亚洲人亚洲人成电影网站色| 亚洲专区在线播放| 欧美夜福利tv在线| 清纯唯美亚洲综合一区| 男人的天堂免费| 欧美午夜丰满在线18影院| caopen在线视频| 久久久久久九九| 久久99国产精品尤物| 黄色激情视频在线观看| 日韩在线一区二区三区免费视频|