XCode-Claude-Workflow/SoliCards/Models/Rank.swift
idev2025 0f989f5c86 feat: SoliCards v1.2.0 — native SwiftUI solitaire for iOS, iPadOS, macOS
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.

Key features:
- MVVM + Protocol-Oriented Strategy architecture
- DragGesture with coordinate-space hit-testing (long press + drag)
- Smart zoom: cards auto-size to fit screen based on deepest column
- Landscape: 30% bigger cards with scrollable overflow (iOS)
- macOS: 120pt card cap, 92% height buffer for window resizing
- Auto-save, game resume, statistics tracking via SwiftData
- Privacy manifest, app icon, String Catalog, zero dependencies

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 07:33:52 -04:00

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"
}
}
}