RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

開發(fā)案例分享:萬能卡片也能用來玩游戲

電子發(fā)燒友開源社區(qū) ? 來源:未知 ? 2023-12-15 16:35 ? 次閱讀
# 開發(fā)者說 #

【開發(fā)者說】欄目是為HarmonyOS開發(fā)者提供的展示和分享平臺,在這里,大家可以發(fā)表自己的技術(shù)洞察和見解,也可以展示自己的開發(fā)心得和成果。

前言

作為一名開發(fā)愛好者,從大了講,我學(xué)習(xí)并進(jìn)行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)效果如下:

wKgaomV8EOyAYFOlACBGlL2rc0k613.gif可以看到,在桌面上有一個2x2的小卡片,通過兩名玩家輪流下棋的方式,進(jìn)行井字棋的博弈,結(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ù)在手機(jī)上的表現(xiàn)形式,主要是萬能卡片,通過與萬能卡片的交互實現(xiàn)一些功能,也可以通過卡片作為類似于app的頁面入口實現(xiàn)更多的功能;最后,既然是以萬能卡片為入口的,其形式就具有多樣化的特點,可以是2x2,也可以是1x2、2x4或者4x4。

項目創(chuàng)建

1. 建立項目

選擇"Atomic Service"即建立一個元服務(wù)項目,點擊"Next"。

wKgaomV8EOyAVDyNAAGCUiCagys985.png

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的值。wKgaomV8EOyAQ1qQAAEOjrVvfKY183.png

3. 預(yù)覽器

展開Previewer,預(yù)覽器中可以查看頁面效果,其中Default尺寸與大部分手機(jī)的實際效果是相同的??梢苑奖愕牟榭醋约旱腢I代碼寫出來是什么效果,也可以測試交互代碼,非常方便。

wKgaomV8EO2ALZ_kAAGJ2czOhA4843.png

項目開發(fā)

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

1. 繪制棋盤

棋盤的繪制分為三個部分:

首先是背景圖,直接在Column()上進(jìn)行設(shè)置背景,代碼為:

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

(左右滑動查看更多)

接著通過循環(huán)渲染,利用Flex布局來繪制格子,這里用到了兩個知識點:

(1)自定義組件

這里的"gezi"就是一個自定義組件,傳入idx,num這兩個參數(shù),再綁定上一個click事件。

(2)循環(huán)渲染

這里需要在棋盤里顯示9個"gezi"組件,最簡單的辦法是寫上9遍基本同樣的代碼,但是這樣既不便于維護(hù),也不美觀,因此可以使用循環(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),"刷新"用來重置棋盤,而"信息"用來點擊進(jìn)入小游戲的說明頁。這里對于頁面的跳轉(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();
  })
}

(左右滑動查看更多)

最后效果如下:

wKgaomV8EO2ADVb0AAHjsU6SQIw395.png

2. 項目邏輯

井字棋的基本原理非常簡單,就是在橫、豎或者斜線上,同一類棋子排成三個即為勝利,而且整體只有9個格子,所以我們可以直接創(chuàng)建一個一維數(shù)組代表棋盤:

@State 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方法,對勝利的每一種情況進(jìn)行循環(huán),檢查當(dāng)前棋盤是否符合其中的任意一種勝利條件,當(dāng)然還有一個條件,那就是要把0排除在勝利條件外,因為0代表的是沒有落子。如果9個格子都填滿了,卻沒有觸發(fā)勝利條件的話,則視為平局。

總結(jié)

萬能卡片的潛力實際上是非常巨大的,目前市面上我發(fā)現(xiàn)大部分的卡片主要用來進(jìn)行信息的展示,還需要在"交互"或者"可玩性"上繼續(xù)挖掘,希望這篇文章能給大家?guī)硪稽c啟發(fā),期待出現(xiàn)更多好玩的萬能卡片。


更多熱點文章閱讀
  • 大佬分享!基于OpenHarmony操作系統(tǒng)無人機(jī)
  • DevEco Studio 3.1 Release | 動態(tài)共享包開發(fā),編譯更快,包更小
  • Cocos攜手樂元素,《開心消消樂》成功移植OpenHarmony
  • 開源樣例!基于小凌派RK2206的工地檢測平臺設(shè)計
  • DevEco Device Tool 3.1 Release新版本發(fā)布


