0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【开发者说】开发案例分享:万能卡片也能用来玩游戏

HarmonyOS开发者 来源:未知 2023-11-30 21:15 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

# 开发者说 #

【开发者说】栏目是为HarmonyOS开发者提供的展示和分享平台,在这里,大家可以发表自己的技术洞察和见解,也可以展示自己的开发心得和成果。

欢迎大家积极投稿,后台回复【投稿】,即可获得投稿渠道。期待你们的分享~

前言

作为一名开发爱好者,从大了讲,我学习并进行HarmonyOS相关开发是为了能为鸿蒙生态建设尽一份绵薄之力,从小了讲,就是为了自己的兴趣。而万能卡片是一个让我非常感兴趣的东西。

很多时候我跟别人解释什么是万能卡片,都会这么说:"万能卡片能实现让你在不用打开app的前提下,在桌面上就能使用到相关服务"。有一天,我的朋友跟我说,既然可以体验到各种服务,那么能直接在桌面上玩游戏吗?

通过对万能卡片相关文档的阅读,我认为想要实现一些简单的游戏应该没有问题,思考再三,我决定做一个井字棋小游戏,希望能给各位开发者提供些开发思路。

实现效果如下:

wKgaomVojAOAYiAoACBGlL2rc0k224.gif可以看到,在桌面上有一个2x2的小卡片,通过两名玩家轮流下棋的方式,进行井字棋的博弈,结局分为玩家1胜利、玩家2胜利或者平局,看似简单,但也实现了朋友提出来的"在桌面上玩游戏"的要求。

基本知识

想要学习这个项目的开发,首先我们要掌握以下几个知识:

1. HUAWEI DevEco Studio是开发工具,是华为基于IDEA开源版本打造的开发平台,支持页面预览、多端模拟等功能;

2. ArkTS是目前主推的开发语言,简洁的语法规则极大的减少了学习成本;

3. 元服务是华为提出的一种新的概念,首先一个特点就是不用下载,即开即用;其次,元服务在手机上的表现形式,主要是万能卡片,通过与万能卡片的交互实现一些功能,也可以通过卡片作为类似于app的页面入口实现更多的功能;最后,既然是以万能卡片为入口的,其形式就具有多样化的特点,可以是2x2,也可以是1x2、2x4或者4x4。

项目创建

1. 建立项目

选择"Atomic Service"即建立一个元服务项目,点击"Next"。

wKgaomVojAOAS4YvAAGCUiCagys881.png

2. 项目目录

这里有几个重要的文件,首先是EntryAbility.ts,这个文件对应的是UIAbility,通俗的理解就是,当用户想要通过与万能卡片的交互打开一个类似app页面的时候,那么打开的页面就可以看做是一个UIAbility;接着是EntryFromAbility.ts,这个是卡片的Ability,可以做卡片的数据更新,或者与UIAbility相关的交互等;Index.ets就是默认打开的页面了;而WidgetCard.ets则是卡片的页面;如果想要设置元服务的标题,可以在AppScope/resources/base/element/string.json中修改value的值。wKgaomVojAOAAEHaAAEOjrVvfKY279.png

3. 预览器

展开Previewer,预览器中可以查看页面效果,其中Default尺寸与大部分手机的实际效果是相同的。可以方便的查看自己的UI代码写出来是什么效果,也可以测试交互代码,非常方便。

wKgaomVojASAEDEFAAGJ2czOhA4219.png

项目开发

以下操作均是在WidgetCard.ets中完成:

1. 绘制棋盘

棋盘的绘制分为三个部分:

首先是背景图,直接在Column()上进行设置背景,代码为:

.backgroundImage($r('app.media.back'))
.backgroundImageSize(ImageSize.Cover)

(左右滑动查看更多)

接着通过循环渲染,利用Flex布局来绘制格子,这里用到了两个知识点:

(1)自定义组件

这里的"gezi"就是一个自定义组件,传入idx,num这两个参数,再绑定上一个click事件。

(2)循环渲染

这里需要在棋盘里显示9个"gezi"组件,最简单的办法是写上9遍基本同样的代码,但是这样既不便于维护,也不美观,因此可以使用循环渲染的方法。

Flex({wrap:FlexWrap.Wrap}){
  ForEach(this.qipan,(item,idx)=>{
    gezi({
      idx:idx,
      num:item,
      click:()=>{
        if(!this.canplay)return;
        let n = this.qipan[idx];
        if(n > 0)return;
        this.qipan[idx] = this.shunxv;
        this.shunxv = this.shunxv == 1 ? 2 : 1;
        //检查
        this._Check();
      }
    })
  })
}.width(35*3)
.height(35*3)

