[文章]【木棉花】学习笔记--分布式数字华容道(上)

阅读量0
1
5


前言
    不知不觉的又浑浑噩噩的过了一个星期了吧,没事这就看我的学习笔记来你补一下这星期在学习上的亏空。经过了前几个星期的学习,有没有很好的掌握了前面的那种内容呢,有没有觉得自己的能力上升了一大截了。嗯那就对了,那我们今天就拿我们前面学的知识拿来运用一下,来写出第一个属于自己的分布式游戏。我也挑了一个比较简单的数字华容道的游戏,来方便大家上手。
    那为了大家更好地熟练掌握鸿蒙手机应用开发,为了供大家更方便的学习鸿蒙手机的应用开发,我会将所有的笔记都整理到Awesome-HarmonyOS_木棉花,更多详细学习资料请查看Awesome-HarmonyOS_木棉花。也请关注我们这个项目,我们会持续更新的,会帮大家把资料都整理好更便于大家的学习。
那现在就先开始我们这星期的西之旅吧!

正文
那这个游戏也需要写的代码是比较多了,为了不让文章太冗长了,我就打算把这游戏拆成三篇来写,也方便大家循序渐进的学习。那我们今天这一篇呢主要是来实现页面的布局,把主要的框架给写出来。
创建工程
同样的我们还是先选择一个empty Ability,建一个java的工程。
添加权限
那我们第一步就来添加一个数据交互的权限了。同样的还是先到config.json文件中添加一些非敏感权限,再在MainAbility动态申请敏感权限
我们在abilities前面添加如下代码:
  1. "reqPermissions": [
  2.       {
  3.         "name": "ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"
  4.       },
  5.       {
  6.         "name": "ohos.permission.DISTRIBUTED_DATASYNC"
  7.       },
  8.       {
  9.         "name": "ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"
  10.       },
  11.       {
  12.         "name": "ohos.permission.READ_USER_STORAGE"
  13.       },
  14.       {
  15.         "name": "ohos.permission.WRITE_USER_STORAGE"
  16.       },
  17.       {
  18.         "name": "ohos.permission.GET_BUNDLE_INFO"
  19.       }
  20.     ],
复制代码
那接下来就是在MainAbility类文件夹编写代码完成通过弹窗的形式来动态申请数据交互的权限。
在onStart中添加如下代码:
  1.         requestPermissionsFromUser(new String[]{"ohos.permission.DISTRIBUTED_DATASYNC"},0);
复制代码
去除顶部的黑边

一看这个运行的页面就很不爽对吧,因为一打开就在顶部有一个黑边,正经的游戏界面哪能有这样的瑕疵对吧,那我们为了界面的美观,我们就来把这黑边给去除了。
那我们就接下来还是在config.josn文件中的abilities之后添加如下代码:
  1.     "metaData": {
  2.       "customizeData": [
  3.         {
  4.           "name": "hwc-theme",
  5.           "value": "androidhwext:style/Theme.Emui.Light.NoTitleBar",
  6.           "extra": ""
  7.         }
  8.       ]
  9.     }
复制代码
那可以运行一下来看一下我们这去除之后的界面,是不是有点怎么看怎么舒服的感觉。

换游戏名字和换游戏图标
在运行程序之后,是不是总能在桌面找到自己的程序,但是那程序的名字和图标却不是自己理想中的样子,那我们这个这么完美的游戏这么能被这个老鼠屎给坏了呢,我们接下来就把那名字和图标改成下面这样子吧。

那我们先在zn.element文件夹下的config.josn的文件找到entry_MainAbility,然后将其对应的value改为数字华容道就可以把桌面的名字给改了。
那接下来我们就把那图标给改了,先是在base文件夹下的media文件夹添加封面的图片,然后把图片命名为cover。那我们还是在config.json文件里面,把abilitiesicon改为引用我们的刚刚添加的图片。

