Tuki the Game is a 2D endless runner built with Flutter for mobile devices (iOS/Android). The game mechanics combine elements of Flappy Bird and Hill Climb Racing. The main character, Tuki, automatically moves forward while carrying a stack of boxes on his shoulders. The player must balance the stack by tapping the screen to prevent it from tipping over.
-
Character Movement:
- Tuki moves automatically from left to right.
- The stack of boxes tilts automatically counterclockwise.
- The player must tap the screen to tilt the stack clockwise and maintain balance.
-
Terrain Influence:
- Uphill: The stack tilts more counterclockwise.
- Downhill: The stack tilts clockwise at a slower rate.
- Terrain is randomly generated within predefined limits.
-
Game Over Condition:
- If the stack tilts beyond a certain critical angle, the game ends.
- Score is based on:
- Time survived.
- How long the player keeps the stack near the critical angle.
- These parameters should be adjustable for fine-tuning.
- Flutter (for cross-platform mobile development)
- Flame Engine (game engine for Flutter)
- Forge2D (for physics, terrain generation)
The game will be structured into the following core components:
- Tuki (Character Class): Handles movement.
- Stack (Box Stack Class): Controls box balancing physics.
- Terrain (Landscape Class): Manages terrain generation and physics.
- ScoreCounter: Manages the scoring system.
To structure development and avoid stress, we will follow an Agile/Scrum approach with user stories and spikes.
- As a player, I want Tuki to move automatically from left to right so that I don’t have to control movement.
- As a player, I want the stack of boxes to tilt automatically so that I must focus on balancing them.
- As a player, I want to tap the screen to adjust the tilt of the stack so that I can maintain balance.
- As a developer, I want to create a test level with static terrain to verify movement and balance mechanics. 4.1 As s a player, I want to have critical value of boxes stack tilting angle, so if tilting exceeds critical angle game over. And user have to click to start game again.
- As a player, I want the terrain to be dynamically generated so that each game session is unique.
- As a player, I want different slopes (uphill, downhill) to affect balance difficulty so that the game is more challenging.
- As a developer, I want to fine-tune the terrain generation parameters to keep gameplay balanced.
- As a player, I want to earn points based on survival time so that I am rewarded for lasting longer.
- As a player, I want additional points for keeping the stack close to the critical angle so that balance matters.
- As a player, I want to see my score on the screen during gameplay.
- As a developer, I want to allow score-related parameters to be adjustable for future tuning.
- As a player, I want the game to end when the stack tilts too much so that I have a clear failure condition.
- As a player, I want a Game Over screen that shows my final score.
- As a developer, I want to add animations and visual effects for feedback.
- Research best physics implementation for balancing mechanics.
- Experiment with different terrain generation algorithms in Forge2D.
- Optimize tap responsiveness for mobile controls.
- Week 1-2: Implement movement and basic physics.
- Week 3-4: Add terrain generation and difficulty scaling.
- Week 5-6: Implement scoring and UI elements.
- Week 7-8: Polish animations, optimize performance, and refine gameplay balance.
By following this structured plan, we aim to complete development in 1-2 months with an iterative, stress-free approach.
As I am close to end developing the game, I modified already existing sprints and user stories. NOW I ORGANIZED IT THIS WAY:
- Adjust the physics body's dimensions to match the sprite's size.
- Set both components' anchors to Anchor.center for consistent alignment.
- Implement a debug toggle to visualize the physics body during development.
- Develop a system to move terrain and background layers leftward at a consistent speed.
- Synchronize the movement speeds of terrain and background to maintain visual coherence.
- Ensure Tuki remains stationary horizontally while the environment moves.
- Initialize a set number of terrain chunks at game start.
- Implement logic to generate new terrain chunks as Tuki progresses.
- Remove off-screen terrain chunks to optimize performance.
- Ensure seamless connection between terrain chunks for a continuous experience.
- Detect the slope of the terrain beneath Tuki using raycasting.
- Modify the stack's tilt angle proportionally to the detected slope.
- Introduce variables to control the sensitivity and direction of the tilt for fine-tuning.
- Implement object pooling for terrain chunks to reduce instantiation overhead.
- Optimize rendering by culling off-screen elements.
- Profile the game to identify and address performance bottlenecks.
- Compare noise functions (e.g., Perlin, Simplex) for terrain generation.
- Assess the impact of different generation techniques on performance and visual appeal.
- Explore the physics engine's support for compound bodies and joints.
- Determine the best approach to simulate realistic tilting behavior.