(左右滑动查看更多)

然后创建下方的两个小图标,"刷新"用来重置棋盘,而"信息"用来点击进入小游戏的说明页。这里对于页面的跳转,使用的是postCardAction方法。

最后再绘制一个结果显示页面,使用条件渲染来控制是否显示,由于需要覆盖整个页面,因此采用了position+zindex的写法。


	
if(this.resshow){
  //这里绘制一个结果提示页面
  Column(){
    Text(this.res).fontSize(20).fontColor('white')
  }
  .backgroundColor('rgba(0,0,0,0.3)')
  .height('100%')
  .width('100%')
  .position({x:0,y:0})
  .zIndex(1)
  .alignItems(HorizontalAlign.Center)
  .justifyContent(FlexAlign.Center)
  .onClick(()=>{
    this._Init();
  })
}

(左右滑动查看更多)

最后效果如下:

wKgaomVojASACC3nAAHjsU6SQIw478.png

2. 项目逻辑

井字棋的基本原理非常简单,就是在横、竖或者斜线上,同一类棋子排成三个即为胜利,而且整体只有9个格子,所以我们可以直接创建一个一维数组代表棋盘:

@State qipan : Array<number> =
  [0,0,0,
   0,0,0,
0,0,0]

(左右滑动查看更多)

0代表这个格子没有落子,1代表是"X",2代表是"O",当玩家每次落子后,这个数组中相应的数字就会改变,同时渲染棋盘。

作为一个简单的小游戏,其胜利的情况是有限的几种,可以直接将其罗列出来:

constwin=[[0,1,2],[3,4,5],[6,7,8],[0,3,6],[1,4,7],[2,5,8],[0,4,8],[2,4,6]];

(左右滑动查看更多)

简单解释一下,比如第一个[0,1,2],指的就是,当棋盘数组的第0位、第1位和第2位,这三个数字相同时,说明有一个玩家胜出了。

每次落子后执行_Check方法,对胜利的每一种情况进行循环,检查当前棋盘是否符合其中的任意一种胜利条件,当然还有一个条件,那就是要把0排除在胜利条件外,因为0代表的是没有落子。如果9个格子都填满了,却没有触发胜利条件的话,则视为平局。

总结

万能卡片的潜力实际上是非常巨大的,目前市面上我发现大部分的卡片主要用来进行信息的展示,还需要在"交互"或者"可玩性"上继续挖掘,希望这篇文章能给大家带来一点启发,期待出现更多好玩的万能卡片。

更多推荐

wKgaomVojASAY-VmAADXrK0uGFA180.gif点击下方图片链接,查看更多栏目内容


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HarmonyOS
    +关注

    关注

    80

    文章

    2156

    浏览量

    36277

原文标题:【开发者说】开发案例分享:万能卡片也能用来玩游戏

