美文网首页
2021-09-27

2021-09-27

作者: 脑子 | 来源:发表于2021-09-27 06:37 被阅读0次
//  MemorizeApp.swift
//  Memorize

import SwiftUI

@main
struct MemorizeApp: App {
    private let game = EmojiMemoryGame()
    var body: some Scene {
        WindowGroup {
            EmojiMemoryGameView(game: game)
        }
    }
}
//  EmojiMemoryGameView.swift



import SwiftUI


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

struct CardView: View {
    var card: EmojiMemoryGame.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 EmojiMemoryGameView_Previews: PreviewProvider {
    static var previews: some View {
        let game = EmojiMemoryGame()
        EmojiMemoryGameView(game: game)
            .preferredColorScheme(/*@START_MENU_TOKEN@*/.dark/*@END_MENU_TOKEN@*/)
        EmojiMemoryGameView(game: game)
            .preferredColorScheme(.light)
    }
}

//  MemoryGame.swift

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 potentialIndex = indexOfTheOneAndOnlyFaceUpCard {
                if cards[chosenIndex].content == cards[potentialIndex].content {
                    cards[chosenIndex].isMatched = true
                    cards[potentialIndex].isMatched = true
                }
                indexOfTheOneAndOnlyFaceUpCard = nil
            } else {
                for index in cards.indices {
                    cards[index].isFaceUp = false
                }
                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 = false
        var isMatched = false
        var content: CardContent
        var id: Int
    }
}

//  EmojiMemoryGame.swift

import SwiftUI

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

相关文章

  • 2021-09-27

    2021-09-27 小雨 学习 看书1个小时 《mysql》数据结构 索引章节 健身 今天轮休 吉他 没有练习 ...

  • 2021-10-03 思考成长周复盘

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

  • 关于肥肉的话题

    2021-09-27 晴热 周一 对于晚修的饭菜,宝贝终于有些不满意了。 “感觉肉菜,好多的肥肉啊...

  • 第308篇|【岁月守候】人生如梦,归途如虹,美好可期!

    ❁/岁月守候(D25-28) 2021-09-27,星期一,阴 59)琐事杂谭。拖鞋烂了,说明我们走过了许多艰难的...

  • 2021-09-28

    2021-09-27 【打卡天数】:第1208天 【学习心得】 学问之功不在日增而在日减。 人的格局与境界随时随地...

  • 【4.2.3】服务器安装 Docker Swarm中搭建 别拿

    时间:2021-09-27地点:单位不方便说,   单位老兄需要处理数据拿redis作为备份的数据库,这事不知道大...

  • 我的

    心血管超声及心功能检查科基本信息:汤我武 男 85岁检查项目:心脏常规(1)检查日期:2021-09-27检查地点...

  • 心潮起伏的一天

    2021-09-27 周一 晴 今天周一,晴。最高气温32度,外面依然很热。早上34路晚了5分钟,导致我到东门...

  • 2021-09-27操作参考

    2021-09-27操作参考 证券:叶星辰加3000。 基建:叶星辰证券、中证500转机建14万份+2万份。鬼才转...

  • 故乡的月明

    2021-09-27 今年国庆可以外出了,我很想念已经70岁的老母亲,想着趁着过节多回去陪她两天,结果没买到票,老...

网友评论

      本文标题:2021-09-27

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