鸿蒙HarmonyOS项目实战开发:井字过三关小游戏_基于harmonyos的井字棋游戏开发

68 阅读7分钟

Image(this.fork).backgroundColor(Color.White) } else if (item.value === CIRCLE) { Image(this.circle).backgroundColor(Color.White) } else { Image(this.whiteBg) } }.onClick(() => { //点触格子触发事件 this.dealPoint(item) }) }, item => item.id) }.columnsTemplate('1fr 1fr 1fr').rowsTemplate('1fr 1fr 1fr').columnsGap(3).rowsGap(3).align(Alignment.Center).alignSelf(ItemAlign.Center).backgroundColor('#9F5F9F')

//根据胜负状态显示图片 if (result === YOU_WIN) { Image(r("app.media.game_win")).width(224).height(224) } else if (result === YOU_LOSE) { Image(r("app.media.game_fail")).width(224).height(224) } else if (result === TIE) { Image($r("app.media.game_tie")).width(224).height(224) } } }.height('50%') Row({ useAlign: HorizontalAlign.Center }) { Button('重新开始').width(200).height(50).fontSize(30).backgroundColor('#8E6B23').onClick(() => { this.initGame() }) }.height('20%') } }

3.设备认证

设备认证是依赖DeviceManager组件来实现的,详细代码参考源码RemoteDeviceModel.ets

1.创建DeviceManager实例

registerDeviceListCallback(callback) { if (typeof (this.#deviceManager) === 'undefined') { deviceManager.createDeviceManager('com.example.tictactoegame', (error, value) => { if (error) return this.#deviceManager = value; this.registerDeviceListCallback_(callback); }); } else { this.registerDeviceListCallback_(callback); } }

2.查询可信设备列表

var list = this.#deviceManager.getTrustedDeviceListSync(); if (typeof (list) != 'undefined' && typeof (list.length) != 'undefined') { this.deviceList = list; }

3.注册设备上下线监听

this.#deviceManager.on('deviceStateChange', (data) => { switch (data.action) { case 0: this.deviceList[this.deviceList.length] = data.device; this.callback(); if (this.authCallback != null) { this.authCallback(); this.authCallback = null; } break; case 2: if (this.deviceList.length > 0) { for (var i = 0; i < this.deviceList.length; i++) { if (this.deviceList[i].deviceId === data.device.deviceId) { this.deviceList[i] = data.device; break; } } } this.callback(); break; case 1: if (this.deviceList.length > 0) { var list = []; for (var i = 0; i < this.deviceList.length; i++) { if (this.deviceList[i].deviceId != data.device.deviceId) { list[i] = data.device; } } this.deviceList = list; } this.callback(); break; default: break; } });

4.设备发现

this.#deviceManager.on('deviceFound', (data) => { for (let i = 0; i < this.discoverList.length; i++) { if (that.discoverList[i].deviceId === data.device.deviceId) { return; } } this.discoverList[this.discoverList.length] = data.device; this.callback(); });

5.设备认证

authDevice(deviceInfo, callback){ let extraInfo = { "targetPkgName": 'com.example.tictactoegame', "appName": 'com.example.tictactoegame', "appDescription": 'com.example.tictactoegame', "business": '0' }; let authParam = { "authType": 1, "appIcon": '', "appThumbnail": '', "extraInfo": extraInfo }; this.#deviceManager.authenticateDevice(deviceInfo, authParam, (err, data) => { if (err) { this.authCallback = null; } else { this.authCallback = callback; } }); }

4.数据管理

分布式数据管理依赖@ohos.data.distributedData模块实现,详细参考源码RemoteDataManager.ets

1.导入该模块

import factory from '@ohos.data.distributedData';

2.创建KVManager实例,用于管理数据库对象

registerDataListCallback(callback) { let that = this if (this.kvManager == null) { try { const config = { userInfo: { userId: '0', userType: 0 }, bundleName: 'com.example.tictactoegame' } factory.createKVManager(config).then((manager) => { that.kvManager = manager that.registerDataListCallback_(callback) }).catch((err) => { }) } catch (e) { } } else { this.registerDataListCallback_(callback) } }

3.创建并获取KVStore数据库

registerDataListCallback_(callback) { let that = this if (that.kvManager == null) { callback() return } if (that.kvStore == null) { try { let options = { createIfMissing: true, encrypt: false, backup: false, autoSync: true, kvStoreType: 1, securityLevel: 3 } this.kvManager.getKVStore(this.STORE_ID, options).then((store) => { that.kvStore = store that.registerDataListCallback(callback) }).catch((err) => { }) } catch (e) { } } else { this.registerDataListCallback(callback) } }

4.订阅指定类型的数据变更通知

registerDataListCallback(callback) { let that = this if (that.kvManager == null) { callback() return } this.kvStore.on('dataChange', 1, function(data) { if (data) { that.arr = data.updateEntries callback() } }) }

5.添加指定类型键值对到数据库

dataChange(key, value) { let that = this try { that.kvStore.put(JSON.stringify(key), JSON.stringify(value)).then((data) => { }).catch((err) => { prompt.showToast({message:'put err:'+JSON.stringify(value)}) })

} catch (e) { } }

5.远程拉起设备app

使用FeatureAbility模块的startAbility接口拉起远程设备app

startAbilityContinuation(deviceId) { let wantValue = { bundleName: 'com.example.tictactoegame', abilityName: 'com.example.tictactoegame.MainAbility', deviceId: deviceId, parameters: { uri: 'pages/Fight' } }; featureAbility.startAbility({ want: wantValue }).then(() => { router.replace({ uri: 'pages/Fight' }) }); }

6.棋局胜负判定

对于棋盘中的任一个格子只存在已落子和未落子两种状态,我们把这两种状态定义为1和0,则九宫格可以看成是一个只有9位的二进制数,胜利状态有八种情况如下,详细代码参考源码Chess.ets:

0b111000000 0b100100100 0b100010001 0b010010010 0b001001001 0b000111000 0b000000111 0b001010100

胜负判定实现如下

isWin() { let x = this.result_X let o = this.result_O if (448 == (x & 448) || 292 == (x & 292) || 273 == (x & 273) || 146 == (x & 146) || 73 == (x & 73) || 56 == (x & 56) || 7 == (x & 7) || 84 == (x & 84)){ this.allIsTrue() return FORK } if (448 == (o & 448) || 292 == (o & 292) || 273 == (o & 273) || 146 == (o & 146) || 73 == (o & 73) || 56 == (o & 56) || 7 == (o & 7) || 84 == (o & 84)) { this.allIsTrue() return CIRCLE } let res = 0; for (let i = 0; i < 9; i++) { if (this.used[i] == false) { res = 1 break } } if (res === 1) { return CONTINUE } return EMPTY }

最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。 

为了能够帮助大家快速掌握**鸿蒙(Harmony NEXT)**应用开发技术知识。在此给大家分享一下我结合鸿蒙最新资料整理出来的鸿蒙南北向开发学习路线以及整理的最新版鸿蒙学习文档资料。

这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(**ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony****多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)**技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料****

鸿蒙(Harmony NEXT)最新学习路线

  • HarmonOS基础技能

  • HarmonOS就业必备技能 
  • HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取