文章出处:【微信号:HarmonyOS_Dev,微信公众号:HarmonyOS开发者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    回望2025:与162开发者一起,让AI硬件触手可及

    致每一位涂鸦开发者:2025农历年即将画上句号。这一年,AI浪潮席卷全球,AI硬件赛道迎来前所未有的机遇与挑战。而你们——162涂鸦开发者,用一行行代码、一个个创意,让AI真正走进千家
    的头像 发表于 02-12 18:59 363次阅读
    回望2025:与162<b class='flag-5'>万</b><b class='flag-5'>开发者</b>一起,让AI硬件触手可及

    2025华为开发者大赛暨开发者年度会议成功举办

    12月27日-12月28日,以“成就AI原生时代先锋开发者”为主题的2025华为开发者大赛暨开发者年度会议在上海华为练秋湖研发中心举办。本次会议旨在汇聚先锋开发力量,搭建开放共赢的生态
    的头像 发表于 12-31 13:32 965次阅读

    2025开源鸿蒙开发者激励计划正式启动

    11月21日,2025开放原子开发者大会盛大启幕,聚焦“AI共智,开源共享”主题,吸引了来自全球的开发者、企业技术领袖、社区维护及高校科研力量参会。作为大会的重要组成部分,开源鸿蒙技术分论坛同期
    的头像 发表于 11-27 14:44 800次阅读

    QCon·上海站HarmonyOS开发者技术分论坛:共探鸿蒙开发新机遇

    当前,AI 技术重构开发逻辑、多设备协同成为技术主流,鸿蒙开发能力正迎来从“能用好用”到“实用便捷”的关键跃迁。10月24日,2025年QCon全球软件开发大会上海站HarmonyOS
    的头像 发表于 10-24 15:59 968次阅读
    QCon·上海站HarmonyOS<b class='flag-5'>开发者</b>技术分论坛:共探鸿蒙<b class='flag-5'>开发</b>新机遇

    2025开放原子开发者大会11月启幕

    开发者年度盛会即将登场!2025开放原子开发者大会将于11月21-22日,在北京北人亦创国际会展中心盛大召开。大会以“一切为了开发者”为主题,汇聚全球开源智慧——国内外优秀开发者、学术
    的头像 发表于 10-24 14:05 1085次阅读

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ISP图像处理开发案

    创龙科技研发的 TL3588-EVM 评估板具备强大视频处理能力,可满足多场景视频开发需求。为助力开发者快速上手,本文整理 7 个实用视频开发案例,涵盖从采集到显示的全流程,详细说明各案例的硬件连接、参数配置与代码解析,帮助
    的头像 发表于 10-21 15:57 1090次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业<b class='flag-5'>开发</b>板—ISP图像处理<b class='flag-5'>开发案</b>例

    HarmonyOSAI编程万能卡片生成(二)

    工程保存完成后,工程中会新增如下卡片相关文件: 自定义配置逻辑代码 逻辑代码包含实现卡片数据交互和卡片事件两类。 卡片数据交互:触发卡片页面
    发表于 09-09 16:10

    HarmonyOSAI编程万能卡片生成(一)

    基于AI大模型理解开发者卡片需求信息,通过对话式的交互智能生成HarmonyOS万能卡片工程。 使用约束 建议从以下维度描述卡片需求: 当
    发表于 09-08 17:09

    NVIDIA DRIVE AGX Thor开发者套件重磅发布

    这款由 NVIDIA DriveOS 7 驱动的开发者套件能够帮助开发者们打造出更安全的智能汽车和交通解决方案。
    的头像 发表于 09-04 11:20 1572次阅读

    曙光网络SugonRI开发者社区正式上线

    在人工智能与工业深度融合的大潮中,工业软件正在成为推动产业升级的关键引擎。为了让更多开发者快速掌握工业级编程技术、共享行业实践成果,曙光网络正式推出开发者社区——曙睿(SugonRI)开发者网站
    的头像 发表于 09-04 09:58 1109次阅读

    NVIDIA Jetson AGX Thor开发者套件重磅发布

    开发者与未来创造们,准备好迎接边缘AI的史诗级革新了吗?NVIDIA以颠覆性技术再次突破极限,正式推出Jetson AGX Thor开发者套件!作为继传奇产品Jetson AGX Orin之后
    的头像 发表于 08-28 14:31 1730次阅读

    矽速科技正式入驻 RuyiSDK 开发者社区,共建 RISC-V 开发者生态!

    近日,深圳矽速科技正式入驻RuyiSDK开发者社区,携手社区共同推动RISC-V技术的发展与广泛应用,为开发者提供一个更加便捷高效的开发环境。关于RuyiSDKRuyiSDK是中国科学院软件研究所
    的头像 发表于 07-10 11:00 1368次阅读
    矽速科技正式入驻 RuyiSDK <b class='flag-5'>开发者</b>社区,共建 RISC-V <b class='flag-5'>开发者</b>生态!

    HDC 2025开发者主题演讲精彩回顾

    日前,华为开发者大会(HDC 2025)进入第二天,行业领袖、技术专家、全球开发者齐聚现场,共同见证这场科技盛会。在开发者主题演讲中,华为技术专家深入解析HarmonyOS的最新技术、体验创新以及
    的头像 发表于 07-09 11:20 1464次阅读

    鸿蒙5开发宝藏案例分享---一多开发实例(游戏

    显示剩余时间) 好友动态瀑布流(滑动查看玩家相册) 更离谱的是有个团队基于这个案例,三天就做出了《赛博菜园》的偷菜提醒卡片,现在日活涨了300%! 五、避坑指南:文档的正确打开方式 在
    发表于 06-03 18:22

    Java开发者必备的效率工具——Perforce JRebel是什么?为什么很多Java开发者在用?

    Perforce JRebel是一款Java开发效率工具,旨在帮助java开发人员更快地编写更好的应用程序。JRebel可即时重新加载对代码的修改,无需重启或重新部署应用程序,就能让开发者即时看到代码更改的效果,从而缩短
    的头像 发表于 04-27 13:44 960次阅读
    Java<b class='flag-5'>开发者</b>必备的效率工具——Perforce JRebel是什么?为什么很多Java<b class='flag-5'>开发者</b>在用?