OpenHarmony分布式五子棋-使用Canvas组件 实现棋盘、棋子的绘制

介绍

五子棋是一款比较流行的棋类游戏,此游戏使用分布式数据管理功能开发完成的。

本示例使用Canvas组件 实现棋盘、棋子的绘制,使用分布式数据管理 实现两台设备间数据的同步。

本示例使用分布式设备管理能力接口@ohos.distributedDeviceManager。

分布式数据管理接口@ohos.data.distributedData。

效果预览

首页

20230724024159.png?origin_url=https%3A%2F%2Fimage-tt-private.toutiao.com%2Ftos-cn-i-6w9my0ksvp%2F049a421004b74aefa21a23abe21d3898~tplv-obj.image%3F_iz%3D115383%26amp%3Bc%3D811c9dc5%26amp%3Bfrom%3Dimage_upload%26amp%3Blk3s%3D72284de7%26amp%3Bpolicy%3DeyJ2bSI6MywidWlkIjoiNDY4ODMxMjUxNDY4NzYxIn0%253D%26amp%3Bx-orig-authkey%3D5a21e4afda5945d9a206a695e4c78a63%26amp%3Bx-orig-expires%3D2343116513%26amp%3Bx-orig-sign%3DhyYBFgMduiYXoe%252Be3rF%252BcWQt6eA%253D&pos_id=e5d0xKlo)

使用说明:

1.启动应用,同一个网络下两台设备都确认权限后,一台设备退出。点击右上角流转按钮,选择需要拉起的远程设备,点击后拉起远程设备,第一次拉起设备时,若未进行认证,输入认证码进行认证,认证成功后拉起远程设备。

2.游戏过程中,本地设备的用户可以重开,悔棋,远程设备无此功能。下子时,在棋盘某位置点击第一次时预下子,若确定下在该位置,继续点击该位置,若不确定,点击其他位置即可。若远程设备因特殊原因退出或者掉线,本地设备可重新拉起远程设备,拉起后,本地设备点击棋盘任意位置,数据会同步到远程设备,继续进行未完成的游戏。

工程目录

entry/src/main/ets/
|---pages
|   |---index.ets                           // 五子棋首页
|   |---DeviceDialog.ets                    // 选择设备模块
|   |---TitleBar.ets                        // 标题导航栏
|---model                                  
|   |---DistributedDataModel.ts             // 分布式数据模块
|   |---KvStoreModel.ts                     // KvStore数据模块
|   |---RemoteDeviceModel.ts                // 管理分布式设备模块
|---util                                    
|   |---GobangConst.ts                      // 定义游戏用到的初始值                                                          

具体实现

  • 管理分布式设备(节点)
    1、创建设备管理对象,并指定参数kvstore应用包deviceManager.createDeviceManager("ohos.samples.distributeddatagobang", (error, value) => {})
    2、获取可信设备列表"this.deviceManager.getTrustedDeviceListSync()"。
    3、监听设备状态"this.deviceManager.on('deviceStateChange', (data) => {})"。
  • 分布式数据管理
    1、页面初始化时获取此应用所需能力,引入@ohos.data.distributedData初始化分布式数据库,并使用kvstore.on对数据change进行监听,通过appstorge判断获取相应的key判断是否是分布式节点。
    2、如果是分布式节点,如果数据发生变化处理数据,使用this.kvManager.getKVStore()通过指定Options和storeId,创建并获取KVStore数据库。以及添加键值对到数据库this.kvStore.put(key, value) 
    3、页面通过kvStore对象进行增删改查会触发其他已连接设备的kvStore.on监听。
  • 游戏规则编写
    1、init()函数初始化游戏规则,通过canvas组件绘制棋盘背景和棋子,游戏状态为开始,共计回合为0,并生成棋盘。源码参考 2、触发onClick函数,每click一次,清除一次canvas,数组中添加当前棋子,重绘。 3、当在A盘,且步长是偶数,表示B下的棋子会在A盘显示,绘制确定好的棋子,例如:this.deviceFlag === 'A' && this.distributedData.step % 2 === 0; 4、当在B盘,且步长是奇数,表示A下的棋子会在B盘显示,绘制确定好的棋子,例如:this.deviceFlag === 'B' && this.distributedData.step % 2 !== 0; 5、如果A盘重开(isRestart=true),那B盘就要清空棋子;不重开(isRestart=false)时,B盘正常显示。

