Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
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
138 changes: 134 additions & 4 deletions 04 - Poker.playground/Contents.swift
Original file line number Diff line number Diff line change
Expand Up @@ -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
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.

Entferne einfach das = 1 hier und...


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
Copy link
Copy Markdown
Member

@nilsvu nilsvu May 7, 2016

Choose a reason for hiding this comment

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

... hier.

Rank und Suit sollen hier nur deshalb einen zugrundeliegenden rawValue: Int haben damit wir sie einfach durch Zufallszahlen erstellen können. Wenn du nicht explizit rawValues hinschreibst (wie mit dem = 1 bei dir) beginnt's einfach bei 0. Das habe ich implizit angenommen, denn die arc4random_uniform(n) Funktion gibt Zahlen von 0 bis n-1 zurück. Ist tatsächlich nicht so schön programmiert, besser wäre es ohne rawValu�es.

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
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=3886&amp;EndingColumnNumber=22&amp;EndingLineNumber=151&amp;StartingColumnNumber=9&amp;StartingLineNumber=151&amp;Timestamp=484314894.606346"
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=3886&amp;EndingColumnNumber=21&amp;EndingLineNumber=151&amp;StartingColumnNumber=5&amp;StartingLineNumber=151&amp;Timestamp=484314894.606546"
selectedRepresentationIndex = "1"
shouldTrackSuperviewWidth = "NO">
</LoggerValueHistoryTimelineItem>
Expand Down