该代码实现了一个9宫格卡片翻牌游戏。使用ArkUI框架,定义了一个包含9张卡片(3x3网格)的界面,每张卡片初始显示背面图片。点击卡片会翻转显示正面图片,并将已翻转卡片索引存储在openedCards数组中。当所有9张卡片都被翻转后(allOpened=true),可以点击已翻转卡片使其恢复背面状态。组件使用Grid布局管理卡片位置,通过ForEach动态渲染卡片,并根据openedCards状态控制卡片显隐逻辑。
@Entry
@Component
struct Index49 {
  @State openedCards: number[] = []
  @State images: Resource[] = [
    $r('app.media.f1'),
    $r('app.media.f2'),
    $r('app.media.f3'),
    $r('app.media.f4'),
    $r('app.media.f5'),
    $r('app.media.f6'),
    $r('app.media.f7'),
    $r('app.media.f8'),
    $r('app.media.f9')
  ]
  @State allOpened: boolean = false

  build() {
    Column() {
      Grid() {
        ForEach([0, 1, 2, 3, 4, 5, 6, 7, 8], (item: number) => {
          GridItem() {
            if (this.openedCards.includes(item)) {
              Image(this.images[item])
                .objectFit(ImageFit.Fill)
                .onClick(() => {

                  if (this.allOpened) {
                    this.openedCards = this.openedCards.filter(card => card !== item)
                  }
                })
            } else {
              Image($r('app.media.kapian'))
                .objectFit(ImageFit.Fill)
                .border({ width: 1 })
                .onClick(() => {
                  this.openedCards = [...this.openedCards, item]

                  if (this.openedCards.length === 9) {
                    this.allOpened = true
                  }
                })
            }
          }
        })
      }
      .columnsTemplate('1fr 1fr 1fr')
      .rowsTemplate('1fr 1fr 1fr')
      .width('100%')
      .height('100%')
      .backgroundColor(Color.White)
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