CasinoGames/Blackjack
2025-12-31 13:29:45 -06:00
..
Blackjack Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2025-12-31 13:29:45 -06:00
Blackjack.xcodeproj Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2025-12-22 22:00:46 -06:00
BlackjackTests Signed-off-by: Matt Bruce <matt.bruce1@toyota.com> 2025-12-28 22:27:44 -06:00
BlackjackUITests Signed-off-by: Matt Bruce <matt.bruce1@toyota.com> 2025-12-28 22:27:44 -06:00
GAME_CENTER_PLAN.md Signed-off-by: Matt Bruce <matt.bruce1@toyota.com> 2025-12-28 21:43:53 -06:00
README.md Signed-off-by: Matt Bruce <mbrucedogs@gmail.com> 2025-12-29 13:03:03 -06:00

Blackjack 21 - Casino Card Game

A feature-rich Blackjack app for iOS built with SwiftUI. Master basic strategy, learn card counting, and enjoy an authentic casino experience — all without risking real money.

Platform Swift SwiftUI

Features

🎓 First-Time User Experience

  • Welcome Sheet — Interactive introduction on first launch
  • Tutorial Mode — Optional guided walkthrough of your first hand
  • Contextual Hints — Tips appear at the right moment during gameplay
  • Never Intrusive — All onboarding is skippable and shown only once

🎰 Authentic Casino Gameplay

  • Full Blackjack gameplay with all standard actions: Hit, Stand, Double Down, Split, Surrender
  • Insurance betting when dealer shows an Ace
  • Realistic multi-deck shoe with configurable penetration
  • Animated card dealing with sound effects and haptic feedback
  • Reshuffle notifications when the cut card is reached

🃏 Multiple Rule Variations

Style Description
Vegas Strip 6 decks, dealer stands on soft 17, double after split, 3:2 blackjack
Atlantic City 8 decks, late surrender, re-split aces allowed
European No hole card (dealer gets second card after player acts)
Custom Configure every rule to your preference

💰 Side Bets

Optional side bets for extra excitement:

Perfect Pairs — Bet on your first two cards forming a pair:

  • Mixed Pair (different colors): 6:1
  • Colored Pair (same color): 12:1
  • Perfect Pair (same suit): 25:1

21+3 — Poker hand from your two cards + dealer's upcard:

  • Flush: 5:1
  • Straight: 10:1
  • Three of a Kind: 30:1
  • Straight Flush: 40:1
  • Suited Trips: 100:1

📚 Basic Strategy Hints

  • Real-time strategy suggestions for every hand
  • Accounts for game rules (surrender availability, dealer hits soft 17, etc.)
  • Learn the mathematically optimal play for every situation

🎓 Card Counting Trainer

Professional-grade tools for learning the Hi-Lo system:

  • Running Count — Live count as cards are dealt
  • True Count — Adjusted for remaining decks
  • Betting Hints — Recommendations based on count advantage
  • Illustrious 18 — Count-adjusted strategy deviations

📊 Session-Based Statistics

Track your play sessions like a real casino visit:

  • Current Session — Live stats for your active session
  • Global Stats — Aggregated lifetime statistics
  • Session History — Review past sessions with detailed breakdowns

Per-Session Tracking:

  • Duration and hands played
  • Win/loss/push breakdown
  • Net result and win rate
  • Blackjacks, busts, doubles, splits
  • Average and biggest bets

Session Management:

  • End a session manually or when you run out of chips
  • Stats persisted across game styles (Vegas Strip, Atlantic City, etc.)
  • Complete round history within each session

☁️ iCloud Sync

  • Balance and statistics sync across devices
  • Settings persist via CloudKit

Architecture

Blackjack/
├── BaccaratApp.swift          # App entry point
├── ContentView.swift          # Root view
├── Engine/
│   ├── BlackjackEngine.swift  # Core game logic, basic strategy, card counting
│   └── GameState.swift        # Observable state machine
├── Models/
│   ├── BetType.swift          # Bet type definitions
│   ├── GameResult.swift       # Hand results and round outcomes
│   ├── GameSettings.swift     # User preferences and rule configuration
│   ├── Hand.swift             # BlackjackHand model
│   └── SideBet.swift          # Side bet types and evaluation
├── Storage/
│   └── BlackjackGameData.swift # Persistence and session models
├── Theme/
│   └── DesignConstants.swift  # Design system tokens
├── Views/
│   ├── Development/           # Dev-only views (branding, icons)
│   ├── Game/                  # Main game UI components
│   ├── Sheets/                # Modal views (settings, stats, rules)
│   └── Table/                 # Table layout components
└── Resources/
    └── Localizable.xcstrings  # Localization strings

Tech Stack

  • iOS 26.0+ target
  • Swift 6.2 with strict concurrency
  • SwiftUI with @Observable for state management
  • CasinoKit — Shared package for cards, chips, sounds, and common UI
  • CloudKit — iCloud sync for game data and settings

Requirements

  • Xcode 16.0+
  • iOS 26.0+ deployment target
  • Swift 6.2+

Getting Started

  1. Open CasinoGames.xcworkspace in Xcode
  2. Select the Blackjack scheme
  3. Build and run on a simulator or device

Localization

The app supports:

  • English (en)
  • Spanish - Mexico (es-MX)
  • French - Canada (fr-CA)

Strings are managed via String Catalogs (Localizable.xcstrings).

Design System

All UI values are centralized in DesignConstants.swift:

  • Spacing, corner radii, font sizes
  • Opacity and shadow values
  • Animation durations
  • Semantic color definitions

Accessibility

  • Full VoiceOver support with meaningful labels and hints
  • Dynamic Type for scalable text
  • Accessibility announcements for game events

License

This project is proprietary software. All rights reserved.


Built with ❤️ using SwiftUI