abilities代码如下:
  1.     "abilities": [
  2.       {
  3.         "skills": [
  4.           {
  5.             "entities": [
  6.               "entity.system.home"
  7.             ],
  8.             "actions": [
  9.               "action.system.home"
  10.             ]
  11.           }
  12.         ],
  13.         "orientation": "unspecified",
  14.         "name": "com.example.myklotski.MainAbility",
  15.         "icon": "$media:cover",
  16.         "description": "$string:mainability_description",
  17.         "label": "$string:entry_MainAbility",
  18.         "type": "page",
  19.         "launchType": "standard"
  20.       }
  21.     ],
复制代码
那我们就把前期的工作完成了,接下来就是设置我们的游戏界面了。
设置UI界面
我们先是把graphic文件中添加一个background_button的背景文件,添加一个圆角半径还有更改一个背景颜色。
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <shape xmlns:ohos="http://schemas.huawei.com/res/ohos"
  3.        ohos:shape="rectangle">
  4.     <solid
  5.         ohos:color="#8A4632"/>
  6.     <corners
  7.         ohos:radius="100"/>
  8. </shape>
复制代码
再把数组华容道的标题的图片给继续添加到media文件夹中,那接下来的图片我就到最后把所有的图片压缩成一个压缩包给上传上去吧,这里就不放图片了。先是把背景颜色给换成一个计较深一点的,再添加刚刚添加到media文件中的数字华容道的图片,再添加一个单人游戏、双人游戏、还有一个关于的按钮。
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_parent"
  5.     ohos:width="match_parent"
  6.     ohos:alignment="center"
  7.     ohos:orientation="vertical"
  8.     ohos:background_element="#EFE5D3">

  9.     <Image
  10.         ohos:height="match_content"
  11.         ohos:width="match_content"
  12.         ohos:image_src="$media:logo"
  13.         ohos:top_margin="-100vp"
  14.         ohos:layout_alignment="center"/>

  15.     <Button
  16.         ohos:id="$+id:button_singlegame"
  17.         ohos:height="50vp"
  18.         ohos:width="match_parent"
  19.         ohos:text="单人模式"
  20.         ohos:text_size="28vp"
  21.         ohos:text_color="#FFFFFF"
  22.         ohos:text_alignment="center"
  23.         ohos:background_element="$graphic:background_button"/>

  24.     <Button
  25.         ohos:id="$+id:button_doublegame"
  26.         ohos:height="50vp"
  27.         ohos:width="match_parent"
  28.         ohos:text="双人模式"
  29.         ohos:text_size="28vp"
  30.         ohos:top_margin="30vp"
  31.         ohos:text_color="#FFFFFF"
  32.         ohos:text_alignment="center"
  33.         ohos:background_element="$graphic:background_button"/>

  34.     <Button
  35.         ohos:id="$+id:button_author"
  36.         ohos:height="50vp"
  37.         ohos:width="match_parent"
  38.         ohos:top_margin="30vp"
  39.         ohos:text="关于"
  40.         ohos:text_size="28vp"
  41.         ohos:text_color="#FFFFFF"
  42.         ohos:text_alignment="center"
  43.         ohos:background_element="$graphic:background_button"/>

  44. </DirectionalLayout>
复制代码
效果图如下:

这效果是不是还不错,颜色搭配还挺好看的对吧。那接下来我们就要利用到前面的知识了,我们需要添加一个关于页面出来,完成页面的布局设置还有给主页面中的关于按钮添加一个点击事件。那忘记这方面知识的同学可以回去复习一下:页面间跳转。那我们就先在Slice文件中添加一个名为ExplainSlice的类,接下来在layout文件中添加一个ability_explain文件用于该页面的界面设置。那我们在这个页面中就添加了木棉花的logo还有一些text用于说明,还有一个返回的按钮,当然了我们还需要在media文件中添加木棉花的logo。
ability_explain文件代码如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_parent"
  5.     ohos:width="match_parent"
  6.     ohos:orientation="vertical"
  7.     ohos:background_element="#EFE5D3">

  8.     <Text
  9.         ohos:height="match_content"
  10.         ohos:width="match_content"
  11.         ohos:text="程序:数字华容道"
  12.         ohos:text_size="25vp"
  13.         ohos:text_color="#000000"
  14.         ohos:top_margin="20vp"
  15.         ohos:left_margin="5vp"/>

  16.     <Text
  17.         ohos:height="match_content"
  18.         ohos:width="match_content"
  19.         ohos:text="团队:木棉花"
  20.         ohos:text_size="28vp"
  21.         ohos:text_color="#000000"
  22.         ohos:top_margin="20vp"
  23.         ohos:left_margin="5vp"/>

  24.     <Text
  25.         ohos:height="match_content"
  26.         ohos:width="match_content"
  27.         ohos:text="作者:张诏添、沈泳鑫"
  28.         ohos:text_size="28vp"
  29.         ohos:text_color="#000000"
  30.         ohos:top_margin="20vp"
  31.         ohos:left_margin="5vp"/>

  32.     <Text
  33.         ohos:height="match_content"
  34.         ohos:width="match_content"
  35.         ohos:text="版本:v2.1.0"
  36.         ohos:text_size="28vp"
  37.         ohos:text_color="#000000"
  38.         ohos:top_margin="20vp"
  39.         ohos:left_margin="5vp"/>

  40.     <Image
  41.         ohos:height="match_content"
  42.         ohos:width="match_content"
  43.         ohos:image_src="$media:kapok"
  44.         ohos:layout_alignment="center"/>

  45.     <Button
  46.         ohos:id="$+id:button_back"
  47.         ohos:height="50vp"
  48.         ohos:width="match_parent"
  49.         ohos:top_margin="30vp"
  50.         ohos:text="返回"
  51.         ohos:text_size="28vp"
  52.         ohos:text_color="#FFFFFF"
  53.         ohos:text_alignment="center"
  54.         ohos:background_element="$graphic:background_button"/>

  55. </DirectionalLayout>
复制代码
那我们接下来就可以ExplainSlice文件中引用这个文件来设置界面了。
ExplainSlice文件代码如下:
  1. package com.example.myklotski.slice;

  2. import com.example.myklotski.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Button;
  6. import ohos.agp.components.Component;

  7. public class ExplainSlice extends AbilitySlice {
  8.     @Override
  9.     protected void onStart(Intent intent) {
  10.         super.onStart(intent);
  11.         super.setUIContent(ResourceTable.Layout_ability_explain);

  12.         Button button = (Button) findComponentById(ResourceTable.Id_button_back);
  13.         button.setClickedListener(new Component.ClickedListener() {
  14.             @Override
  15.             public void onClick(Component component) {
  16.                 terminate();
  17.             }
  18.         });
  19.     }

  20.     @Override
  21.     protected void onActive() {
  22.         super.onActive();
  23.     }

  24.     @Override
  25.     protected void onForeground(Intent intent) {
  26.         super.onForeground(intent);
  27.     }
  28. }
复制代码
那接下来我们就还需要在MainAbilitySlice文件中写关于按钮的点击事件了,那在onStart添加如下代码:
  1.         Button button_explain = (Button) findComponentById(ResourceTable.Id_button_explain);
  2.         button_explain.setClickedListener(new Component.ClickedListener() {
  3.             @Override
  4.             public void onClick(Component component) {
  5.                 present(new ExplainSlice(),intent);
  6.             }
  7.         });
