Added Deal 3 more cards button

This commit is contained in:
2023-04-10 20:38:12 +02:00
parent 5665c75030
commit 85fb6a1bc9
3 changed files with 122 additions and 23 deletions

View File

@@ -9,19 +9,93 @@ import Foundation
import SwiftUI
struct SetGame {
private var deck: Array<Card>
private(set) var cardsOnTable: Array<Card>
private(set) var cards: Array<Card>
private(set) var score: Int = 0
mutating func choose(_ card: Card) {
if let chosenIndex = cards.firstIndex(where: {card.id == $0.id}),
!cards[chosenIndex].isMatched,
!cards[chosenIndex].isSelected,
cards[chosenIndex].isOnTheTable
{
cards[chosenIndex].isSelected = true
var chosenCards: Array<Card> = Array()
for c in cards {
if c.isSelected {
chosenCards.append(c)
}
}
if chosenCards.count > 2 {
let chosenCard1 = chosenCards[0]
let chosenCard2 = chosenCards[1]
let chosenCard3 = chosenCards[2]
let color = all3EqualOrAllDifferent(chosenCard1.color, chosenCard2.color, chosenCard3.color)
let shading = all3EqualOrAllDifferent(chosenCard1.shading, chosenCard2.shading, chosenCard3.shading)
let symbol = all3EqualOrAllDifferent(chosenCard1.symbol, chosenCard2.symbol, chosenCard3.symbol)
let numberOnCard = all3EqualOrAllDifferent(chosenCard1.numberOnCard, chosenCard2.numberOnCard, chosenCard3.numberOnCard)
if color && shading && symbol && numberOnCard {
cards[cards.firstIndex(where: {chosenCard1.id == $0.id})!].isMatched = true
cards[cards.firstIndex(where: {chosenCard2.id == $0.id})!].isMatched = true
cards[cards.firstIndex(where: {chosenCard3.id == $0.id})!].isMatched = true
score += 1
if (cardsOnTheTable() < 12) {
addCardsToTable(3)
}
} else {
score -= 1
}
cards[cards.firstIndex(where: {chosenCard1.id == $0.id})!].isSelected = false
cards[cards.firstIndex(where: {chosenCard2.id == $0.id})!].isSelected = false
cards[cards.firstIndex(where: {chosenCard3.id == $0.id})!].isSelected = false
}
}
}
func all3EqualOrAllDifferent<EquatableObject: Equatable>(_ first: EquatableObject, _ second: EquatableObject, _ third: EquatableObject) -> Bool {
(first == second && first == third) || ((first != second && first != third) && second != third)
}
mutating func addCardsToTable(_ numberOfCards: Int) {
print(cards.count, cardsOnTheTable())
let maxCards = cardsOnTheTable() + 3
var i = 0
while cardsOnTheTable() < maxCards && i < 81 {
let card = cards[i]
if (!card.isOnTheTable && !card.isMatched) {
cards[card.id].isOnTheTable = true
}
i += 1
}
}
func cardsOnTheTable() -> Int {
var cardsOnTable = 0
for card in cards {
if (card.isOnTheTable && !card.isMatched) {
cardsOnTable += 1
}
}
return cardsOnTable
}
init() {
var deck = SetGame.createCards()
deck.shuffle()
let cardsOnTable = Array(deck[0..<12])
deck.removeAll { card in
cardsOnTable.contains { $0 == card }
for i in 0..<12 {
deck[i].isOnTheTable = true
}
self.deck = deck
self.cardsOnTable = cardsOnTable
self.cards = deck
print(cards.count)
}
private static func createCards() -> Array<SetGame.Card> {
@@ -41,17 +115,11 @@ struct SetGame {
}
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
}
@@ -62,6 +130,7 @@ struct SetGame {
var color: Color
var isMatched: Bool = false
var isSelected: Bool = false
var isOnTheTable: Bool = false
var numberOnCard: Int
}