From 3f39421603bb7d90913e064e19acb85250995a27 Mon Sep 17 00:00:00 2001 From: felix Date: Sun, 1 May 2016 17:51:02 +0200 Subject: [PATCH 1/3] Ein Problem beim Initializer, Tip erwuenscht --- 04 - Poker.playground/Contents.swift | 92 +++++++++++++++++++++++ 04 - Poker.playground/timeline.xctimeline | 4 +- 2 files changed, 94 insertions(+), 2 deletions(-) diff --git a/04 - Poker.playground/Contents.swift b/04 - Poker.playground/Contents.swift index 855b3ee..9c75214 100644 --- a/04 - Poker.playground/Contents.swift +++ b/04 - Poker.playground/Contents.swift @@ -7,9 +7,101 @@ */ /* EURE ANTWORT HIER + Wir nutzen für Card ein Struct, da es sich um eine statische Sache handelt, die sich nicht ändert. (und nicht als Referenz übergeben werden soll, wenn wir eine Hand erzeugen.) + Für Suit und Rank kommen am besten Enums in Frage, weil */ +import Foundation +enum Suit: Int, CustomStringConvertible { + case diamonds, hearts, clubbs,spades + + var description: String { + switch self { + case .diamonds: return "♦" + case .clubbs: return "♣" + case .hearts: return "♥" + case .spades: return "♣" + } + } +} + +enum Rank: Int { + case two, three, four, five, six, seven, eight, nine, ten, jack, queen, king, ace + + var description: String{ + switch self { + case .two: return "2" + case .three: return "3" + case .four: return "4" + case .five: return "5" + case .six: return "6" + case .seven: return "7" + case .eight: return "8" + case .nine: return "9" + case .ten: return "10" + case .jack: return "J" + case .queen: return "Q" + case .king: return "K" + case .ace: return "A" + } + } +} +struct Card: CustomStringConvertible { + let suit: Suit + let rank: Rank + + var description: String { + return "\(rank) \(suit)" + + } +} + +struct PokerHand: CustomStringConvertible{ + let cards: [Card] + var description: String { + return PrintHand() + } + + + // Initializer + init() { + let rndSuit = Suit(rawValue: Int(arc4random_uniform(4)))! + let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! + let rndCard = Card(suit: rndSuit, rank: rndRank) + + for i in 0...5 { + while self.cards.contains(rndCard) { + let rndSuit = Suit(rawValue: Int(arc4random_uniform(4)))! + let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! + let rndCard = Card(suit: rndSuit, rank: rndRank) + } + self.cards.append(rndCard) + } + } + + func NewRandomCard () -> Card { + let rndSuit = Suit(rawValue: Int(arc4random_uniform(4)))! + let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! + let rndCard = Card(suit: rndSuit, rank: rndRank) + return rndCard + } + + func PrintHand() -> String { + var variableString: String = "" + for card in self.cards { + variableString+=card.description + } + return variableString + } +} + + +extension Card: Equatable {} + +func ==(lhs: Card, rhs: Card) -> Bool { + return lhs.suit == rhs.suit && lhs.rank == rhs.rank +} diff --git a/04 - Poker.playground/timeline.xctimeline b/04 - Poker.playground/timeline.xctimeline index 407a5d9..ded88b8 100644 --- a/04 - Poker.playground/timeline.xctimeline +++ b/04 - Poker.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0"> From ed783ae58667b9c34bd541d5bb3e22e2cdf0b9c1 Mon Sep 17 00:00:00 2001 From: felix Date: Mon, 2 May 2016 12:10:07 +0200 Subject: [PATCH 2/3] Kleines Problem mit Initializer bei contains, Bitte um Tip - Danke --- 04 - Poker.playground/Contents.swift | 60 +++++++++++++---------- 04 - Poker.playground/timeline.xctimeline | 4 +- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/04 - Poker.playground/Contents.swift b/04 - Poker.playground/Contents.swift index 9c75214..57b02a3 100644 --- a/04 - Poker.playground/Contents.swift +++ b/04 - Poker.playground/Contents.swift @@ -57,8 +57,16 @@ struct Card: CustomStringConvertible { } } +extension Card: Equatable {} + + + +func ==(lhs: Card, rhs: Card) -> Bool { + return lhs.suit == rhs.suit && lhs.rank == rhs.rank +} + struct PokerHand: CustomStringConvertible{ - let cards: [Card] + let cards: [Card?] = [nil,nil,nil,nil,nil] var description: String { return PrintHand() } @@ -69,14 +77,13 @@ struct PokerHand: CustomStringConvertible{ let rndSuit = Suit(rawValue: Int(arc4random_uniform(4)))! let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! let rndCard = Card(suit: rndSuit, rank: rndRank) - for i in 0...5 { - while self.cards.contains(rndCard) { + if (self.cards.contains(rndCard)) { let rndSuit = Suit(rawValue: Int(arc4random_uniform(4)))! let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! let rndCard = Card(suit: rndSuit, rank: rndRank) - } - self.cards.append(rndCard) + } + self.cards[i]=rndCard } } @@ -90,35 +97,36 @@ struct PokerHand: CustomStringConvertible{ func PrintHand() -> String { var variableString: String = "" for card in self.cards { - variableString+=card.description + variableString+=card!.description } return variableString } } -extension Card: Equatable {} -func ==(lhs: Card, rhs: Card) -> Bool { - return lhs.suit == rhs.suit && lhs.rank == rhs.rank -} -//: ## Testing -/* -var rankingCounts = [Ranking : Int]() -let samples = 100 -for i in 0...samples { - let ranking = PokerHand().ranking - if rankingCounts[ranking] == nil { - rankingCounts[ranking] = 1 - } else { - rankingCounts[ranking]! += 1 - } -} -for (ranking, count) in rankingCounts { - print("The probability of being dealt a \(ranking.description) is \(Double(count) / Double(samples) * 100)%") -} -*/ +////: ## Testing +//let test = PokerHand() +//print(test) +let Card1 = Card(suit: .diamonds, rank: .eight) +let Card2 = Card(suit: .diamonds, rank: .nine) +print(Card1) +//var rankingCounts = [Ranking : Int]() +//let samples = 100 +//for i in 0...samples { +// let ranking = PokerHand().ranking +// if rankingCounts[ranking] == nil { +// rankingCounts[ranking] = 1 +// } else { +// rankingCounts[ranking]! += 1 +// } +//} + +//for (ranking, count) in rankingCounts { +// print("The probability of being dealt a \(ranking.description) is \(Double(count) / Double(samples) * 100)%") +//} + diff --git a/04 - Poker.playground/timeline.xctimeline b/04 - Poker.playground/timeline.xctimeline index ded88b8..95e8cb3 100644 --- a/04 - Poker.playground/timeline.xctimeline +++ b/04 - Poker.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0"> From d1aaa8322ec6ca0e41d77ba75eb39cfb44b0c943 Mon Sep 17 00:00:00 2001 From: felix Date: Mon, 2 May 2016 13:11:09 +0200 Subject: [PATCH 3/3] Ergaenzung fuer enum Ranking --- 04 - Poker.playground/Contents.swift | 36 +++++++++++++++++++---- 04 - Poker.playground/timeline.xctimeline | 4 +-- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/04 - Poker.playground/Contents.swift b/04 - Poker.playground/Contents.swift index 57b02a3..4b62f26 100644 --- a/04 - Poker.playground/Contents.swift +++ b/04 - Poker.playground/Contents.swift @@ -65,11 +65,34 @@ func ==(lhs: Card, rhs: Card) -> Bool { return lhs.suit == rhs.suit && lhs.rank == rhs.rank } +enum Ranking: Int, CustomStringConvertible { + case Flush, HighCard + + var description: String { + switch self { + case .Flush: return "Flush" + case .HighCard: return "High Card" + } + } +} + struct PokerHand: CustomStringConvertible{ let cards: [Card?] = [nil,nil,nil,nil,nil] var description: String { return PrintHand() } + var ranking: Ranking { + for card in self.cards { + if (card!.suit != self.cards[0]!.suit){ + let ranking = Ranking.HighCard + return ranking + } + } + let ranking = Ranking.Flush + return ranking + } + + // Initializer @@ -78,15 +101,16 @@ struct PokerHand: CustomStringConvertible{ let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! let rndCard = Card(suit: rndSuit, rank: rndRank) for i in 0...5 { - if (self.cards.contains(rndCard)) { - let rndSuit = Suit(rawValue: Int(arc4random_uniform(4)))! - let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! - let rndCard = Card(suit: rndSuit, rank: rndRank) - } - self.cards[i]=rndCard + while (contains(self.cards,rndCard)) { + let rndSuit = Suit(rawValue: Int(arc4random_uniform(4)))! + let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! + let rndCard = Card(suit: rndSuit, rank: rndRank) + } + self.cards[i]=rndCard } } + func NewRandomCard () -> Card { let rndSuit = Suit(rawValue: Int(arc4random_uniform(4)))! let rndRank = Rank(rawValue: Int(arc4random_uniform(13)))! diff --git a/04 - Poker.playground/timeline.xctimeline b/04 - Poker.playground/timeline.xctimeline index 95e8cb3..7824930 100644 --- a/04 - Poker.playground/timeline.xctimeline +++ b/04 - Poker.playground/timeline.xctimeline @@ -3,12 +3,12 @@ version = "3.0">