【開發(fā)者說】欄目是為HarmonyOS開發(fā)者提供的展示和分享平臺,在這里,大家可以發(fā)表自己的技術(shù)洞察和見解,也可以展示自己的開發(fā)心得和成果。
歡迎大家積極投稿,后臺回復(fù)【投稿】,即可獲得投稿渠道。期待你們的分享~
一
前言
作為一名開發(fā)愛好者,從大了講,我學(xué)習(xí)并進行HarmonyOS相關(guān)開發(fā)是為了能為鴻蒙生態(tài)建設(shè)盡一份綿薄之力,從小了講,就是為了自己的興趣。而萬能卡片是一個讓我非常感興趣的東西。
很多時候我跟別人解釋什么是萬能卡片,都會這么說:"萬能卡片能實現(xiàn)讓你在不用打開app的前提下,在桌面上就能使用到相關(guān)服務(wù)"。有一天,我的朋友跟我說,既然可以體驗到各種服務(wù),那么能直接在桌面上玩游戲嗎?
通過對萬能卡片相關(guān)文檔的閱讀,我認(rèn)為想要實現(xiàn)一些簡單的游戲應(yīng)該沒有問題,思考再三,我決定做一個井字棋小游戲,希望能給各位開發(fā)者提供些開發(fā)思路。
實現(xiàn)效果如下:
可以看到,在桌面上有一個2x2的小卡片,通過兩名玩家輪流下棋的方式,進行井字棋的博弈,結(jié)局分為玩家1勝利、玩家2勝利或者平局,看似簡單,但也實現(xiàn)了朋友提出來的"在桌面上玩游戲"的要求。二
基本知識
想要學(xué)習(xí)這個項目的開發(fā),首先我們要掌握以下幾個知識:
1. HUAWEI DevEco Studio是開發(fā)工具,是華為基于IDEA開源版本打造的開發(fā)平臺,支持頁面預(yù)覽、多端模擬等功能;
2. ArkTS是目前主推的開發(fā)語言,簡潔的語法規(guī)則極大的減少了學(xué)習(xí)成本;
3. 元服務(wù)是華為提出的一種新的概念,首先一個特點就是不用下載,即開即用;其次,元服務(wù)在手機上的表現(xiàn)形式,主要是萬能卡片,通過與萬能卡片的交互實現(xiàn)一些功能,也可以通過卡片作為類似于app的頁面入口實現(xiàn)更多的功能;最后,既然是以萬能卡片為入口的,其形式就具有多樣化的特點,可以是2x2,也可以是1x2、2x4或者4x4。
三
項目創(chuàng)建
1. 建立項目
選擇"Atomic Service"即建立一個元服務(wù)項目,點擊"Next"。

2. 項目目錄
這里有幾個重要的文件,首先是EntryAbility.ts,這個文件對應(yīng)的是UIAbility,通俗的理解就是,當(dāng)用戶想要通過與萬能卡片的交互打開一個類似app頁面的時候,那么打開的頁面就可以看做是一個UIAbility;接著是EntryFromAbility.ts,這個是卡片的Ability,可以做卡片的數(shù)據(jù)更新,或者與UIAbility相關(guān)的交互等;Index.ets就是默認(rèn)打開的頁面了;而WidgetCard.ets則是卡片的頁面;如果想要設(shè)置元服務(wù)的標(biāo)題,可以在AppScope/resources/base/element/string.json中修改value的值。
3. 預(yù)覽器
展開Previewer,預(yù)覽器中可以查看頁面效果,其中Default尺寸與大部分手機的實際效果是相同的。可以方便的查看自己的UI代碼寫出來是什么效果,也可以測試交互代碼,非常方便。