复制代码
接下来我们就添加一个可以选择单人游戏的阶数的界面。还是在Slice文件中添加SelectSingleGameSlice的类文件,再继续在layout文件中添加一个文件名为ability_selectsinglegame,用于SelectSingleGameSlice的界面设置,其代码如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_parent"
  5.     ohos:width="match_parent"
  6.     ohos:alignment="center"
  7.     ohos:orientation="vertical"
  8.     ohos:background_element="#EFE5D3">

  9.     <DirectionalLayout
  10.         ohos:height="match_content"
  11.         ohos:width="match_content"
  12.         ohos:orientation="horizontal">

  13.         <Button
  14.             ohos:id="$+id:button_threegame"
  15.             ohos:height="50vp"
  16.             ohos:width="400px"
  17.             ohos:text="3 x 3"
  18.             ohos:text_size="28vp"
  19.             ohos:text_color="#FFFFFF"
  20.             ohos:text_alignment="center"
  21.             ohos:right_margin="50px"
  22.             ohos:background_element="$graphic:background_button"/>

  23.         <Button
  24.             ohos:id="$+id:button_fourgame"
  25.             ohos:height="50vp"
  26.             ohos:width="400px"
  27.             ohos:text="4 x 4"
  28.             ohos:text_size="28vp"
  29.             ohos:text_color="#FFFFFF"
  30.             ohos:text_alignment="center"
  31.             ohos:left_margin="50px"
  32.             ohos:background_element="$graphic:background_button"/>

  33.     </DirectionalLayout>
  34.     <DirectionalLayout
  35.         ohos:height="match_content"
  36.         ohos:width="match_content"
  37.         ohos:top_margin="30vp"
  38.         ohos:orientation="horizontal">

  39.         <Button
  40.             ohos:id="$+id:button_fivegame"
  41.             ohos:height="50vp"
  42.             ohos:width="400px"
  43.             ohos:text="5 x 5"
  44.             ohos:text_size="28vp"
  45.             ohos:text_color="#FFFFFF"
  46.             ohos:text_alignment="center"
  47.             ohos:right_margin="50px"
  48.             ohos:background_element="$graphic:background_button"/>

  49.         <Button
  50.             ohos:id="$+id:button_sixgame"
  51.             ohos:height="50vp"
  52.             ohos:width="400px"
  53.             ohos:text="6 x 6"
  54.             ohos:text_size="28vp"
  55.             ohos:text_color="#FFFFFF"
  56.             ohos:text_alignment="center"
  57.             ohos:left_margin="50px"
  58.             ohos:background_element="$graphic:background_button"/>

  59.     </DirectionalLayout>
  60.     <DirectionalLayout
  61.         ohos:height="match_content"
  62.         ohos:width="match_content"
  63.         ohos:top_margin="30vp"
  64.         ohos:orientation="horizontal">

  65.         <Button
  66.             ohos:id="$+id:button_sevengame"
  67.             ohos:height="50vp"
  68.             ohos:width="400px"
  69.             ohos:text="7 x 7"
  70.             ohos:text_size="28vp"
  71.             ohos:text_color="#FFFFFF"
  72.             ohos:text_alignment="center"
  73.             ohos:right_margin="50px"
  74.             ohos:background_element="$graphic:background_button"/>

  75.         <Button
  76.             ohos:id="$+id:button_eightgame"
  77.             ohos:height="50vp"
  78.             ohos:width="400px"
  79.             ohos:text="8 x 8"
  80.             ohos:text_size="28vp"
  81.             ohos:text_color="#FFFFFF"
  82.             ohos:text_alignment="center"
  83.             ohos:left_margin="50px"
  84.             ohos:background_element="$graphic:background_button"/>

  85.     </DirectionalLayout>

  86.     <Button
  87.         ohos:id="$+id:button_singleback"
  88.         ohos:height="50vp"
  89.         ohos:width="match_parent"
  90.         ohos:top_margin="30vp"
  91.         ohos:text="返回"
  92.         ohos:text_size="28vp"
  93.         ohos:text_color="#FFFFFF"
  94.         ohos:text_alignment="center"
  95.         ohos:background_element="$graphic:background_button"/>
  96. </DirectionalLayout>
复制代码
SelectSingleGameSlice代码如下:
  1. package com.example.myklotski.slice;

  2. import com.example.myklotski.ResourceTable;
  3. import ohos.aafwk.ability.AbilitySlice;
  4. import ohos.aafwk.content.Intent;
  5. import ohos.agp.components.Button;
  6. import ohos.agp.components.Component;

  7. public class SelectSingleGameAbilitySlice extends AbilitySlice {
  8.     @Override
  9.     protected void onStart(Intent intent) {
  10.         super.onStart(intent);
  11.         super.setUIContent(ResourceTable.Layout_ability_selectsinglegame);

  12.         Button button_back = (Button)findComponentById(ResourceTable.Id_button_singleback);
  13.         button_back.setClickedListener(new Component.ClickedListener() {
  14.             @Override
  15.             public void onClick(Component component) {
  16.                 terminate();
  17.             }
  18.         });
  19.     }

  20.     @Override
  21.     protected void onActive() {
  22.         super.onActive();
  23.     }

  24.     @Override
  25.     protected void onForeground(Intent intent) {
  26.         super.onForeground(intent);
  27.     }
  28. }
