美文网首页
2021-09-22可以翻转备份

2021-09-22可以翻转备份

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

    MemorizeApp.swift----------------

    import SwiftUI
    
    @main
    struct MemorizeApp: App {
        let game = EmojiMemoryGame()
        var body: some Scene {
            WindowGroup {
                ContentView(viewModel: game)
            }
        }
    }
    

    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 {
                    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)
        }
    }
    
    

    MemoryGame.swift-------------

    import Foundation
    
    struct MemoryGame<CardContent> {
        var cards: Array<Card>
        
        mutating func choose(_ card: Card) {
            let chosenIndex = index(of: card)
            cards[chosenIndex].isFaceUp.toggle()
            
            func index(of card: Card) -> Int {
                for index in 0..<cards.count {
                    if cards[index].id == card.id {
                        return index
                        
                    }
                }
                return 0
            }
        }
        
        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
        }
    }
    

    EmojiMemoryGame.swift

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

    相关文章

      网友评论

          本文标题:2021-09-22可以翻转备份

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