美文网首页
2022-04-20 匹配上了

2022-04-20 匹配上了

作者: 脑子 | 来源:发表于2022-04-20 05:00 被阅读0次

import SwiftUI


struct ContentView: View {
    @ObservedObject var viewModel: EmoojiMemoryGame
    
    var body: some View {
        
        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 = EmoojiMemoryGame()
        ContentView(viewModel: game)
            .preferredColorScheme(/*@START_MENU_TOKEN@*/.dark/*@END_MENU_TOKEN@*/)
        ContentView(viewModel: game)
            .preferredColorScheme(.light)
    }
}

EmojiMemoryGame.swift


import SwiftUI

class EmoojiMemoryGame: ObservableObject {
    
    static var emojis = ["🚙", "🚗", "⛱", "🎡", "🪝", "🗿", "🛖", "⏱", "☎️", "🎰","🚜","🛴", "✈️"]
    
    static func makeMemoryGame() -> MemoryGame<String> {
        MemoryGame<String>(numberOfPairOfCards: 4) {pairIndex in
            emojis[pairIndex]
        }
    }
    
    @Published private var model: MemoryGame<String> = makeMemoryGame()
    
    var cards: Array<MemoryGame<String>.Card> {
        model.cards
    }
    
    //MARK: Indent(s)
    func choose(_ card: MemoryGame<String>.Card) {
        model.choose(card)
    }
}

import Foundation

struct MemoryGame<CardContent> where CardContent: Equatable {
    private(set) var cards: Array<Card>
    
    private var indexOfTheOneAndOnlyFaceUpCard: Int?
  
    
    mutating func choose(_ card: Card) {
        if let chosenIndex = cards.firstIndex(where: {$0.id == card.id}), !cards[chosenIndex].isMatched,
            !cards[chosenIndex].isFaceUp
        {
            //匹配上了的规则
            if let potentialMatchIndex = indexOfTheOneAndOnlyFaceUpCard {
                if cards[chosenIndex].content == cards[potentialMatchIndex].content {
                    cards[chosenIndex].isMatched = true
                    cards[potentialMatchIndex].isMatched = true
                }
                //匹配上了则唯一朝上卡的index为nil,不存在了
                indexOfTheOneAndOnlyFaceUpCard = nil
            } else {
                //没匹配上则所有卡都朝下
                for index in cards.indices {
                    cards[index].isFaceUp = false
                }
                //唯一朝上卡的index就是你选中的
                indexOfTheOneAndOnlyFaceUpCard = chosenIndex
            }

        cards[chosenIndex].isFaceUp.toggle()
        }
    }
    
    init(numberOfPairOfCards: Int, createCardContent:(Int) -> CardContent) {
        cards = []
        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
    }
}

相关文章

  • 2022-04-20 匹配上了

    EmojiMemoryGame.swift

  • 出路

    2022-04-20 昨天有消息称某某要驻外去,着实惊了我一下,没想到这么突然。与她来说,孩子已经上了高中,马上高...

  • 橙子的ScalersTalk第六轮新概念朗读持续力训练Day 1

    练习材料:[Day 2764 2022-04-20] L44-3: Speed andcomfort For a ...

  • 孩子通过症状获得自我掌控权

    中原焦点团队 坚持分享1378天 2022-04-20 今晚,在网初34期课上,刘老师在答疑解惑时讲到:“很多...

  • 2022-04-20

    【年度健康社群-精进计划打卡】先搞100天 2022-04-20 ,18/100 ,叶子 精进内容:站桩60分钟 ...

  • 亲子阅读篇(七十一)

    书名:《可爱动物》 作者:海豚低幼儿馆 分类:科普 阅读时间:2022-04-20 一、绘本简介 本书以动物为主题...

  • 杨素芳 中原焦点团队 高五,坚持分享1556天 2022-04-20 稳是定海神针。这句话不知听了多少遍,可是...

  • 2022-04-20

    2022-04-20坚持分享第1298天 今日读书《知行合一2》P32-36,感悟:意志独立方有自尊。根据历史故事...

  • 2022-04-20

    2022-04-20坚持分享第1298天 今日读书《知行合一2》P32-36,感悟:意志独立方有自尊。根据历史故事...

  • 全面复课

    2022-04-20 阴 周三 “好家伙,这么大一个行李箱!”早上,当宝贝从房间拖出一个平时只有外出...

网友评论

      本文标题:2022-04-20 匹配上了

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