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>
66 lines
1.2 KiB
Swift
66 lines
1.2 KiB
Swift
import Foundation
|
|
|
|
enum GameVariant: String, CaseIterable, Codable, Identifiable, Sendable {
|
|
case klondike
|
|
case spider
|
|
case freeCell
|
|
|
|
var id: String { rawValue }
|
|
|
|
var displayName: String {
|
|
switch self {
|
|
case .klondike: "Klondike"
|
|
case .spider: "Spider"
|
|
case .freeCell: "FreeCell"
|
|
}
|
|
}
|
|
|
|
var tableauCount: Int {
|
|
switch self {
|
|
case .klondike: 7
|
|
case .spider: 10
|
|
case .freeCell: 8
|
|
}
|
|
}
|
|
|
|
var foundationCount: Int {
|
|
switch self {
|
|
case .klondike: 4
|
|
case .spider: 8
|
|
case .freeCell: 4
|
|
}
|
|
}
|
|
|
|
var deckCount: Int {
|
|
switch self {
|
|
case .klondike, .freeCell: 1
|
|
case .spider: 2
|
|
}
|
|
}
|
|
|
|
var hasWaste: Bool {
|
|
switch self {
|
|
case .klondike, .spider: true
|
|
case .freeCell: false
|
|
}
|
|
}
|
|
|
|
var hasFreeCells: Bool {
|
|
self == .freeCell
|
|
}
|
|
|
|
var freeCellCount: Int {
|
|
switch self {
|
|
case .freeCell: 4
|
|
case .klondike, .spider: 0
|
|
}
|
|
}
|
|
|
|
var hasStock: Bool {
|
|
switch self {
|
|
case .klondike, .spider: true
|
|
case .freeCell: false
|
|
}
|
|
}
|
|
}
|