Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
133 changes: 129 additions & 4 deletions 04 - Poker.playground/Contents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,140 @@

- 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, 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
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 (suit: Suits, rank: Ranks) {
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(suit: rndSuit, rank: rndRank)

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)
while cards.count < 5 {
print("\(cards.count)")
let newCard = Card.createCard()
if cards.contains(newCard) {
break
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

break verlässt die while-Schleife, du brauchst hier continue.

} else {cards.append(newCard)}
}
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
Expand Down
4 changes: 2 additions & 2 deletions 04 - Poker.playground/timeline.xctimeline
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@
version = "3.0">
<TimelineItems>
<LoggerValueHistoryTimelineItem
documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=353&amp;EndingColumnNumber=22&amp;EndingLineNumber=21&amp;StartingColumnNumber=9&amp;StartingLineNumber=21&amp;Timestamp=483221225.800593"
documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=3765&amp;EndingColumnNumber=22&amp;EndingLineNumber=146&amp;StartingColumnNumber=9&amp;StartingLineNumber=146&amp;Timestamp=484318322.499525"
selectedRepresentationIndex = "0"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
<LoggerValueHistoryTimelineItem
documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=353&amp;EndingColumnNumber=21&amp;EndingLineNumber=21&amp;StartingColumnNumber=5&amp;StartingLineNumber=21&amp;Timestamp=483221225.800823"
documentLocation = "#CharacterRangeLen=0&amp;CharacterRangeLoc=3765&amp;EndingColumnNumber=21&amp;EndingLineNumber=146&amp;StartingColumnNumber=5&amp;StartingLineNumber=146&amp;Timestamp=484318322.500079"
selectedRepresentationIndex = "1"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
Expand Down