复制代码
MainAbilitySlice的onStart中添加个人游戏按钮的点击事件。
  1.         Button button_single = (Button)findComponentById(ResourceTable.Id_button_singlegame);
  2.         button_single.setClickedListener(new Component.ClickedListener() {
  3.             @Override
  4.             public void onClick(Component component) {
  5.                 present(new SelectSingleGameAbilitySlice(),intent);
  6.             }
  7.         });
复制代码
接着创建一个单人游戏的游戏界面,这次我们就在example目录下来创建一个empty Page Ability,命名为SingleGameAbility

然后在SelectSingleGameSlice中,添加阶数按钮的点击事件,完成页面的跳转还有传一个阶数到SingleGameSlice中。
  1.         Button button_three = (Button)findComponentById(ResourceTable.Id_button_threegame);
  2.         button_three.setClickedListener(new Component.ClickedListener() {
  3.             @Override
  4.             public void onClick(Component component) {
  5.                 Intent intent = new Intent();
  6.                 intent.setParam("single",3);
  7.                 Operation operation = new Intent.OperationBuilder()
  8.                         .withDeviceId("")
  9.                         .withBundleName(getBundleName())
  10.                         .withAbilityName(SingleGameAbility.class.getName())
  11.                         .build();
  12.                 intent.setOperation(operation);
  13.                 startAbility(intent);
  14.             }
  15.         });

  16.         Button button_four = (Button)findComponentById(ResourceTable.Id_button_fourgame);
  17.         button_four.setClickedListener(new Component.ClickedListener() {
  18.             @Override
  19.             public void onClick(Component component) {
  20.                 Intent intent = new Intent();
  21.                 intent.setParam("single",4);
  22.                 Operation operation = new Intent.OperationBuilder()
  23.                         .withDeviceId("")
  24.                         .withBundleName(getBundleName())
  25.                         .withAbilityName(SingleGameAbility.class.getName())
  26.                         .build();
  27.                 intent.setOperation(operation);
  28.                 startAbility(intent);
  29.             }
  30.         });

  31.         Button button_five = (Button) findComponentById(ResourceTable.Id_button_fivegame);
  32.         button_four.setClickedListener(new Component.ClickedListener() {
  33.             @Override
  34.             public void onClick(Component component) {
  35.                 Intent intent = new Intent();
  36.                 intent.setParam("single",5);
  37.                 Operation operation = new Intent.OperationBuilder()
  38.                         .withDeviceId("")
  39.                         .withBundleName(getBundleName())
  40.                         .withAbilityName(SingleGameAbility.class.getName())
  41.                         .build();
  42.                 intent.setOperation(operation);
  43.                 startAbility(intent);
  44.             }
  45.         });

  46.         Button button_six = (Button)findComponentById(ResourceTable.Id_button_sixgame);
  47.         button_six.setClickedListener(new Component.ClickedListener() {
  48.             @Override
  49.             public void onClick(Component component) {
  50.                 Intent intent = new Intent();
  51.                 intent.setParam("single",6);
  52.                 Operation operation = new Intent.OperationBuilder()
  53.                         .withDeviceId("")
  54.                         .withBundleName(getBundleName())
  55.                         .withAbilityName(SingleGameAbility.class.getName())
  56.                         .build();
  57.                 intent.setOperation(operation);
  58.                 startAbility(intent);
  59.             }
  60.         });

  61.         Button button_seven = (Button) findComponentById(ResourceTable.Id_button_sevengame);
  62.         button_seven.setClickedListener(new Component.ClickedListener() {
  63.             @Override
  64.             public void onClick(Component component) {
  65.                 Intent intent = new Intent();
  66.                 intent.setParam("single",7);
  67.                 Operation operation = new Intent.OperationBuilder()
  68.                         .withDeviceId("")
  69.                         .withBundleName(getBundleName())
  70.                         .withAbilityName(SingleGameAbility.class.getName())
  71.                         .build();
  72.                 intent.setOperation(operation);
  73.                 startAbility(intent);
  74.             }
  75.         });

  76.         Button button_eight = (Button)findComponentById(ResourceTable.Id_button_eightgame);
  77.         button_eight.setClickedListener(new Component.ClickedListener() {
  78.             @Override
  79.             public void onClick(Component component) {
  80.                 Intent intent = new Intent();
  81.                 intent.setParam("single",8);
  82.                 Operation operation = new Intent.OperationBuilder()
  83.                         .withDeviceId("")
  84.                         .withBundleName(getBundleName())
  85.                         .withAbilityName(SingleGameAbility.class.getName())
  86.                         .build();
  87.                 intent.setOperation(operation);
  88.                 startAbility(intent);
  89.             }
  90.         });
