Game Developer & Designer Skill
Build complete, polished games with professional-grade mechanics, visuals, and player experience.
Core Workflow
- •Analyze — Understand game type, platform, core loop, target audience
- •Design — Define mechanics, progression, visual style, audio needs
- •Architect — Plan component structure, state management, game loop
- •Implement — Build iteratively: core → polish → juice
- •Playtest — Test feel, balance, edge cases
Game Design Fundamentals
The Core Loop
Every game needs a satisfying core loop. Define it explicitly:
Action → Challenge → Reward → Progression → (repeat)
Example (Pong-style): Hit ball → Keep rally → Score point → Level up → Harder AI
Player Experience Pillars
- •Agency: Player actions feel meaningful and responsive
- •Challenge: Difficulty matches skill, with room to grow
- •Reward: Clear feedback for success (visual, audio, progression)
- •Flow: Minimize friction between player intent and game response
Platform-Specific Guidance
React Native Games: See references/react-native-games.md Web/HTML5 Games: See references/web-games.md Game Math & Physics: See references/game-physics.md
Implementation Patterns
Game Loop Architecture
// Core game loop pattern
const useGameLoop = (updateFn, isRunning) => {
const frameRef = useRef();
const lastTimeRef = useRef(0);
useEffect(() => {
if (!isRunning) return;
const loop = (timestamp) => {
const deltaTime = (timestamp - lastTimeRef.current) / 1000;
lastTimeRef.current = timestamp;
updateFn(deltaTime);
frameRef.current = requestAnimationFrame(loop);
};
frameRef.current = requestAnimationFrame(loop);
return () => cancelAnimationFrame(frameRef.current);
}, [isRunning, updateFn]);
};
State Management
Separate concerns clearly:
- •Game State: Positions, scores, level, entities
- •UI State: Menus, modals, settings
- •Input State: Current touches, gestures, keys
- •Audio State: What's playing, volume levels
Collision Detection
Start simple, optimize only if needed:
// AABB collision (rectangles)
const checkCollision = (a, b) => (
a.x < b.x + b.width &&
a.x + a.width > b.x &&
a.y < b.y + b.height &&
a.y + a.height > b.y
);
// Circle collision
const circleCollision = (a, b) => {
const dx = a.x - b.x;
const dy = a.y - b.y;
const distance = Math.sqrt(dx * dx + dy * dy);
return distance < a.radius + b.radius;
};
Game Feel ("Juice")
Good games feel responsive and alive. Add juice through:
Visual Feedback
- •Screen shake on impacts (subtle: 2-5px, dramatic: 10-15px)
- •Particle effects for collisions, explosions, trails
- •Squash/stretch on bounces and impacts
- •Flash effects on damage or scoring
- •Trails behind fast-moving objects
Audio Feedback
- •Vary pitch slightly on repeated sounds (±10%)
- •Layer sounds for impact (hit + whoosh + bass)
- •Use rising tones for positive events, falling for negative
- •Add subtle ambient soundscape
Timing & Easing
- •Use easing functions, never linear motion
- •Add anticipation before actions (wind-up)
- •Add follow-through after actions (settle)
- •Hit-stop/freeze frames on important impacts (16-50ms)
AI Opponent Design
Difficulty Scaling
const AI_CONFIGS = {
easy: {
reactionDelay: 200, // ms before responding
predictionError: 0.3, // randomness in targeting
speedMultiplier: 0.7, // movement speed
mistakeChance: 0.15 // chance to miss intentionally
},
medium: {
reactionDelay: 100,
predictionError: 0.15,
speedMultiplier: 0.9,
mistakeChance: 0.05
},
hard: {
reactionDelay: 50,
predictionError: 0.05,
speedMultiplier: 1.0,
mistakeChance: 0.01
}
};
AI Behavior Patterns
- •Reactive: Respond to current ball position
- •Predictive: Calculate where ball will arrive
- •Adaptive: Adjust strategy based on player patterns
- •Personality: Add quirks (aggressive, defensive, erratic)
Level Design & Progression
Difficulty Curve
Levels 1-10: Tutorial zone — Teach mechanics gently Levels 11-25: Learning zone — Introduce variations Levels 26-50: Challenge zone — Test mastery Levels 51-75: Expert zone — Combine mechanics Levels 76-100: Mastery zone — Peak difficulty
Progression Systems
- •Unlocks: New content as reward for progress
- •Upgrades: Permanent improvements
- •Achievements: Recognition for skill/exploration
- •Leaderboards: Social competition
Level Variation Techniques
- •Modify parameters (speed, size, count)
- •Add/remove elements
- •Change layouts
- •Introduce new mechanics
- •Combine existing mechanics
Visual Style Guidelines
Retro/Arcade (80s)
- •Neon colors:
#ff00ff,#00ffff,#39ff14,#ff6b35 - •Scanline/CRT effects
- •Pixel fonts or bold geometric sans-serif
- •Grid backgrounds, glow effects
- •High contrast, dark backgrounds
Modern Minimal
- •Limited color palette (2-3 colors)
- •Clean geometric shapes
- •Generous whitespace
- •Subtle shadows and depth
- •Smooth animations
Pixel Art
- •Consistent pixel scale (don't mix sizes)
- •Limited palette per sprite
- •Clear silhouettes
- •Animation principles still apply
Sound Design Checklist
Essential sounds for most games:
- • Menu navigation (select, confirm, back)
- • Core action sounds (hit, collect, shoot)
- • Feedback sounds (success, failure, damage)
- • Ambient/background music
- • Transition sounds (level start, game over)
Implementation tips:
- •Preload all sounds before gameplay
- •Use audio sprites for web
- •Implement volume controls (music/SFX separate)
- •Support mute toggle
- •Vary sounds slightly to avoid repetition fatigue
Performance Optimization
Critical for Games
- •Target 60 FPS consistently
- •Minimize garbage collection (object pooling)
- •Use
useMemo/useCallbackfor expensive calculations - •Batch state updates
- •Profile before optimizing
React Native Specific
- •Use
react-native-reanimatedfor animations - •Avoid JS thread blocking during gameplay
- •Use native driver for animations when possible
- •Consider
react-native-game-enginefor complex games
Project Structure Template
game-name/ ├── src/ │ ├── components/ │ │ ├── game/ # Game entities (Player, Ball, Enemy) │ │ ├── ui/ # UI components (Button, Modal, Score) │ │ └── effects/ # Visual effects (Particles, Glow) │ ├── screens/ # Full screens (Menu, Game, Settings) │ ├── hooks/ # Custom hooks (useGameLoop, useSound) │ ├── context/ # State management │ ├── utils/ # Helpers (physics, math, collision) │ ├── config/ # Constants, level data, settings │ ├── assets/ │ │ ├── sounds/ │ │ ├── images/ │ │ └── fonts/ │ └── types/ # TypeScript definitions ├── App.tsx └── package.json
Quality Checklist
Before considering a game complete:
Gameplay
- • Core loop is satisfying
- • Controls feel responsive (<100ms latency)
- • Difficulty curve is smooth
- • Edge cases handled (pause, background, resume)
Polish
- • Visual feedback for all actions
- • Sound effects for key events
- • Smooth transitions between states
- • Loading states where needed
UX
- • Clear how to play (tutorial or intuitive)
- • Progress is saved
- • Settings are accessible
- • Pause functionality works
Technical
- • Consistent 60 FPS
- • No memory leaks
- • Handles interruptions gracefully
- • Works on target devices/browsers