Welcome to Astro Flights, a fast-paced, hypercasual retro arcade game for iOS where your vocabulary is your greatest weapon. Built entirely with modern Swift technologies, this game challenges players to type falling words to clear them before they overwhelm the screen. The project is a demonstration of a hybrid UI approach, seamlessly blending the power of SpriteKit for dynamic gameplay with the declarative elegance of SwiftUI for the user interface and state management.
- 🕹️ Two Dynamic Game Modes — Engage with words in unique ways:
- Shoot The Letter (STL): Pilot a spaceship and shoot down the correct letters in sequence to destroy incoming asteroid words.
- Fill In The Blanks (FITB): A classic challenge where players must quickly type the missing letters to complete the word.
- 🏆 GameKit Integration — Compete with players worldwide! The game includes full support for Leaderboards to track high scores and Achievements to reward skillful gameplay.
- 🎨 Hybrid UI System — A modern development approach combining:
- SpriteKit: For the core game loop, physics, animations, particle effects (explosions, wind), and player controls.
- SwiftUI: For all UI elements, including the Heads-Up Display (HUD), score, health, pause menu, and game over screens. This allows for rapid UI development and clean state management.
- 💾 Local Data Persistence — Utilizes SwiftData to efficiently manage and store the game's word lists locally on the device.
- 🌌 Immersive Retro Experience — Features a custom-built parallax background manager, pixel-perfect assets, classic arcade fonts, and engaging sound effects to create a nostalgic feel.
- 햅 Haptic & Audio Feedback — Enhances the user experience with carefully timed sound effects and haptic feedback for key game events like shooting, correct/incorrect answers, and explosions.
- Game State Management: A central
GameStateobject (anObservableObject) manages all core logic, including score, health, the current word, and game status (isPaused,isGameOver). - SwiftUI View Layer: The main
STLGameVieworFITBGameViewobserves theGameState. It renders the HUD and presents overlays (like the pause or game over menu) based on the state's properties. - SpriteKit Scene Layer: The
SpriteViewhosts theSKScene, where all the action happens. The scene is responsible for:- Rendering the player's spaceship, falling word obstacles, and background effects.
- Handling player input (touch gestures for movement and shooting).
- Managing physics and detecting collisions between game elements (bullets, obstacles, player).
- Two-Way Communication: The
SKSceneholds a reference to theGameStateto update it when game events occur (e.g., a letter is shot, the player takes damage). In turn, when theGameStatechanges (e.g., a new word is selected), it triggers updates in both the SwiftUIViewand theSKScene.
- 📱 Framework: SwiftUI
- 🕹️ Game Engine: SpriteKit
- 🏆 Services: GameKit (Game Center)
- 💾 Database: SwiftData
- 🎵 Audio: AVFoundation
- 햅 Haptics: Core Haptics
Follow these steps to get Astro Flights up and running on your local machine using Xcode.
- macOS (latest version recommended)
- Xcode (version 15 or higher)
- An active Apple Developer Account (required for Game Center features)
-
Clone the repository:
git clone https://github.com/streynaldo/WordInvader.git cd astroflights -
Open the project in Xcode:
- Double-click the
.xcodeprojfile to launch the project.
- Double-click the
-
Configure Signing & Capabilities:
- In the Project Navigator, select the project file, then select the main target.
- Go to the "Signing & Capabilities" tab.
- Select your developer account from the "Team" dropdown.
- Ensure Game Center is added as a capability.
-
Run the application:
- Select an iOS Simulator or a connected physical device from the scheme menu.
- Press the Run button (▶︎) or use the shortcut
Cmd + R.
- 🧑💻 Stefanus Reynaldo : @streynaldo
- 🧑💻 Louis Fernando : @LouisFernando1204
- 🧑💻 Christian Sinaga : @chrisndrews
AstroFlights does not collect, store, or share any personal data from users. Any information used is solely for gameplay functionality and is not linked to any individual. If you have questions about this Privacy Policy, please contact us at [email kamu].