复制代码
   这真是个体力活呀,写了那么多相似的代码。那接下来你也应该猜到我想做什么了吧,对了我就是想给双人游戏按钮也来一个点击事件对吧,那我们仍然需要先在Slice中添加一个SelectDoubleGameSlice,然后再layout中再添加一个ability_selecedoublegame文件,其代码如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_parent"
  5.     ohos:width="match_parent"
  6.     ohos:alignment="center"
  7.     ohos:orientation="vertical"
  8.     ohos:background_element="#EFE5D3">

  9.     <Button
  10.         ohos:id="$+id:button_threedoublegame"
  11.         ohos:height="50vp"
  12.         ohos:width="match_parent"
  13.         ohos:text="3 x 3"
  14.         ohos:text_size="28vp"
  15.         ohos:text_color="#FFFFFF"
  16.         ohos:text_alignment="center"
  17.         ohos:background_element="$graphic:background_button"/>

  18.     <Button
  19.         ohos:id="$+id:button_fourdoublegame"
  20.         ohos:height="50vp"
  21.         ohos:width="match_parent"
  22.         ohos:text="4 x 4"
  23.         ohos:text_size="28vp"
  24.         ohos:top_margin="30vp"
  25.         ohos:text_color="#FFFFFF"
  26.         ohos:text_alignment="center"
  27.         ohos:background_element="$graphic:background_button"/>

  28.     <Button
  29.         ohos:id="$+id:button_fivedoublegame"
  30.         ohos:height="50vp"
  31.         ohos:width="match_parent"
  32.         ohos:top_margin="30vp"
  33.         ohos:text="5 x 5"
  34.         ohos:text_size="28vp"
  35.         ohos:text_color="#FFFFFF"
  36.         ohos:text_alignment="center"
  37.         ohos:background_element="$graphic:background_button"/>

  38.     <Button
  39.         ohos:id="$+id:button_doubleback"
  40.         ohos:height="50vp"
  41.         ohos:width="match_parent"
  42.         ohos:top_margin="30vp"
  43.         ohos:text="返回"
  44.         ohos:text_size="28vp"
  45.         ohos:text_color="#FFFFFF"
  46.         ohos:text_alignment="center"
  47.         ohos:background_element="$graphic:background_button"/>

  48. </DirectionalLayout>
