当前位置: 首页 > 科技观察

鸿蒙分发1024一起玩专注游戏

时间:2023-03-23 01:26:02 科技观察

更多内容请访问:鸿蒙技术社区与华为官方共建https://harmonyos.51cto.com1、前言1024专注游戏在屏幕上绘制NxN方块(比如4x4,一共16个),随机填入从1开始依次生成的数(比如1到16,一共16个数)。游戏过程中,要求玩家用手指按升序(如1到16)指出自己的位置。按下所有数字后,将显示使用的时间(秒)。花费的时间越短,关注度越高。可以培养集中、分配、控制的能力;扩大观看范围;加快视频速度;提高视觉稳定性、辨别人物、定向搜索能力。这个游戏是最简单、最有效、最科学的注意力训练方法。在寻找目标号码时,注意力需要极其集中。如果反复练习这种短时间高强度的专注过程,大脑的专注功能就会不断得到加强和提高。关注度越来越高。同时,1024ConcentrateTogether游戏采用了鸿蒙分布式协作技术。在训练孩子的专注力和耐力时,大人也可以陪同一起训练。只要两部鸿蒙系统手机或者一手机一平板,大人小孩都可以一起玩。同时一起玩游戏,比如大人在其中一台手机上按小数的一部分,然后点击分布式协作图标,在另一台手机上拉起1024,一起专注游戏,而孩子可以继续按,大人没有按完,最后显示经过的时间。2、实现效果开发工具环境下的视频:https://www.bilibili.com/video/BV1B34y1m7M5?spm_id_from=333.999.0.0手机+手机环境下的视频:https://www.bilibili.com/video/BV1kh411b7QM?spm_id_from=333.999.0.0手机+平板环境视频:https://www.bilibili.com/video/BV1ov411M7sq?spm_id_from=333.999.0.0三、在这里创建工程就好像安装了最新版的DevEco-Studio开发工具,点击File->New->NewProject...弹出CreateHarmonyOSProject窗口,这里我选择一个空白的Java模板创建,之前的视频播放例子是用JS写的界面,这个游戏界面是写的用Java,或者用JS写的界面更快,调试也更快。4、在展示主界面开发源码之前,先介绍一下用到了哪些JAVA组件:DirectionalLayout、TableLayout、DependentLayout、Button、Image、Text、ListContainer、CommonDialog。通过查看JavaUI参考文档,您可以制作自己喜欢的应用程序。首先介绍公共类Java代码。有了这些publicclass,以后有类似功能的应用就可以直接copypublicclass文件了::%{public}s";privateLogUtil(){}publicstaticvoiddebug(StringclassName,Stringmsg){HiLog.debug(LABEL_LOG,LOG_FORMAT,className,msg);}publicstaticvoidinfo(StringclassName,Stringmsg){HiLog.信息(标签日志,日志格式,类名,味精);LABEL_LOG,LOG_FORMAT,classType==null?"null":classType.getSimpleName(),buffMsg);}publicstaticvoiderror(Stringtag,Stringmsg){HiLog.error(LABEL_LOG,LOG_FORMAT,tag,msg);}}SelectDeviceDialog设备选择对话框:publicclassSelectDeviceDialog{privatestaticfinalintDIALOG_WIDTH=840;privatestaticfinalintDIALOG_HEIGHT=900;privateCommonDialogcommonDialog;publicSelectDeviceDialog(Contextcontext,Listdevices,SelectResultListenerlistener){initView(context,devices,listener);}privatevoidinitView(Contextcontext,Listdevices,SelectResultListenerlistener){//创建公共对话框commonDialog=newCommonDialog(context);//设置居中对齐commonDialog.setAlignment(LayoutAlignment.CENTER);//设置对话框大小commonDialog.setSize(DIALOG_WIDTH,DIALOG_HEIGHT);//设置对话框自动关闭commonDialog.setAutoClosable(true);//加载XML布局文件ComponentdialogLayout=LayoutScatter.getInstance(context).parse(ResourceTable.Layout_dialog_select_device,null,false);//设置对话框内容commonDialog.setContentCustomComponent(dialogLayout);//查找列表容器if(dialogLayout.findComponentById(ResourceTable.Id_list_devices)instanceofListContainer){//获取列表容器对象ListContainerdevicesListContainer=(ListContainer)dialogLayout.findComponentById(ResourceTable.Id_list_devices);//设备listadapterDevicesListAdapterdevicesListAdapter=newDevicesListAdapter(devices,context);//设置设备列表容器项提供者devicesListContainer.setItemProvider(devicesListAdapter);//设置设备列表项点击事件devicesListContainer.setItemClickedListener((listContainer,component,position,id)->{//回调选中的设备信息listener.callBack(devices.get(position));//关闭对话框commonDialog.hide();});}dialogLayout.findComponentById(ResourceTable.Id_cancel).setClickedListener(component->{//关闭对话框commonDialog.hide();});}//显示对话框publicvoidshow(){commonDialog.show();}/***内部接口,选择设备后的回调事件*/publicinterfaceSelectResultListener{voidcallBack(DeviceInfodeviceInfo);}}DevicesListAdapter设备列表适配器:publicclassDevicesListAdapterextendsBaseItemProvider{//从0开始下标privatestaticfinalintSUBSTRING_START=0;//结束下标为4privatestaticfinalintSUBSTRING_END=4;//设备信息列表privateListdeviceInfoList;//当前上下文privateContextcontext;//带参数的构造方法publicDevicesListAdapter(ListdeviceInfoList,Contextcontext){this.deviceInfoList=deviceInfoList;this.context=context;}@OverridepublicintgetCount(){returndeviceInfoList==null?0:deviceInfoList.size();}@OverridepublicObjectgetItem(inti){returnOptional.of(deviceInfoList.get(i));}@OverridepubliclonggetItemId(inti){returni;}@OverridepublicComponentgetComponent(inti,Componentcomponent,ComponentContainercomponentContainer){//定义设备视图内部类ViewHolderviewHolder=null;//定义组件ComponentmComponent=component;//当组件为空时if(mComponent==null){//找到设备列表项布局XMLmComponent=LayoutScatter.getInstance(context).parse(ResourceTable.Layout_item_device_list,null,false);//初始化设备视图类viewHolder=newViewHolder();//判断组件布局是否包含设备名称文本组件if(mComponent.findComponentById(ResourceTable.Id_device_name)instanceofText){//获取设备的设备名称文件组件listitemlayoutXML并为其赋值缓存内部类设备视图的设备名称属性viewHolder.devicesName=(Text)mComponent.findComponentById(ResourceTable.Id_device_name);}//判断组件nentlayoutcontainsthedeviceIdtextcomponentif(mComponent.findComponentById(ResourceTable.Id_device_id)instanceofText){//获取设备列表项布局XML的deviceId文件组件,赋值给内部类设备视图deviceId属性缓存viewHolder.devicesId=(Text)mComponent.findComponentById(ResourceTable.Id_device_id);}mComponent.setTag(viewHolder);}else{//如果组件不为空,标签包Deviceviewwithinternalclassif(mComponent.getTag()instanceofViewHolder){//从组件标签获取设备视图viewHolder=(ViewHolder)mComponent.getTag();}}//当设备视图不为空时if(viewHolder!=null){//设置设备名称内容SUBSTRING_END)+"******"+deviceId.substring(deviceId.length()-SUBSTRING_END);//设置设备名称IdviewHolder.devicesId.setText(deviceId);}returnmComponent;}/***内部类,deviceview*/privatestaticclassViewHolder{//设备名称privateTextdevicesName;//deviceIdprivateTextdevicesId;}}MainAbilitySlice主界面功能解释:主界面主要功能是利用表格布局生成3x3,4x4,5x5,6x6,7x7、8x8、9x9,点击然后跳转到游戏界面,初始化相应的数字按钮,使用Slice进行跳跃和p屁股参数。源码有详细的注释。感兴趣的朋友可以去gitee查看源码。PlayAbilitySlice游戏界面功能解释:游戏界面的主要功能也是在表格布局中从主界面生成相应的参数按钮,数字随机显示。分布式协同拉取GameServiceAbility游戏服务,点击每个数字按钮时,通过订阅Event,接收当前数字和相关变量,然后更新相应的数据,源码有详细的注释,感兴趣的朋友可以去gitee查看源码。GameServiceAbility游戏服务解释:游戏服务主要作用是如果请求的是Ability,接收到参数后,会转给其他接口传递参数;如果是其他请求,接收到参数后,会通过公共事件发布并订阅本次事件的能力更新数据,源码有详细的注释,感兴趣的朋友可以去gitee查看源码。讲解到此结束,别忘了config.json文件的权限配置,在module下添加。"reqPermissions":[{"name":"ohos.permission.GET_DISTRIBUTED_DEVICE_INFO"},{"name":"ohos.permission.DISTRIBUTED_DATASYNC"},{"name":"ohos.permission.DISTRIBUTED_DEVICE_STATE_CHANGE"},{"name":"ohos.permission.READ_USER_STORAGE"},{"name":"ohos.permission.WRITE_USER_STORAGE"},{"name":"ohos.permission.GET_BUNDLE_INFO"}]同时还需要提供游戏界面入口动态授权:privatestaticvoidgrantPermission(Contextcontext){LogUtil.info(TAG,"grantPermission");if(context.verifySelfPermission(DISTRIBUTED_DATASYNC)!=IBundleManager.PERMISSION_GRANTED){if(context.canRequestPermission(DISTRIBUTED_DATASYNC)){context.requestDISTRIBUTED_DATASYNC},PERMISSION_CODE);}}}五、总结有兴趣的小伙伴可以下载源码查看,项目代码基本都是注释的,游戏规则很简单,只需要在界面上依次点击数字即可,时间越短,说明注意力越集中。源码同步到gitee码云。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区