// // SetGame.swift // Set // // Created by Oliver Hnát on 09.04.2023. // import Foundation import SwiftUI struct SetGame { private var deck: Array private(set) var cardsOnTable: Array init() { var deck = SetGame.createCards() deck.shuffle() let cardsOnTable = Array(deck[0..<12]) deck.removeAll { card in cardsOnTable.contains { $0 == card } } self.deck = deck self.cardsOnTable = cardsOnTable } private static func createCards() -> Array { let colors: Array = [.blue, .green, .red] var deck: Array = Array() var id = 0 for symbol in CardSymbol.allCases { for shading in CardShading.allCases { for number in 1..<4 { for symbolColor in colors.indices { let newCard = SetGame.Card(id: id, shading: shading, symbol: symbol, color: colors[symbolColor], numberOnCard: number) deck.append(newCard) id += 1 } } } } return deck } mutating func newGame() { var deck = SetGame.createCards() deck.shuffle() let cardsOnTable = Array(deck[0..<12]) deck.removeAll { card in cardsOnTable.contains { $0 == card } } self.deck = deck self.cardsOnTable = cardsOnTable } struct Card: Identifiable, Equatable { var id: Int var shading: CardShading var symbol: CardSymbol var color: Color var isMatched: Bool = false var isSelected: Bool = false var numberOnCard: Int } }