CasinoGames/Blackjack/Models/GameResult.swift

76 lines
2.2 KiB
Swift

//
// GameResult.swift
// Blackjack
//
// Possible outcomes for a Blackjack hand.
//
import SwiftUI
/// Result of a single Blackjack hand.
enum HandResult: Equatable {
case blackjack // Natural 21
case win // Beat dealer
case lose // Lost to dealer or bust
case push // Tie
case bust // Over 21
case surrender // Gave up half bet
case insuranceWin // Dealer had blackjack
case insuranceLose // Dealer didn't have blackjack
/// String identifier for persistence.
var saveName: String {
switch self {
case .blackjack: return "blackjack"
case .win: return "win"
case .lose: return "lose"
case .push: return "push"
case .bust: return "bust"
case .surrender: return "surrender"
case .insuranceWin: return "insuranceWin"
case .insuranceLose: return "insuranceLose"
}
}
var displayText: String {
switch self {
case .blackjack: return String(localized: "BLACKJACK!")
case .win: return String(localized: "WIN!")
case .lose: return String(localized: "LOSE")
case .push: return String(localized: "PUSH")
case .bust: return String(localized: "BUST!")
case .surrender: return String(localized: "SURRENDER")
case .insuranceWin: return String(localized: "INSURANCE WINS")
case .insuranceLose: return String(localized: "INSURANCE LOSES")
}
}
var color: Color {
switch self {
case .blackjack: return .yellow
case .win: return .green
case .lose, .bust, .insuranceLose: return .red
case .push: return .blue
case .surrender: return .orange
case .insuranceWin: return .green
}
}
var isWin: Bool {
switch self {
case .blackjack, .win, .insuranceWin: return true
default: return false
}
}
}
/// Overall game result for the round.
struct RoundResult: Equatable {
let mainHandResult: HandResult
let splitHandResult: HandResult?
let insuranceResult: HandResult?
let totalWinnings: Int
let wasBlackjack: Bool
}