A terminal-style Sudoku experience for iOS, designed for logical purists.
SudoSodoku is a minimalist, keyboard-centric (conceptually) puzzle game that brings the Linux terminal aesthetic to your iPhone. It strips away the distractions of modern casual games, offering a raw, focus-driven environment powered by a robust algorithmic core.
We are thrilled to announce the first stable release of SudoSodoku! This version represents a complete, polished game with all core features implemented and tested.
Key Features:
- Procedural Puzzle Generation: Real-time generation of unique, solvable puzzles
- Four Difficulty Levels: Easy, Medium, Hard, and Master with intelligent scoring
- Pencil Mode: Toggle candidate notes for complex deduction strategies
- Undo/Redo System: Full history stack for fearless experimentation
- Smart Archives: Automatic saving with favorites and replay functionality
- ELO Rating System: Competitive ranking from SCRIPT_KIDDIE to THE_ARCHITECT
- Terminal Aesthetic: Authentic green phosphor UI with haptic feedback
- Modular Architecture: Clean, maintainable codebase organized by feature
- Visuals: Authentic Green Phosphor (#00FF00) on Deep Dark Background (#0D121A).
- Feedback: "Juice" interaction model with UIImpactFeedbackGenerator providing mechanical-keyboard-like haptics for every input.
- Animations: Matrix-style victory effects and CRT-like glow pulses.
- Real-time Engine: Generates unique, solvable puzzles on-the-fly using a randomized Backtracking Algorithm.
- Human-like Grading: Difficulty is not determined by random holes, but by a Logical Solver that simulates human techniques (Naked Singles, Hidden Singles, etc.) to assign a precise difficulty score (0-100).
- Dynamic Rating: Starts at 1200 (USER). Beats puzzles to rank up.
- Adaptive K-Factor: Rating changes stabilize as you reach higher tiers (Master/Grandmaster).
- Anti-Smurfing: High-level players gain zero rating from solving low-level puzzles.
- Rank Titles:
- < 1200: SCRIPT_KIDDIE
- 1200 - 1400: USER
- 1400 - 1600: SUDOER
- 1600 - 1800: SYS_ADMIN
- 1800 - 2000: KERNEL_HACKER
- 2000+: THE_ARCHITECT
- Game Center Integration: Seamless, password-less login and user profile management.
- Cloud Sync: Leveraging iCloud Documents to sync game states and archives across devices (automatically degrades to local storage if iCloud is unavailable).
- JSON Serialization: All game records are stored as Codable JSON structs, ensuring backward compatibility and easy migration.
SudoSodoku is built with modern iOS technologies, designed for maintainability and performance:
- Language: Swift 5.9
- UI Framework: SwiftUI (Apple's modern declarative UI framework)
- Architecture: MVVM (Model-View-ViewModel) pattern for clean code organization
- State Management: Reactive updates using Combine framework
- Data Persistence:
- Automatic cloud sync via iCloud (with local fallback)
- Safe file operations with atomic writes
- Backward-compatible data migration
- User Experience: Custom animations and haptic feedback for a polished feel
SudoSodoku/
βββ Models/
β βββ GameRecord.swift # Codable save data structure
β βββ SudokuCell.swift # Unit cell model
β βββ MoveHistory.swift # Move history for undo/redo
β βββ Difficulty.swift # Enum with rating ranges
βββ ViewModels/
β βββ SudokuGame.swift # Core game logic & state machine
βββ Managers/
β βββ GameCenterManager.swift # GameKit authentication
β βββ RatingManager.swift # ELO calculation algorithms
β βββ HapticManager.swift # Haptic feedback engine
β βββ StorageManager.swift # File I/O & Cloud syncing
βββ Views/
β βββ ContentView.swift # Main entry & NavigationStack
β βββ LandingView.swift # Landing page
β βββ GameView.swift # The game board
β βββ UserProfileView.swift # User profile & statistics
β βββ ArchiveView.swift # History & Favorites list
β βββ ModeSelectionView.swift # Difficulty selection
β βββ BoardView.swift # Sudoku board rendering
β βββ ControlPanelView.swift # Game controls (undo/redo/numpad)
β βββ Components/
β β βββ TerminalBackground.swift # Terminal-style background
β β βββ MatrixVictoryOverlay.swift # Victory animation
β β βββ NoteGridView.swift # Note display grid
β β βββ GridLinesOverlay.swift # Board grid lines
β β βββ StatCard.swift # Statistics card component
β β βββ RankRow.swift # Rank display row
β β βββ RecordRow.swift # Archive record row
β βββ Styles/
β βββ BouncyButtonStyle.swift # Button animation style
βββ Algorithms/
βββ SudokuGenerator.swift # Backtracking & Digging logic
- Clone the repository:
git clone https://github.com/kaiiiichen/SudoSodoku.git-
Open in Xcode:
Double-clickSudoSodoku.xcodeproj. Ensure you have Xcode 15.0+ installed. -
Configure Signing:
- Go to the Project Navigator (blue icon).
- Select the SudoSodoku target.
- Click Signing & Capabilities.
- Change the Team to your own Apple Developer account.
- Note: If you are on a Free Developer Account, iCloud capabilities will be disabled. The app will automatically fallback to local storage.
-
Run:
Connect your iPhone or select a Simulator and pressCmd + R.
We provide convenient build scripts for command-line development:
-
build.sh- Build the project (similar to Xcode's Cmd+B)./build.sh # Debug build (default) ./build.sh release # Release build ./build.sh clean # Clean build artifacts
-
play.sh- Build and run in iOS Simulator./play.sh
This script will:
- Find an available iPhone simulator
- Boot the simulator
- Build the project
- Install and launch the app
-
run.sh- Alternative run script with more detailed output./run.sh
- Press
Cmd+Shift+B(macOS) to trigger the default build task - Use
Cmd+Shift+Pβ "Tasks: Run Task" to access all build tasks
- macOS 13.0+ (for iOS development)
- Xcode 15.0+ with Command Line Tools
- iOS 17.0+ deployment target
After building, you can run the app in the iOS Simulator:
# Quick way: Use the play script
./play.sh
# Or manually:
# 1. Build first
./build.sh
# 2. Open Simulator
open -a Simulator
# 3. Install and run (see play.sh for details)Contributions are welcome! We appreciate your help in making SudoSodoku better.
Getting Started:
- Read our Contributing Guidelines
- Check our Code of Conduct
- Look for issues labeled
good first issue - Fork, make changes, and submit a Pull Request
Quick Start:
git checkout -b feature/AmazingFeature
git commit -m "feat: Add some AmazingFeature"
git push origin feature/AmazingFeatureThen open a Pull Request. See CONTRIBUTING.md for detailed guidelines.
- All code comments and documentation should be in English
- Follow Swift naming conventions
- Maintain MVVM architecture pattern
- Add appropriate MARK comments for code organization
- CHANGELOG.md - Version history and release notes
- DEVELOPER.md - Feature roadmap, testing checklist, and development guidelines
- CONTRIBUTING.md - Guidelines for contributing to the project
- CODE_OF_CONDUCT.md - Community code of conduct
- SECURITY.md - Security policy and vulnerability reporting
Distributed under the MIT License. See LICENSE for more information.
Created with logic and β€οΈ by Kai Chen.