四
項目開發(fā)
以下操作均是在WidgetCard.ets中完成:
1. 繪制棋盤
棋盤的繪制分為三個部分:
首先是背景圖,直接在Column()上進行設(shè)置背景,代碼為:
.backgroundImage($r('app.media.back'))
.backgroundImageSize(ImageSize.Cover)
(左右滑動查看更多)
接著通過循環(huán)渲染,利用Flex布局來繪制格子,這里用到了兩個知識點:
(1)自定義組件
這里的"gezi"就是一個自定義組件,傳入idx,num這兩個參數(shù),再綁定上一個click事件。
(2)循環(huán)渲染
這里需要在棋盤里顯示9個"gezi"組件,最簡單的辦法是寫上9遍基本同樣的代碼,但是這樣既不便于維護,也不美觀,因此可以使用循環(huán)渲染的方法。
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)
(左右滑動查看更多)
然后創(chuàng)建下方的兩個小圖標(biāo),"刷新"用來重置棋盤,而"信息"用來點擊進入小游戲的說明頁。這里對于頁面的跳轉(zhuǎn),使用的是postCardAction方法。
最后再繪制一個結(jié)果顯示頁面,使用條件渲染來控制是否顯示,由于需要覆蓋整個頁面,因此采用了position+zindex的寫法。
if(this.resshow){
//這里繪制一個結(jié)果提示頁面
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();
})
}
(左右滑動查看更多)
最后效果如下:

2. 項目邏輯
井字棋的基本原理非常簡單,就是在橫、豎或者斜線上,同一類棋子排成三個即為勝利,而且整體只有9個格子,所以我們可以直接創(chuàng)建一個一維數(shù)組代表棋盤:
qipan : Array<number> =
[0,0,0,
0,0,0,
0,0,0]
(左右滑動查看更多)
0代表這個格子沒有落子,1代表是"X",2代表是"O",當(dāng)玩家每次落子后,這個數(shù)組中相應(yīng)的數(shù)字就會改變,同時渲染棋盤。
作為一個簡單的小游戲,其勝利的情況是有限的幾種,可以直接將其羅列出來:
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],指的就是,當(dāng)棋盤數(shù)組的第0位、第1位和第2位,這三個數(shù)字相同時,說明有一個玩家勝出了。
每次落子后執(zhí)行_Check方法,對勝利的每一種情況進行循環(huán),檢查當(dāng)前棋盤是否符合其中的任意一種勝利條件,當(dāng)然還有一個條件,那就是要把0排除在勝利條件外,因為0代表的是沒有落子。如果9個格子都填滿了,卻沒有觸發(fā)勝利條件的話,則視為平局。
五
總結(jié)
萬能卡片的潛力實際上是非常巨大的,目前市面上我發(fā)現(xiàn)大部分的卡片主要用來進行信息的展示,還需要在"交互"或者"可玩性"上繼續(xù)挖掘,希望這篇文章能給大家?guī)硪稽c啟發(fā),期待出現(xiàn)更多好玩的萬能卡片。
更多推薦
點擊下方圖片鏈接,查看更多欄目內(nèi)容
-
HarmonyOS
+關(guān)注
關(guān)注
80文章
2153瀏覽量
36044
原文標(biāo)題:【開發(fā)者說】開發(fā)案例分享:萬能卡片也能用來玩游戲
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
回望2025:與162萬開發(fā)者一起,讓AI硬件觸手可及
2025華為開發(fā)者大賽暨開發(fā)者年度會議成功舉辦
2025開源鴻蒙開發(fā)者激勵計劃正式啟動
QCon·上海站HarmonyOS開發(fā)者技術(shù)分論壇:共探鴻蒙開發(fā)新機遇
2025開放原子開發(fā)者大會11月啟幕
HarmonyOSAI編程萬能卡片生成(一)
NVIDIA DRIVE AGX Thor開發(fā)者套件重磅發(fā)布
曙光網(wǎng)絡(luò)SugonRI開發(fā)者社區(qū)正式上線
矽速科技正式入駐 RuyiSDK 開發(fā)者社區(qū),共建 RISC-V 開發(fā)者生態(tài)!
HDC 2025開發(fā)者主題演講精彩回顧
鴻蒙5開發(fā)寶藏案例分享---一多開發(fā)實例(游戲)
Java開發(fā)者必備的效率工具——Perforce JRebel是什么?為什么很多Java開發(fā)者在用?
Arm亮相2025年游戲開發(fā)者大會
全鏈路賦能游戲鴻蒙化適配,鴻蒙游戲開發(fā)者服務(wù)煥新升級
【開發(fā)者說】開發(fā)案例分享:萬能卡片也能用來玩游戲
評論