复制代码
   那接下来就当然是在Slice创建双人游戏界面了吧。然后在SelectDoubleGameSlice中添加点击事件用于页面跳转。这里我就在点击监听器里除了传输数据之外我还利用了简单的调度,为了拉起另外一台设备的游戏界面,使得双人游戏可以同时开始。
  1. package com.example.myklotski.slice;

  2. import com.example.myklotski.DoubleGameAbility;
  3. import com.example.myklotski.ResourceTable;
  4. import ohos.aafwk.ability.AbilitySlice;
  5. import ohos.aafwk.content.Intent;
  6. import ohos.aafwk.content.Operation;
  7. import ohos.agp.components.Button;
  8. import ohos.agp.components.Component;
  9. import ohos.bundle.AbilityInfo;
  10. import ohos.distributedschedule.interwork.DeviceInfo;
  11. import ohos.distributedschedule.interwork.DeviceManager;
  12. import ohos.hiviewdfx.HiLog;
  13. import ohos.hiviewdfx.HiLogLabel;
  14. import ohos.rpc.RemoteException;

  15. import java.util.List;

  16. public class SelectDoubleGameSlice extends AbilitySlice {
  17.     private static final HiLogLabel TAG = new HiLogLabel(HiLog.LOG_APP, 0x12345, "signal");
  18.     @Override
  19.     protected void onStart(Intent intent) {
  20.         super.onStart(intent);
  21.         super.setUIContent(ResourceTable.Layout_ability_selectdoublegame);

  22.         Button button_three = (Button)findComponentById(ResourceTable.Id_button_threedoublegame);
  23.         button_three.setClickedListener(new Component.ClickedListener() {
  24.             @Override
  25.             public void onClick(Component component) {
  26.                 Intent intent = new Intent();
  27.                 intent.setParam("single",3);
  28.                 dispatch(intent);
  29.                 intent.setParam("isLocal",true);
  30.                 present(new DoubleGameAbilitySlice(),intent);
  31.             }
  32.         });

  33.         Button button_four = (Button)findComponentById(ResourceTable.Id_button_fourdoublegame);
  34.         button_four.setClickedListener(new Component.ClickedListener() {
  35.             @Override
  36.             public void onClick(Component component) {
  37.                 Intent intent = new Intent();
  38.                 intent.setParam("single",4);
  39.                 dispatch(intent);
  40.                 intent.setParam("isLocal",true);
  41.                 present(new DoubleGameAbilitySlice(),intent);
  42.             }
  43.         });

  44.         Button button_five = (Button)findComponentById(ResourceTable.Id_button_fivedoublegame);
  45.         button_five.setClickedListener(new Component.ClickedListener() {
  46.             @Override
  47.             public void onClick(Component component) {
  48.                 Intent intent = new Intent();
  49.                 intent.setParam("single",5);
  50.                 dispatch(intent);
  51.                 intent.setParam("isLocal",true);
  52.                 present(new DoubleGameAbilitySlice(),intent);
  53.             }
  54.         });

  55.         Button button_back = (Button)findComponentById(ResourceTable.Id_button_doubleback);
  56.         button_back.setClickedListener(new Component.ClickedListener() {
  57.             @Override
  58.             public void onClick(Component component) {
  59.                 terminate();
  60.             }
  61.         });
  62.     }

  63.     private void dispatch(Intent intent) {
  64.         List<DeviceInfo> deviceInfoList = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);
  65.         for (DeviceInfo deviceInfo : deviceInfoList) {
  66.             Operation operation = new Intent.OperationBuilder()
  67.                     .withDeviceId(deviceInfo.getDeviceId())
  68.                     .withBundleName(getBundleName())
  69.                     .withAbilityName(DoubleGameAbility.class.getName())
  70.                     .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)
  71.                     .build();
  72.             intent.setOperation(operation);
  73.             try {
  74.                 List<AbilityInfo> abilityInfoList = getBundleManager().queryAbilityByIntent(intent,0,0);
  75.                 if (abilityInfoList != null && !abilityInfoList.isEmpty()) {
  76.                     intent.setParam("isLocal",false);
  77.                     startAbility(intent);
  78.                 }
  79.             } catch (RemoteException remoteException) {
  80.                 HiLog.info(TAG,"error");
  81.             }
  82.         }
  83.     }

  84.     @Override
  85.     protected void onActive() {
  86.         super.onActive();
  87.     }

  88.     @Override
  89.     protected void onForeground(Intent intent) {
  90.         super.onForeground(intent);
  91.     }
  92. }
复制代码

预告     那到这我们今天的学习的结束啦,就这是为了后面做游戏做的一个外壳,那我们下一篇学习笔记就来实现单人游戏的游戏程序把,我们将在那里面实现游戏功能、暂停开始、重新开始游戏、返回和迁移。你们也可以试着看能不能实现出来。
结语    源码我会放到附件中的,有需求的可以自行下载自行学习,大家有什么看不懂的地方可以私信问我或者对照源码进行学习。
更多资料请关注我们的项目 : Awesome-Harmony_木棉花    本项目会长期更新 ,希望继续关注,我们也会加油做得更好的。明年3月,深大校园内的木棉花会盛开,那时,鸿蒙也会变的更好,愿这花开,有你我的一份。

MyKlotski.rar
(8.61 MB, 下载次数: 0)
图片.rar
(881.23 KB, 下载次数: 0)

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友