3.7 KiB
Mine-Seeker Bonus Points System
Overview
The Mine-Seeker game includes a bonus points system that rewards skilled play. Bonus points are tracked separately from the main score and displayed in the "Bonus Statistics" dialog.
Bonus Point Types
1. Blind Hit (+2 points)
When: Click a mine with no revealed numbered neighbors around it.
Example: Mine surrounded by unrevealed cells = +2 points
2. Chain Combo
When: Click consecutive mines without clicking any safe cell in between.
Tracked as:
chainCurrent: Current streak (resets when you click a safe cell)chainBest: Longest streak achieved
Example: Mine → Mine → Mine = chainBest becomes 3
3. Edge Mine (+1 point)
When: Click a mine on the board boundary (row 0, row 15, col 0, or col 15).
Example: Click a mine on the edge = +1 point
4. Endgame Mine (+3 points)
When: Click a mine when 10 or fewer mines remain on the board.
Calculation: 51 total mines - (red_points + blue_points) = mines_remaining
Example: When 8 mines remain, click one = +3 points
5. Safe Cell Bonus (+0.5 points per cell)
When: Click a safe cell and reveal 2 or more cells.
Important: Minimum 2 cells required. Single cell reveals = 0 points.
Examples:
- Reveal 1 safe cell = 0 points
- Reveal 2 safe cells = 1.0 points
- Reveal 11 safe cells = 5.5 points
6. Biggest Reveal (Tracking stat)
What: Tracks the largest number of safe cells revealed in one click.
Example: Largest reveal in a game = 15 cells shown in stats
Bonus Statistics Display
Dialog Shows
- Both players' bonus statistics side-by-side
- Each stat with label, description, and value
- Total bonus points per player
Player Name Rules
anon_*usernames → displays as "Anonymous"- Names longer than 10 chars → truncated to 7 chars + "..." (example:
VeryLongName→VeryLon...)
Tracked Statistics
{
blindHits: 0, // Blind hit mines clicked
chainBest: 0, // Longest mine streak
chainCurrent: 0, // Current active streak
lastMineHits: 0, // Endgame mines clicked
edgeMines: 0, // Edge mine clicks
biggestReveal: 0 // Largest safe cell reveal
}
Database
red_bonus_points(FLOAT) — Red player's total bonus pointsblue_bonus_points(FLOAT) — Blue player's total bonus pointsred_bonus_stats(JSON) — Red player's tracked statsblue_bonus_stats(JSON) — Blue player's tracked stats
📋 Documentation Maintenance
IMPORTANT: This documentation must be updated whenever:
- New bonus types are added
- Point values change
- Bonus calculation logic changes
- New stats are tracked
- Bonus display rules change
Update these files:
- This file (
BONUS_POINTS_SYSTEM.md) — Update descriptions and examples - Code comments in
/src/Util/TopicManager.php— Explain calculation logic /docs/README.md— Update Quick Reference table if values change
Keep documentation:
- ✅ Simple and clear
- ✅ With real code examples
- ✅ Synchronized with actual code behavior
- ✅ Updated before/after feature changes
Implementation Files
- Backend:
/src/Util/TopicManager.php— Bonus calculation logic - Frontend:
/assets/js/mine-seeker/contexts/GameProvider.jsx— State sync - UI:
/assets/js/mine-seeker/components/BonusStatsDialog.jsx— Display dialog - Constants:
/assets/js/mine-seeker/utils/constants.jsx— Labels and defaults
Quick Checklist for Changes
- Code changes implemented
- This documentation updated
/docs/README.mdQuick Reference table updated- Code comments added/updated
- Examples updated to match new behavior