美文网首页
2021-09-22

2021-09-22

作者: 脑子 | 来源:发表于2021-09-22 05:26 被阅读0次

ContentView.swift

import Foundation

struct MemoryGame<CardContent> where CardContent: Equatable {
    private(set) var cards: Array<Card>
    
    //唯一朝上的卡的index,Int? = Optional.none,只有一张朝上则匹配
    private var indexOfTheOneAndOnlyFaceUpCard: Int?
    
    mutating func choose(_ card: Card) {
        if let chosenIndex = cards.firstIndex(where: { $0.id == card.id }),
           //判断如果已经朝上,则不能翻下去,朝上的卡不能选
           !cards[chosenIndex].isFaceUp,
           //不能是已经匹配的
           !cards[chosenIndex].isMatched
        {
            //唯一朝上卡的index的内容 是 潜在匹配的index的内容,这两张卡都匹配
            if let potentialMatchIndex = indexOfTheOneAndOnlyFaceUpCard {
                if cards[chosenIndex].content == cards[potentialMatchIndex].content {
                    cards[chosenIndex].isMatched = true
                    cards[potentialMatchIndex].isMatched = true
                }
                //匹配后唯一朝上的卡消失
                indexOfTheOneAndOnlyFaceUpCard = nil
            } else {
                //没匹配上,所有卡都朝下
                //for index in 0..<cards.count { 等于 for index in cards.indices {
                for index in cards.indices {
                    cards[index].isFaceUp = false
                }
                //唯一朝上的卡是我刚选的卡
                indexOfTheOneAndOnlyFaceUpCard = chosenIndex
            }
            //选中的卡翻面
            cards[chosenIndex].isFaceUp.toggle()
        }
  
    }
    
    init(numberOfPairOfCards: Int, createCardContent: (Int) -> CardContent) {
        cards = Array<Card>()
        for pairIndex in 0..<numberOfPairOfCards {
            let content = createCardContent(pairIndex)
            cards.append(Card(content: content, id: pairIndex*2))
            cards.append(Card(content: content, id: pairIndex*2+1))
        }
    }
    
    struct Card:Identifiable {
        var isFaceUp: Bool = false
        var isMatched: Bool = false
        var content: CardContent
        var id: Int
    }
}


ContentView.swift-------------------------

import SwiftUI

struct ContentView: View {
    @ObservedObject var viewModel: EmojiMemoryGame
    var body: some View {
        VStack {
            ScrollView {
                LazyVGrid(columns: [GridItem(.adaptive(minimum: 65))]){
                    ForEach(viewModel.cards) { card in
                        CardView(card: card).aspectRatio(2/3, contentMode: .fit)
                            .onTapGesture {
                                viewModel.choose(card)
                            }
                    }
                }
            }
            .foregroundColor(.red)
        }
        .padding(.horizontal)
        
    }
}

struct CardView: View {
    var card: MemoryGame<String>.Card
    var body: some View {
        ZStack {
            let shape = RoundedRectangle(cornerRadius: 20)
            if card.isFaceUp {
                shape.fill().foregroundColor(.white)
                shape.strokeBorder(lineWidth: 3)
                Text(card.content).font(.largeTitle)
            } else if card.isMatched {
                //透明但还站着空间 卡片不会移动
                shape.opacity(0)
            } else {
                shape.fill()
            }
        }
       
    }
}


struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        let game = EmojiMemoryGame()
        ContentView(viewModel: game)
            .preferredColorScheme(/*@START_MENU_TOKEN@*/.dark/*@END_MENU_TOKEN@*/)
        ContentView(viewModel: game)
            .preferredColorScheme(.light)
    }
}

相关文章

  • 产品经理学习

    1.【学习中】极客《硅谷产品实战36讲》89元 开始时间:2021-09-22 结束时间: 学习目的:了解产...

  • 2021-09-26 思考成长周复盘

    一 时间 2021-09-22 ~ 2021-09-26 二 围绕精力提升所做的事情 五点早起,读书学习 低脂纯素...

  • 晚餐问题

    2021-09-22 晴热 周三 老爸一住院,正常上班上学的我们,似乎没有了做饭的动力。 “猪爸,你明...

  • 第300篇|【岁月守候】此次假日来看,情状甚可为慰。

    ❁/岁月守候(D20-) 2021-09-22,星期三 50)丁香宴客。中午终于约到睿玉到丁香园吃饭。尽管怀着神秘...

  • uniapp 时间格式化 iOS真机显示为NAN

    问题出现:在做微信小程序时,在开发环境下,日期格式2021-09-22 14:29显示正确,并在真机1.0连接测试...

  • 我宽容了一切,也宽容了我自己

    2021-09-22 昨天我感觉好像走过了25000千里长征,走过了好远的路,小宝给我买了电影票一个人看电影一个人...

  • 2021-09-22

    【2021-9-22 农历八月十六 星期三 雨 日更587天】 今天是个重要日子,我们结婚19年,不知道先生还...

  • 2021-09-22

    宿舍楼墙上校园歌唱大赛海报扬起一角,如风吹起的兰色裙摆。顶着正午的烈日,我在报名处填好表格,学姐一幅“你上错了车”...

  • 2021-09-22

    《故事里的人生》179 “‘英明’的国王”与“曹操斩王垕” “‘英...

  • 2021-09-22

    1.感恩老公过节这几天,忙里忙外,给一大家子做饭吃; 2.感恩霖杰老总,配合工作,金融办总在休息时要材料,发给他从...

网友评论

      本文标题:2021-09-22

      本文链接:https://www.haomeiwen.com/subject/eorwgltx.html