MemorizeApp.swift ------------------------------------------------------------------------------
import SwiftUI
@main
struct MemorizeApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
ContentView.swift ------------------------------------------------------------------------------
import SwiftUI
struct ContentView: View {
var emojis = ["🚙", "🚗", "⛱", "🎡", "🪝", "🗿", "🛖", "⏱", "☎️", "🎰","🚜","🛴", "✈️"]
@State var emojiCount = 4
var body: some View {
VStack {
ScrollView {
LazyVGrid(columns: [GridItem(.adaptive(minimum: 65))]){
ForEach(emojis[0..<emojiCount], id: \.self) { emoji in
CardView(content: emoji).aspectRatio(2/3, contentMode: .fit)
}
}
}
.foregroundColor(.red)
Spacer()
HStack {
remove
Spacer()
add
}
.font(.largeTitle)
.padding(.horizontal)
}
.padding(.horizontal)
}
var remove: some View {
Button(action:{
if emojiCount > 1{
emojiCount -= 1
}
}, label: {
Image(systemName: "minus.circle")
})
}
var add: some View {
Button(action:{
if emojiCount < emojis.count {
emojiCount += 1
}
}, label: {
Image(systemName: "plus.circle")
})
}
}
struct CardView: View {
var content: String
@State var isFaceUp: Bool = true
var body: some View {
ZStack {
let shape = RoundedRectangle(cornerRadius: 20)
if isFaceUp {
shape.fill().foregroundColor(.white)
shape.strokeBorder(lineWidth: 3)
Text(content).font(.largeTitle)
} else {
shape.fill()
}
}
.onTapGesture {
isFaceUp = !isFaceUp
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.preferredColorScheme(/*@START_MENU_TOKEN@*/.dark/*@END_MENU_TOKEN@*/)
ContentView()
.preferredColorScheme(.light)
}
}
MemoryGame.swift ------------------------------------------------------------------------------
import Foundation
struct MemoryGame<CardContent> {
var cards: Array<Card>
func choose(_ card: Card) {
}
init(numberOfPairOfCards: Int, createCardContent: (Int) -> CardContent ) {
cards = Array<Card>()
for pairIndex in 0..<numberOfPairOfCards {
let content: CardContent = createCardContent(pairIndex)
cards.append(Card(content: content))
cards.append(Card(content: content))
}
}
struct Card {
var isFaceUp: Bool = false
var isMatched: Bool = false
var content: CardContent
}
}
EmojiMemoryGame.swift ------------------------------------------------------------------------------
import SwiftUI
class EmojiMemoryGame {
static var emojis = ["🚙", "🚗", "⛱", "🎡", "🪝", "🗿", "🛖", "⏱", "☎️", "🎰","🚜","🛴", "✈️"]
static func makeMemoryGame() -> MemoryGame<String> {
MemoryGame<String>(numberOfPairOfCards: 4) { pairIndex in EmojiMemoryGame.emojis[pairIndex] }
}
var model: MemoryGame<String> = makeMemoryGame()
var cards: Array<MemoryGame<String>.Card> {
return model.cards
}
}