refactor: reorganize Harmony and Victory guide sections
Eliminated duplication between Harmony and Victory tabs: **Harmony Tab** (focus: what ARE harmonies and how to FORM them): - Renamed title to "Mathematical Progressions" (clearer focus) - Updated intro to focus on patterns, not winning - Removed "Important Rules" section (moved to Victory) - Kept: 3 harmony types, formation strategies, quick reference **Victory Tab** (focus: how to WIN): - Expanded harmony victory section with placement requirements: - Must be in enemy territory - Must be in straight line - Must be adjacent/touching - Must form progression - Must survive one turn - Added reference to Harmony tab for progression details - Kept: Exhaustion victory, strategy tips Benefits: - Clear separation of concerns - No duplication - Better learning flow - Matches SPEC.md simplified rules 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -142,7 +142,10 @@
|
||||
"Bash(__NEW_LINE__ sed -n '68,73p' CaptureSection.tsx.bak)",
|
||||
"WebFetch(domain:hub.docker.com)",
|
||||
"Bash(gcloud auth:*)",
|
||||
"Bash(gcloud config list:*)"
|
||||
"Bash(gcloud config list:*)",
|
||||
"WebFetch(domain:www.boardspace.net)",
|
||||
"WebFetch(domain:www.gamecabinet.com)",
|
||||
"WebFetch(domain:en.wikipedia.org)"
|
||||
],
|
||||
"deny": [],
|
||||
"ask": []
|
||||
|
||||
@@ -343,38 +343,6 @@ export function HarmonySection({ useNativeAbacusNumbers }: { useNativeAbacusNumb
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Rules Section */}
|
||||
<div
|
||||
className={css({
|
||||
mt: '24px',
|
||||
p: '16px',
|
||||
bg: 'rgba(239, 68, 68, 0.1)',
|
||||
borderLeft: '4px solid #ef4444',
|
||||
borderRadius: '4px',
|
||||
})}
|
||||
>
|
||||
<p className={css({ fontSize: '16px', fontWeight: 'bold', color: '#991b1b', mb: '12px' })}>
|
||||
{t('harmony.rulesTitle')}
|
||||
</p>
|
||||
<ul className={css({ fontSize: '14px', color: '#7f1d1d', lineHeight: '1.8', pl: '20px' })}>
|
||||
<li>
|
||||
<strong>{t('harmony.enemyTerritoryTitle')}</strong> {t('harmony.enemyTerritory')}
|
||||
</li>
|
||||
<li>
|
||||
<strong>{t('harmony.straightLineTitle')}</strong> {t('harmony.straightLine')}
|
||||
</li>
|
||||
<li>
|
||||
<strong>{t('harmony.adjacentTitle')}</strong> {t('harmony.adjacent')}
|
||||
</li>
|
||||
<li>
|
||||
<strong>{t('harmony.survivalTitle')}</strong> {t('harmony.survival')}
|
||||
</li>
|
||||
<li>
|
||||
<strong>{t('harmony.victoryTitle')}</strong> {t('harmony.victoryRule')}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{/* Strategy Section */}
|
||||
<div className={css({ mt: '24px' })}>
|
||||
<h3
|
||||
|
||||
@@ -58,10 +58,51 @@ export function VictorySection({ useNativeAbacusNumbers }: { useNativeAbacusNumb
|
||||
<span>👑</span>
|
||||
<span>{t('victory.harmony')}</span>
|
||||
</h4>
|
||||
<p className={css({ fontSize: '15px', lineHeight: '1.6', color: '#374151', mb: '12px' })}>
|
||||
<p className={css({ fontSize: '15px', lineHeight: '1.6', color: '#374151', mb: '16px' })}>
|
||||
{t('victory.harmonyDesc')}
|
||||
</p>
|
||||
|
||||
{/* Requirements Section */}
|
||||
<div
|
||||
className={css({
|
||||
mb: '16px',
|
||||
p: '16px',
|
||||
bg: 'rgba(251, 191, 36, 0.1)',
|
||||
borderLeft: '4px solid #f59e0b',
|
||||
borderRadius: '4px',
|
||||
})}
|
||||
>
|
||||
<p
|
||||
className={css({
|
||||
fontSize: '16px',
|
||||
fontWeight: 'bold',
|
||||
color: '#92400e',
|
||||
mb: '12px',
|
||||
})}
|
||||
>
|
||||
{t('victory.requirementsTitle')}
|
||||
</p>
|
||||
<ul
|
||||
className={css({ fontSize: '14px', color: '#78350f', lineHeight: '1.8', pl: '20px' })}
|
||||
>
|
||||
<li>
|
||||
<strong>{t('victory.enemyTerritoryTitle')}</strong> {t('victory.enemyTerritory')}
|
||||
</li>
|
||||
<li>
|
||||
<strong>{t('victory.straightLineTitle')}</strong> {t('victory.straightLine')}
|
||||
</li>
|
||||
<li>
|
||||
<strong>{t('victory.adjacentTitle')}</strong> {t('victory.adjacent')}
|
||||
</li>
|
||||
<li>
|
||||
<strong>{t('victory.progressionTitle')}</strong> {t('victory.progression')}
|
||||
</li>
|
||||
<li>
|
||||
<strong>{t('victory.survivalTitle')}</strong> {t('victory.survival')}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{/* Visual example of winning harmony */}
|
||||
<div
|
||||
className={css({
|
||||
@@ -109,13 +150,13 @@ export function VictorySection({ useNativeAbacusNumbers }: { useNativeAbacusNumb
|
||||
<div
|
||||
className={css({
|
||||
p: '12px',
|
||||
bg: '#f0fdf4',
|
||||
bg: '#dbeafe',
|
||||
borderRadius: '6px',
|
||||
border: '1px solid #86efac',
|
||||
border: '1px solid #93c5fd',
|
||||
})}
|
||||
>
|
||||
<p className={css({ fontSize: '13px', color: '#15803d' })}>
|
||||
{t('victory.harmonyNote')}
|
||||
<p className={css({ fontSize: '13px', color: '#1e40af' })}>
|
||||
💡 {t('victory.harmonyNote')}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -141,31 +182,32 @@ export function VictorySection({ useNativeAbacusNumbers }: { useNativeAbacusNumb
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3
|
||||
className={css({
|
||||
fontSize: { base: '18px', md: '20px' },
|
||||
fontWeight: 'bold',
|
||||
color: '#7c2d12',
|
||||
mb: '12px',
|
||||
mt: '32px',
|
||||
})}
|
||||
>
|
||||
{t('victory.strategyTitle')}
|
||||
</h3>
|
||||
<ul
|
||||
className={css({
|
||||
fontSize: '14px',
|
||||
lineHeight: '1.8',
|
||||
pl: '20px',
|
||||
color: '#374151',
|
||||
})}
|
||||
>
|
||||
<li>{t('victory.tip1')}</li>
|
||||
<li>{t('victory.tip2')}</li>
|
||||
<li>{t('victory.tip3')}</li>
|
||||
<li>{t('victory.tip4')}</li>
|
||||
<li>{t('victory.tip5')}</li>
|
||||
</ul>
|
||||
<div className={css({ mt: '32px' })}>
|
||||
<h3
|
||||
className={css({
|
||||
fontSize: { base: '18px', md: '20px' },
|
||||
fontWeight: 'bold',
|
||||
color: '#7c2d12',
|
||||
mb: '12px',
|
||||
})}
|
||||
>
|
||||
{t('victory.strategyTitle')}
|
||||
</h3>
|
||||
<ul
|
||||
className={css({
|
||||
fontSize: '14px',
|
||||
lineHeight: '1.8',
|
||||
pl: '20px',
|
||||
color: '#374151',
|
||||
})}
|
||||
>
|
||||
<li>{t('victory.tip1')}</li>
|
||||
<li>{t('victory.tip2')}</li>
|
||||
<li>{t('victory.tip3')}</li>
|
||||
<li>{t('victory.tip4')}</li>
|
||||
<li>{t('victory.tip5')}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -178,24 +178,24 @@
|
||||
"pyramidEx3Note": "<strong>Face selection:</strong> Black chooses face 36 → 36 ÷ 9 = 4 (multiple) → Capture succeeds! Note: Black could also use face 4 with a helper 5 for sum (4 + 5 = 9), showing multiple valid approaches."
|
||||
},
|
||||
"harmony": {
|
||||
"title": "Harmonies: The Coolest Way to Win",
|
||||
"intro": "A Harmony is how you win the game. Get 3 of your pieces into enemy territory in a straight line. Their values must form a mathematical pattern.",
|
||||
"title": "Harmonies: Mathematical Progressions",
|
||||
"intro": "A Harmony is a special arrangement of 3 pieces whose values form a mathematical pattern.",
|
||||
"introDetail": "Think of it like a number sequence. There are 3 types of patterns you can make:",
|
||||
"arithmetic": "1. Arithmetic (Easiest)",
|
||||
"arithmeticDesc": "The middle number is exactly between the other two. Equal spacing.",
|
||||
"arithmeticFormula": "Middle × 2 = First + Last",
|
||||
"arithmeticTip": "Small circles (2-9) work great here. Look for equal gaps! Example: 6, 9, 12",
|
||||
"arithmeticCaption": "White pieces 6, 9, 12 in a row in enemy territory form an arithmetic progression",
|
||||
"arithmeticCaption": "White pieces 6, 9, 12 in a row form an arithmetic progression",
|
||||
"geometric": "2. Geometric (Multiply by Same Number)",
|
||||
"geometricDesc": "Multiply by the same number each time. Equal ratios.",
|
||||
"geometricFormula": "Middle² = First × Last",
|
||||
"geometricTip": "Square numbers work great! Example: 4, 8, 16 (multiply by 2 each time)",
|
||||
"geometricCaption": "White pieces 4, 8, 16 in a row in enemy territory form a geometric progression",
|
||||
"geometricCaption": "White pieces 4, 8, 16 in a row form a geometric progression",
|
||||
"harmonic": "3. Harmonic (Tricky!)",
|
||||
"harmonicDesc": "Based on musical harmonies. Hardest to spot.",
|
||||
"harmonicFormula": "2 × First × Last = Middle × (First + Last)",
|
||||
"harmonicTip": "These are rare. Just memorize these combos: 3-4-6, 4-6-12, 6-8-12, 6-10-15",
|
||||
"harmonicCaption": "White pieces 6, 8, 12 in a row in enemy territory form a harmonic progression",
|
||||
"harmonicCaption": "White pieces 6, 8, 12 in a row form a harmonic progression",
|
||||
"howToCheck": "How to check:",
|
||||
"example": "Example:",
|
||||
"check": "Check:",
|
||||
@@ -203,18 +203,7 @@
|
||||
"equal": "(equal!)",
|
||||
"ratios": "Ratios:",
|
||||
"strategyTip": "Strategy tip:",
|
||||
"rulesTitle": "⚠️ Important Rules",
|
||||
"enemyTerritoryTitle": "Must be in enemy territory:",
|
||||
"enemyTerritory": "All 3 pieces must be on opponent's side (White: rows 5-8, Black: rows 1-4)",
|
||||
"straightLineTitle": "Must be in a line:",
|
||||
"straightLine": "Row, column, or diagonal. No scattered pieces!",
|
||||
"adjacentTitle": "Must be touching:",
|
||||
"adjacent": "The 3 pieces must be next to each other with no gaps",
|
||||
"survivalTitle": "Must survive one turn:",
|
||||
"survival": "After you declare harmony, opponent gets ONE turn to break it",
|
||||
"victoryTitle": "Then you win:",
|
||||
"victoryRule": "If it survives, you win on your next turn!",
|
||||
"strategyTitle": "How to Win with Harmonies",
|
||||
"strategyTitle": "How to Build Harmonies",
|
||||
"startWith2Title": "Start with 2, then add the 3rd",
|
||||
"startWith2": "Get 2 pieces deep first. Figure out which 3rd piece completes the pattern. Then push that piece forward. They might not see it coming!",
|
||||
"useCommonTitle": "Use common numbers",
|
||||
@@ -230,13 +219,24 @@
|
||||
"victory": {
|
||||
"title": "How to Win",
|
||||
"harmony": "Victory #1: Harmony (Progression)",
|
||||
"harmonyDesc": "Form a mathematical progression with 3 pieces in enemy territory. If it survives your opponent's next turn, you win!",
|
||||
"harmonyDesc": "This is the primary way to win. Form a mathematical progression with 3 of your pieces in enemy territory. If it survives your opponent's next turn, you win!",
|
||||
"requirementsTitle": "Requirements",
|
||||
"enemyTerritoryTitle": "Must be in enemy territory:",
|
||||
"enemyTerritory": "All 3 pieces must be on opponent's side (White: rows 5-8, Black: rows 1-4)",
|
||||
"straightLineTitle": "Must be in a line:",
|
||||
"straightLine": "Row, column, or diagonal. No scattered pieces!",
|
||||
"adjacentTitle": "Must be touching:",
|
||||
"adjacent": "The 3 pieces must be next to each other with no gaps",
|
||||
"progressionTitle": "Must form a progression:",
|
||||
"progression": "Values must form arithmetic, geometric, or harmonic progression (see Harmony tab)",
|
||||
"survivalTitle": "Must survive one turn:",
|
||||
"survival": "After you declare harmony, opponent gets ONE turn to break it. If they can't, you win!",
|
||||
"exampleTitle": "Example: White Wins!",
|
||||
"exampleCaption": "White pieces 4, 8, 16 form a geometric progression in enemy territory. Black cannot break it - White wins!",
|
||||
"harmonyNote": "This is the primary victory condition in Rithmomachia",
|
||||
"exampleCaption": "White pieces 4, 8, 16 form a geometric progression in enemy territory (rows 5-8). Black cannot break it - White wins!",
|
||||
"harmonyNote": "See the Harmony tab for details on the three types of progressions and how to form them",
|
||||
"exhaustion": "Victory #2: Exhaustion",
|
||||
"exhaustionDesc": "If your opponent has no legal moves at the start of their turn, they lose.",
|
||||
"strategyTitle": "Quick Tips",
|
||||
"strategyTitle": "Winning Strategies",
|
||||
"tip1": "Control the center - easier to push forward",
|
||||
"tip2": "Small pieces are fast - circles can slip into enemy side quickly",
|
||||
"tip3": "Big pieces are powerful - harder to capture",
|
||||
|
||||
Reference in New Issue
Block a user