原文標(biāo)題:開發(fā)案例分享:萬能卡片也能用來玩游戲

文章出處:【微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 電子發(fā)燒友
    +關(guān)注

    關(guān)注

    33

    文章

    549

    瀏覽量

    32958
  • 開源社區(qū)
    +關(guān)注

    關(guān)注

    0

    文章

    94

    瀏覽量

    406

原文標(biāo)題:開發(fā)案例分享:萬能卡片也能用來玩游戲

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    萬能轉(zhuǎn)換開關(guān)的作用有哪些

    萬能轉(zhuǎn)換開關(guān)是一種廣泛應(yīng)用于工業(yè)自動化、電力系統(tǒng)、機(jī)械設(shè)備等領(lǐng)域的電氣元件。它具有多種功能和優(yōu)點,能夠?qū)崿F(xiàn)對電路的控制、保護(hù)和轉(zhuǎn)換。 電路控制功能 萬能轉(zhuǎn)換開關(guān)最基本的作用是對電路進(jìn)行控制。它可
    的頭像 發(fā)表于 08-20 10:18 ?1043次閱讀

    萬能轉(zhuǎn)換開關(guān)的定位結(jié)構(gòu)一般采用哪些

    直接影響到開關(guān)的穩(wěn)定性、可靠性和使用壽命。 一、萬能轉(zhuǎn)換開關(guān)定位結(jié)構(gòu)的類型 1.1 機(jī)械式定位結(jié)構(gòu) 機(jī)械式定位結(jié)構(gòu)是萬能轉(zhuǎn)換開關(guān)中最常見的一種定位方式,它主要依靠機(jī)械結(jié)構(gòu)的相互作用來實現(xiàn)開關(guān)的定位。機(jī)械式定位結(jié)構(gòu)主要
    的頭像 發(fā)表于 08-20 10:12 ?2503次閱讀

    萬能斷路器參數(shù)設(shè)置的基本原則

    萬能斷路器是一種廣泛應(yīng)用于電力系統(tǒng)、工業(yè)自動化和建筑電氣等領(lǐng)域的保護(hù)和控制設(shè)備。它具有過載保護(hù)、短路保護(hù)、欠壓保護(hù)等多種功能,能夠有效地保護(hù)電氣設(shè)備和線路的安全運(yùn)行。為了確保萬能斷路器的正常工作
    的頭像 發(fā)表于 08-14 15:50 ?929次閱讀

    萬能斷路器跳閘后如何復(fù)位

    萬能斷路器是一種廣泛應(yīng)用于電力系統(tǒng)中的保護(hù)裝置,其主要作用是在電路發(fā)生故障時,能夠迅速切斷電路,以保護(hù)電氣設(shè)備和人身安全。然而,在實際使用過程中,萬能斷路器可能會出現(xiàn)跳閘現(xiàn)象,這時候就需要進(jìn)行復(fù)位
    的頭像 發(fā)表于 07-31 15:24 ?1587次閱讀

    萬能斷路器參數(shù)如何設(shè)置

    萬能斷路器是一種廣泛應(yīng)用于電力系統(tǒng)、工業(yè)自動化和建筑電氣領(lǐng)域的電氣設(shè)備,其主要功能是在電路中起到過載、短路、欠壓等保護(hù)作用。正確設(shè)置萬能斷路器參數(shù)對于確保設(shè)備安全運(yùn)行和提高系統(tǒng)可靠性具有重要意義
    的頭像 發(fā)表于 07-31 15:19 ?1825次閱讀

    簡述萬能電橋測量電容的步驟

    萬能電橋是一種測量電感和電容的儀器,具有測量范圍廣、精度高、操作簡便等特點。在測量電容時,萬能電橋可以準(zhǔn)確地測量出電容的值,為電子電路設(shè)計和維修提供了重要的參考數(shù)據(jù)。下面介紹萬能電橋測量電容的步驟
    的頭像 發(fā)表于 07-26 09:58 ?866次閱讀

    python函數(shù)的萬能參數(shù)

    我們通過一個簡單的事例來展示一下函數(shù)的萬能參數(shù),我們先寫一個最簡單的函數(shù)。
    的頭像 發(fā)表于 07-17 14:56 ?329次閱讀
    python函數(shù)的<b class='flag-5'>萬能</b>參數(shù)

    【新品體驗】核桃派(WalnutPi)ZeroW開發(fā)板免費(fèi)試用

    核桃派(WalnutPi)ZeroW設(shè)計、研發(fā)和制造均來源于中國,其定位是一款高性價比而且功能齊全的卡片電腦(SBC),尺寸兼容樹莓派。是一款性能非常強(qiáng)大的Linux開發(fā)板,你可以使用它上網(wǎng)、玩游戲、學(xué)習(xí)編程和創(chuàng)造自己的電子產(chǎn)品
    發(fā)表于 07-05 15:36

    萬能表如何測量電瓶

    電瓶作為汽車、摩托車等交通工具的重要能源儲存裝置,其性能的好壞直接影響到車輛的正常運(yùn)行。因此,定期檢查電瓶的狀態(tài),確保其電量充足、性能穩(wěn)定,是每位車主都應(yīng)重視的事項。在眾多的電瓶檢測工具中,萬能
    的頭像 發(fā)表于 05-20 17:02 ?1461次閱讀

    玩游戲選天璣!聯(lián)發(fā)科天璣游戲技術(shù)推動游戲生態(tài)高速發(fā)展

    等生態(tài)合作伙伴,共同研討移動游戲領(lǐng)域的變革趨勢,并為解決當(dāng)前移動游戲面臨的挑戰(zhàn)提供了星速引擎自適應(yīng)軟件開發(fā)套件和硬件光線追蹤技術(shù)解決方案,不斷賦于高速擴(kuò)張的天璣
    的頭像 發(fā)表于 05-07 14:21 ?534次閱讀
    <b class='flag-5'>玩游戲</b>選天璣!聯(lián)發(fā)科天璣<b class='flag-5'>游戲</b>技術(shù)推動<b class='flag-5'>游戲</b>生態(tài)高速發(fā)展

    OpenHarmony開發(fā)案例:【電影卡片

    基于元服務(wù)卡片的能力,實現(xiàn)帶有卡片的電影應(yīng)用,介紹卡片開發(fā)過程和生命周期實現(xiàn)。
    的頭像 發(fā)表于 04-15 17:53 ?1257次閱讀
    OpenHarmony<b class='flag-5'>開發(fā)案</b>例:【電影<b class='flag-5'>卡片</b>】

    OpenHarmony開發(fā)案例:【計步器卡片

    基于Stage模型實現(xiàn)帶有卡片的計步應(yīng)用,用于介紹卡片開發(fā)及生命周期實現(xiàn)。
    的頭像 發(fā)表于 04-15 09:22 ?694次閱讀
    OpenHarmony<b class='flag-5'>開發(fā)案</b>例:【計步器<b class='flag-5'>卡片</b>】

    鴻蒙OS開發(fā)案例:【Stage模型卡片

    本示例展示了Stage模型卡片提供方的創(chuàng)建與使用。
    的頭像 發(fā)表于 04-09 17:13 ?984次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)案</b>例:【Stage模型<b class='flag-5'>卡片</b>】

    示波器可以用來玩游戲嗎?

    示波器儀器儀表
    安泰儀器維修
    發(fā)布于 :2024年02月27日 17:29:52

    萬能遙控器的設(shè)置和使用方法

    萬能遙控器是一種能夠控制不同品牌電器的設(shè)備,它可以將多個遙控器的功能整合到一個遙控器上,方便用戶操作。在本文中,我將詳細(xì)介紹萬能遙控器的設(shè)置和使用方法。 設(shè)置萬能遙控器 步驟一:準(zhǔn)備工作 在開始設(shè)置
    的頭像 發(fā)表于 01-24 10:57 ?1.5w次閱讀
    RM新时代网站-首页