From eef3ecc47eacde723a6c7472aec4930918192117 Mon Sep 17 00:00:00 2001 From: ChrisBtt Date: Sat, 7 May 2016 13:57:19 +0200 Subject: [PATCH 1/3] Ich kriege hier einen Bad Exe Error beim Erstellen einer Hand. Kannst du mir sagen, woran das liegt? --- 04 - Poker.playground/Contents.swift | 138 +++++++++++++++++++++- 04 - Poker.playground/timeline.xctimeline | 4 +- 2 files changed, 136 insertions(+), 6 deletions(-) diff --git a/04 - Poker.playground/Contents.swift b/04 - Poker.playground/Contents.swift index 855b3ee..c3d534d 100644 --- a/04 - Poker.playground/Contents.swift +++ b/04 - Poker.playground/Contents.swift @@ -5,15 +5,145 @@ - Wir modellieren `Card` als Struct, und `Suit` und `Rank` als Enums. Warum verwenden wir keine Klasse für `Card`? Warum eignet sich ein Enum so hervorragend für `Suit` und `Rank`? */ -/* - EURE ANTWORT HIER -*/ +// Suit und Rank sind als Zahlen virtueller Spielkarten einfache Aufzählungen (also Enumerations). Deswegen wäre es unnötige Mehrarbeit für jede Karte eine extra Variable anzulegen. +// Für die Spielkarten selber wird ein Struct erstellt, was als Argumente die Enums übernimmt, die bereits die Kartenwerte enthalten. +//Durch die Klasse Struct wird ein konkretes "Kartenspiel" erstellt, welches im weiteren verwendet werden kann. Durch die Enums werden so etwa auch Vergleiche zwischen den einzelnen Karten und Kombinationen möglich. +//: ## Testing +// CustomStringConvertible Protocol kann nicht ausgeführt werden und meldet Error +import Foundation +import UIKit + +enum Ranks: Int, CustomStringConvertible { + case Ass = 1, König, Dame, Bube, Zehn, Neun, Acht, Sieben, Sechs, Fünf, Vier, Drei, Zwei + + var description: String + { + switch self + { + case Ass: + return "Ass" + case König: + return "König" + case Dame: + return "Dame" + case Bube: + return "Bube" + case Zehn: + return "10" + case Neun: + return "9" + case Acht: + return "8" + case Sieben: + return "7" + case Sechs: + return "6" + case Fünf: + return "5" + case Vier: + return "4" + case Drei: + return "3" + case Zwei: + return "2" + } + } +} + +// CustomStringConvertible Protocol kann nicht ausgeführt werden und meldet Error + +enum Suits: Int, CustomStringConvertible { + case Karo = 1 + case Herz + case Kreuz + case Pik + + var description: String + { + switch self { + case Karo: + return "♢" + case Herz: + return "♡" + case Kreuz: + return "♧" + case Pik: + return "♤" + } + } +} + + +struct Card: CustomStringConvertible { + + var rank : Ranks + var suit : Suits + + init (rank: Ranks, suit: Suits) { + self.rank = rank + self.suit = suit + } + + var description: String + { + return "rank: \(rank), suit: \(suit)" + } + + static func createCard() -> Card { + let rndRank = Ranks(rawValue: Int(arc4random_uniform(13)))! + let rndSuit = Suits(rawValue: Int(arc4random_uniform(4)))! + let rndCard = Card(rank: rndRank, suit: rndSuit) + + let strgCard = String(rndCard) + print("Your Card: \(strgCard)") + return rndCard + } +} + +extension Card : Equatable {} +func ==(lhs: Card, rhs: Card) -> Bool { + return lhs.suit == rhs.suit && lhs.rank == rhs.rank +} + + +struct PokerHand { + + var cards : [Card] + + init (cards: [Card]) { + self.cards = cards + } + + static func createPokerHand() -> [Card] { + var cards = [Card]() + let card = Card.createCard() + cards.append(card) + if cards.count < 5 { + print("\(cards.count)") + for index in cards.indices { + print("for") + let newCard = Card.createCard() + while newCard != cards[index] { + cards.append(card) + } + } + } else { + print("No Way") + } + return cards + } + +} + +let fiveCards = [Card]() +PokerHand.init(cards: fiveCards) +let pokerHand = PokerHand.createPokerHand() +print("Your Hand: \(pokerHand)") -//: ## Testing /* var rankingCounts = [Ranking : Int]() let samples = 100 diff --git a/04 - Poker.playground/timeline.xctimeline b/04 - Poker.playground/timeline.xctimeline index 407a5d9..f93febe 100644 --- a/04 - Poker.playground/timeline.xctimeline +++ b/04 - Poker.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0"> From 8980fdf4556af8e3a2c1615330435d8bbdd00a01 Mon Sep 17 00:00:00 2001 From: ChrisBtt Date: Sat, 7 May 2016 14:34:37 +0200 Subject: [PATCH 2/3] Neuer fatal error --- 04 - Poker.playground/Contents.swift | 19 +++++++------------ 04 - Poker.playground/timeline.xctimeline | 4 ++-- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/04 - Poker.playground/Contents.swift b/04 - Poker.playground/Contents.swift index c3d534d..683400a 100644 --- a/04 - Poker.playground/Contents.swift +++ b/04 - Poker.playground/Contents.swift @@ -18,7 +18,7 @@ import Foundation import UIKit enum Ranks: Int, CustomStringConvertible { - case Ass = 1, König, Dame, Bube, Zehn, Neun, Acht, Sieben, Sechs, Fünf, Vier, Drei, Zwei + case Ass, König, Dame, Bube, Zehn, Neun, Acht, Sieben, Sechs, Fünf, Vier, Drei, Zwei var description: String { @@ -57,7 +57,7 @@ enum Ranks: Int, CustomStringConvertible { // CustomStringConvertible Protocol kann nicht ausgeführt werden und meldet Error enum Suits: Int, CustomStringConvertible { - case Karo = 1 + case Karo case Herz case Kreuz case Pik @@ -83,7 +83,7 @@ struct Card: CustomStringConvertible { var rank : Ranks var suit : Suits - init (rank: Ranks, suit: Suits) { + init (suit: Suits, rank: Ranks) { self.rank = rank self.suit = suit } @@ -96,7 +96,7 @@ struct Card: CustomStringConvertible { static func createCard() -> Card { let rndRank = Ranks(rawValue: Int(arc4random_uniform(13)))! let rndSuit = Suits(rawValue: Int(arc4random_uniform(4)))! - let rndCard = Card(rank: rndRank, suit: rndSuit) + let rndCard = Card(suit: rndSuit, rank: rndRank) let strgCard = String(rndCard) print("Your Card: \(strgCard)") @@ -122,17 +122,12 @@ struct PokerHand { var cards = [Card]() let card = Card.createCard() cards.append(card) - if cards.count < 5 { + while cards.count < 5 { print("\(cards.count)") - for index in cards.indices { - print("for") let newCard = Card.createCard() - while newCard != cards[index] { - cards.append(card) + if newCard != cards[cards.count] { + cards.append(newCard) } - } - } else { - print("No Way") } return cards } diff --git a/04 - Poker.playground/timeline.xctimeline b/04 - Poker.playground/timeline.xctimeline index f93febe..b3e2b9d 100644 --- a/04 - Poker.playground/timeline.xctimeline +++ b/04 - Poker.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0"> From 8a0d14e53fec35c8d7ce7c9637f304758a8dad7a Mon Sep 17 00:00:00 2001 From: ChrisBtt Date: Sat, 7 May 2016 14:55:01 +0200 Subject: [PATCH 3/3] Die Hand wird jetzt erstellt, den Rest mache ich noch. Danke schonmal --- 04 - Poker.playground/Contents.swift | 6 +++--- 04 - Poker.playground/timeline.xctimeline | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/04 - Poker.playground/Contents.swift b/04 - Poker.playground/Contents.swift index 683400a..750a16f 100644 --- a/04 - Poker.playground/Contents.swift +++ b/04 - Poker.playground/Contents.swift @@ -125,9 +125,9 @@ struct PokerHand { while cards.count < 5 { print("\(cards.count)") let newCard = Card.createCard() - if newCard != cards[cards.count] { - cards.append(newCard) - } + if cards.contains(newCard) { + break + } else {cards.append(newCard)} } return cards } diff --git a/04 - Poker.playground/timeline.xctimeline b/04 - Poker.playground/timeline.xctimeline index b3e2b9d..d10073a 100644 --- a/04 - Poker.playground/timeline.xctimeline +++ b/04 - Poker.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0">