# pixelmintdrop

A modern Tetris implementation for Android, featuring smooth animations, responsive controls, and a beautiful minimalist design.

## Features

### Core Gameplay
- Classic Tetris mechanics
- 7-bag randomizer for piece distribution
- Ghost piece preview
- Hard drop and soft drop
- T-Spin detection and scoring
- High score system with top 5 scores

### Modern Android Features
- Optimized for Android 11+ (API 30+)
- Hardware-accelerated rendering
- High refresh rate support
- Haptic feedback for piece movement and line clears
- Dark theme support
- Responsive touch controls
- Edge-to-edge display support

### Scoring System

The game features a comprehensive scoring system:

#### Base Scores
- Single line: 40 points
- Double: 100 points
- Triple: 300 points
- Tetris (4 lines): 1200 points

#### Multipliers

1. **Level Multiplier**
   - Score is multiplied by current level
   - Level increases every 10 lines cleared
   - Maximum level is 20

2. **Combo System**
   - Combo counter increases with each line clear
   - Resets if no lines are cleared
   - Multipliers:
     - 1 combo: 1.0x
     - 2 combos: 1.5x
     - 3 combos: 2.0x
     - 4 combos: 2.5x
     - 5+ combos: 3.0x

3. **Back-to-Back Tetris**
   - 50% bonus (1.5x) for consecutive Tetris clears
   - Resets if a non-Tetris clear is performed

4. **Perfect Clear**
   - 2x for single line
   - 3x for double
   - 4x for triple
   - 5x for Tetris
   - Awarded when clearing lines without leaving blocks

5. **All Clear**
   - 2x multiplier when clearing all blocks
   - Requires no blocks in grid and no pieces in play

6. **T-Spin Bonuses**
   - Single: 2x
   - Double: 4x
   - Triple: 6x

### Controls
- Swipe left/right to move piece
- Swipe down quickly for hard drop
- Swipe down slowly for soft drop
- Single tap to rotate

### Visual Effects
- Smooth piece movement animations
- Pulsing border glow during line clears
- Ghost piece preview
- Block glow effects
- Subtle grid lines
- Animated title screen with falling pieces

## Technical Details

### Requirements
- Android 11 (API 30) or higher
- Hardware acceleration support
- 2GB RAM minimum

### Performance Optimizations
- Hardware-accelerated rendering
- Efficient collision detection
- Optimized grid operations
- Smooth animations at 60fps
- Background thread for score calculations

### Architecture
- Written in Kotlin
- Uses Android Canvas for rendering
- Follows Material Design guidelines
- Implements high score persistence using SharedPreferences

## Project Improvements and Best Practices

### Performance Optimizations

The codebase includes several performance optimizations:

1. **Release Build Configuration**
   - Minification enabled to reduce APK size
   - Resource shrinking to remove unused resources
   - ProGuard rules to optimize while preserving critical classes

2. **Memory Management**
   - Proper lifecycle handling to prevent memory leaks
   - Resource cleanup through `releaseResources()` methods
   - Efficient bitmap handling with reuse when possible

3. **Rendering Efficiency**
   - Custom view invalidation limited to areas that need updating
   - Hardware acceleration for canvas operations
   - Bitmap caching for frequently used graphics

### Code Organization

The codebase follows good architecture practices:

1. **Package Structure**
   - `model`: Data classes and game logic
   - `game`: Core gameplay implementation
   - `ui`: User interface components
   - `audio`: Sound and music management
   - `accessibility`: Accessibility helpers

2. **Responsibility Separation**
   - `GameLifecycleManager`: Handles lifecycle events
   - `GameUIManager`: Manages UI state and updates
   - `GameAccessibilityHelper`: Improves accessibility features
   - `GamepadController`: Manages gamepad input

### Google Play Compliance

The app meets Google Play standards:

1. **Manifest Configuration**
   - Proper permissions declaration
   - Screen orientation handling
   - Full backup rules for user data

2. **Accessibility Support**
   - Content descriptions for UI elements
   - Color contrast considerations
   - Screen reader compatibility

3. **Shortcuts and Deep Links**
   - App shortcuts for quick actions
   - Proper intent handling

### Usage Examples

#### Lifecycle Management

```kotlin
// In your activity
private lateinit var lifecycleManager: GameLifecycleManager

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    lifecycleManager = GameLifecycleManager(this)
}

override fun onPause() {
    super.onPause()
    lifecycleManager.onPause(gameView, gameMusic, statsManager, highScoreManager)
}

override fun onResume() {
    super.onResume()
    lifecycleManager.onResume(gameView, gameMusic, isMusicEnabled)
}

override fun onDestroy() {
    lifecycleManager.onDestroy(gameView, gameMusic, statsManager, highScoreManager)
    super.onDestroy()
}
```

#### Accessibility Implementation

```kotlin
// In your activity
private lateinit var accessibilityHelper: GameAccessibilityHelper

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    accessibilityHelper = GameAccessibilityHelper(this)
    
    // Setup accessibility descriptions for controls
    accessibilityHelper.setupAccessibilityDescriptions(
        leftButton, rightButton, rotateButton, dropButton, 
        holdButton, pauseButton, gameView, holdPieceView, nextPieceView
    )
}

// When level changes
private fun onLevelUp(newLevel: Int) {
    accessibilityHelper.announceLevelUp(gameView, newLevel)
}

// When game ends
private fun onGameOver(score: Long) {
    accessibilityHelper.announceGameOver(gameView, score)
}
```

## Building from Source

1. Clone the repository:
```bash
git clone https://github.com/cmclark00/pixelmintdrop.git
```

2. Open the project in Android Studio

3. Build and run on your device or emulator

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

This project is licensed under the MIT License - see the LICENSE file for details. 