diff --git a/Set/SetGame.swift b/Set/SetGame.swift index 6c6afa0..6499c04 100644 --- a/Set/SetGame.swift +++ b/Set/SetGame.swift @@ -32,6 +32,7 @@ struct SetGame { let chosenCard1 = chosenCards[0] let chosenCard2 = chosenCards[1] let chosenCard3 = chosenCards[2] + let chosenCards = [chosenCard1, chosenCard2, chosenCard3] let color = all3EqualOrAllDifferent(chosenCard1.color, chosenCard2.color, chosenCard3.color) let shading = all3EqualOrAllDifferent(chosenCard1.shading, chosenCard2.shading, chosenCard3.shading) @@ -40,21 +41,19 @@ struct SetGame { 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 + for chosenCard in chosenCards { + cards[cards.firstIndex(where: {chosenCard.id == $0.id})!].isMatched = true + } score += 1 - if (cardsOnTheTable() < 12) { - addCardsToTable(3) + if (cardsOnTheTable < GameConstants.cardsOnTableInTheBeggining) { + addCardsToTable(GameConstants.numberOfCardsToDraw) } } 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 - - + for chosenCard in chosenCards { + cards[cards.firstIndex(where: {chosenCard.id == $0.id})!].isSelected = false + } } } } @@ -64,38 +63,39 @@ struct SetGame { } mutating func addCardsToTable(_ numberOfCards: Int) { - print(cards.count, cardsOnTheTable()) - let maxCards = cardsOnTheTable() + 3 var i = 0 - while cardsOnTheTable() < maxCards && i < 81 { + var cardsAdded = 0 + while cardsAdded < numberOfCards && i < cards.count { let card = cards[i] if (!card.isOnTheTable && !card.isMatched) { - cards[card.id].isOnTheTable = true + let cardIndexToBeModified = cards.firstIndex(where: {$0.id == card.id}) + if (cardIndexToBeModified != nil) { + cards[cardIndexToBeModified!].isOnTheTable = true + cardsAdded += 1 + } + } i += 1 } } - func cardsOnTheTable() -> Int { - var cardsOnTable = 0 - for card in cards { - if (card.isOnTheTable && !card.isMatched) { - cardsOnTable += 1 - } + var displayedCards: Array { + cards.filter { card in + card.isOnTheTable && !card.isMatched } - return cardsOnTable } - + var cardsOnTheTable: Int { + cards.filter({$0.isOnTheTable && !$0.isMatched}).count + } init() { var deck = SetGame.createCards() deck.shuffle() - for i in 0..<12 { + for i in 0.. Array { @@ -104,7 +104,7 @@ struct SetGame { var id = 0 for symbol in CardSymbol.allCases { for shading in CardShading.allCases { - for number in 1..<4 { + for number in 1.. { - var cardsOnTable: Array = Array() - for card in model.cards { - if (card.isOnTheTable && !card.isMatched) { - cardsOnTable.append(card) - } - } - return cardsOnTable +// var cardsOnTable: Array = Array() +// for card in model.cards { +// if (card.isOnTheTable && !card.isMatched) { +// cardsOnTable.append(card) +// } +// } +// return cardsOnTable + model.displayedCards } func newGame() {