Complete native rewrite of the web-based SoliCards game as a SwiftUI multiplatform app targeting iOS 17+, iPadOS 17+, and macOS 14+. Three solitaire variants (Klondike, Spider, FreeCell) with full game rules, drag & drop, smart zoom layout, 6 themes, 4 difficulty levels, SwiftData persistence, VoiceOver accessibility, and 57 unit tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
59 lines
1.3 KiB
Swift
59 lines
1.3 KiB
Swift
import Foundation
|
|
|
|
enum Rank: Int, CaseIterable, Codable, Comparable, Sendable {
|
|
case ace = 1
|
|
case two, three, four, five, six, seven
|
|
case eight, nine, ten, jack, queen, king
|
|
|
|
static func < (lhs: Rank, rhs: Rank) -> Bool {
|
|
lhs.rawValue < rhs.rawValue
|
|
}
|
|
|
|
var displayName: String {
|
|
switch self {
|
|
case .ace: "Ace"
|
|
case .two: "2"
|
|
case .three: "3"
|
|
case .four: "4"
|
|
case .five: "5"
|
|
case .six: "6"
|
|
case .seven: "7"
|
|
case .eight: "8"
|
|
case .nine: "9"
|
|
case .ten: "10"
|
|
case .jack: "Jack"
|
|
case .queen: "Queen"
|
|
case .king: "King"
|
|
}
|
|
}
|
|
|
|
var shortName: String {
|
|
switch self {
|
|
case .ace: "A"
|
|
case .jack: "J"
|
|
case .queen: "Q"
|
|
case .king: "K"
|
|
default: "\(rawValue)"
|
|
}
|
|
}
|
|
|
|
/// File name component for asset lookup
|
|
var fileName: String {
|
|
switch self {
|
|
case .ace: "ace"
|
|
case .two: "2"
|
|
case .three: "3"
|
|
case .four: "4"
|
|
case .five: "5"
|
|
case .six: "6"
|
|
case .seven: "7"
|
|
case .eight: "8"
|
|
case .nine: "9"
|
|
case .ten: "10"
|
|
case .jack: "jack"
|
|
case .queen: "queen"
|
|
case .king: "king"
|
|
}
|
|
}
|
|
}
|