相关权限

允许不同设备间的数据交换:ohos.permission.DISTRIBUTED_DATASYNC

允许系统应用获取分布式设备的认证组网能力:ohos.permission.ACCESS_SERVICE_DM

依赖

不涉及。

约束与限制

1.本示例仅支持标准系统上运行,支持设备:RK3568。

2.本示例为Stage模型,支持API10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0 Release)。

3.本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。

4.本示例需要使用@ohos.distributedDeviceManager系统权限的系统接口。使用Full SDK时需要手动从镜像站点获取,并在DevEco Studio中替换,具体操作可参考替换指南 。

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo code/Solutions/Game/DistributedDataGobang/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master

为了帮助大家更深入有效的学习到鸿蒙开发>鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→《https.docs.qq.com

HarmonyOS_124">HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等…视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书方式请点击→《https.docs.qq.com

在这里插入图片描述

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. .……

在这里插入图片描述


二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

在这里插入图片描述

三、如何快速入门?https.docs.qq.com

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. .……

在这里插入图片描述


四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. .……

在这里插入图片描述


五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 7.网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. .……

在这里插入图片描述


更多了解更多鸿蒙开发>鸿蒙开发的相关知识可以参考:《https.docs.qq.com


http://www.niftyadmin.cn/n/5464306.html

相关文章

告别PCA,开始玩高阶的PLS-DA

前言 让我们简单的解读PLS-LDA,涵盖理论基础、数学公式、示例场景,并最终生成一个具有细致解释和可视化功能的可操作Python代码。非理论版本。 基本原理概述 PLS-LDA,或偏最小二乘判别分析,使用PLS的强度进行降维,使…

P1914 小书童——凯撒密码,学会字符串的拆分

小书童——凯撒密码 - 洛谷 import java.util.*;public class Main {public static void main(String[] args) {Scanner scnew Scanner(System.in);int nsc.nextInt();String numsc.next();for(int i0;i<num.length();i) {char nunum.charAt(i);nu(char)((nu-an)%26a);Syst…

找到矩阵中位于降序15%位置的值

MATLAB实现 clc clearvars; matrix randn(10, 10); % 一个示例矩阵 disp(matrix)value find_value_at_15_percent(matrix); disp([位于降序中15%位置的值为: , num2str(value)]);% 验证 xreshape(matrix,1,100); ysort(x,descend); y(1:16)function value_at_15_percent fi…

【总结】在嵌入式设备上可以离线运行的LLM--Llama

文章目录 Llama 简介运用另一种&#xff1a;MLC-LLM 一个令人沮丧的结论在资源受限的嵌入式设备上无法运行LLM&#xff08;大语言模型&#xff09;。 一丝曙光&#xff1a;tinyLlama-1.1b&#xff08;10亿参数&#xff0c;需要至少2.98GB的RAM&#xff09; Llama 简介 LLaMA…

抖音快手直播录屏+无水印下载视频V3.6

抖音快手直播录屏无水印下载视频更新最新版本V3.6 下载&#xff1a;https://download.csdn.net/download/m0_66047725/88978976 更多资源下载&#xff1a;关注我。

内存泄漏检查工具下载(vld)

前言&#xff1a;在我们向内存申请动态空间的时候&#xff0c;如果使用完之后不将申请的空间释放&#xff0c;就会造成内存泄漏的情况&#xff0c;但是一般情况下&#xff0c;我们是无法通过运行代码来知道是否造成了内存泄漏&#xff0c;所以vld就成为了检查内存是否泄漏的好帮…

无人机编队 | 基于自适应航迹评价函数权重的动态窗口法长机-僚机法实现多无人机路径规划附matlab代码

基本概述 实现基于自适应航迹评价函数权重的动态窗口法(Dynamic Window Approach, DWA)的长机-僚机(Leader-Follower)多无人机路径规划是一个复杂的任务,涉及到多个算法的组合与改进。这里我会简要介绍其原理,并提供一个基础的Matlab代码框架,但请注意,这只是一个起点…

网络基础——ISIS

名词 ISIS&#xff1a;中间系统到中间系统&#xff0c;优先级是15集成化ISIS&#xff1a;这是在优化后&#xff0c;可以使用在OSI模型上的NET地址&#xff1a;由区域ID、系统ID和SEL组成&#xff0c;一台设备上最多配置3个NET地址&#xff0c;条件是区域号要不一致&#xff0c;…