Created
March 10, 2018 13:37
-
-
Save khawajafarooq/3adf2bdbd1df14fe9195d3baa4030834 to your computer and use it in GitHub Desktop.
Code to play ๐
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
enum Suit { | |
case hearts | |
case spades | |
case diamonds | |
case clubs | |
} | |
extension Suit { | |
var shape: String { | |
switch self { | |
case .hearts: return "โฅ๏ธ" | |
case .spades: return "โ ๏ธ" | |
case .diamonds: return "โฆ๏ธ" | |
case .clubs: return "โฃ๏ธ" | |
} | |
} | |
} | |
struct Card { | |
let suit: Suit | |
let rank: Int | |
} | |
extension Card: CustomStringConvertible { | |
var description: String { | |
return | |
""" | |
\(rank) of \(suit.shape) | |
""" | |
} | |
} | |
struct Deck { | |
var cards: [Card] = [] | |
init() { | |
cards.append(contentsOf: cards(for: .hearts)) | |
cards.append(contentsOf: cards(for: .spades)) | |
cards.append(contentsOf: cards(for: .diamonds)) | |
cards.append(contentsOf: cards(for: .clubs)) | |
} | |
private func cards(for suit: Suit) -> [Card] { | |
return Array(1...13).map{ Card(suit: suit, rank: $0) } | |
} | |
func draw() -> Card? { | |
let rand = Int(arc4random_uniform(UInt32(cards.count-1))) | |
return cards[rand] | |
} | |
} | |
// Tests | |
let deck = Deck() | |
if deck.cards.count == 52 { | |
print("Pass: 52 cards in deck") | |
} | |
if let card = deck.draw() { | |
print("Pass: Draw \(card)") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment