fix(rithmomachia): fix harmony section translation structure for hi/ja/es

Fixed nested object structures in harmony sections that were causing
"returned an object instead of string" errors.

Changes:
- Hindi (hi.json): Flattened arithmetic/geometric/harmonic objects to flat keys
- Japanese (ja.json): Flattened arithmetic/geometric/harmonic objects to flat keys
- Spanish (es.json): Flattened arithmetic/geometric/harmonic objects to flat keys
- Added missing translation keys for all languages
- Removed duplicate/old keys
- Fixed TypeScript error in PiecesSection.tsx (pyramid value type)
- Removed unused i18nInstance import from PlayingGuideModal.tsx
- Removed duplicate simpleTitle key from la.json

All harmony sections now use flat key structure matching English/German.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Thomas Hallock
2025-10-31 19:58:52 -05:00
parent 4fa20f44cb
commit 14259a19a9
12 changed files with 1312 additions and 350 deletions

View File

@@ -1,3 +1,4 @@
import { AbacusReact, useAbacusDisplay } from '@soroban/abacus-react'
import type { Color, PieceType } from '../types'
interface PieceRendererProps {
@@ -5,6 +6,7 @@ interface PieceRendererProps {
color: Color
value: number | string
size?: number
useNativeAbacusNumbers?: boolean
}
/**
@@ -12,8 +14,15 @@ interface PieceRendererProps {
* BLACK pieces: dark gradient fill with light border, point RIGHT (towards white)
* WHITE pieces: light gradient fill with dark border, point LEFT (towards black)
*/
export function PieceRenderer({ type, color, value, size = 48 }: PieceRendererProps) {
export function PieceRenderer({
type,
color,
value,
size = 48,
useNativeAbacusNumbers = false,
}: PieceRendererProps) {
const isDark = color === 'B'
const { config } = useAbacusDisplay()
// Gradient IDs
const gradientId = `gradient-${type}-${color}-${size}`
@@ -217,56 +226,99 @@ export function PieceRenderer({ type, color, value, size = 48 }: PieceRendererPr
{renderShape()}
{/* Pyramids don't show numbers */}
{type !== 'P' && (
<g>
{/* Outer glow/shadow for emphasis */}
{isDark ? (
<text
x={size / 2}
y={size / 2}
textAnchor="middle"
dominantBaseline="central"
fill="none"
stroke="rgba(255, 255, 255, 0.4)"
strokeWidth={fontSize * 0.2}
fontSize={fontSize}
fontWeight="900"
fontFamily="Georgia, 'Times New Roman', serif"
>
{value}
</text>
) : (
<text
x={size / 2}
y={size / 2}
textAnchor="middle"
dominantBaseline="central"
fill="none"
stroke="rgba(255, 255, 255, 0.95)"
strokeWidth={fontSize * 0.25}
fontSize={fontSize}
fontWeight="900"
fontFamily="Georgia, 'Times New Roman', serif"
>
{value}
</text>
)}
{/* Main text */}
<text
x={size / 2}
y={size / 2}
textAnchor="middle"
dominantBaseline="central"
fill={textColor}
fontSize={fontSize}
fontWeight="900"
fontFamily="Georgia, 'Times New Roman', serif"
filter={isDark ? `url(#text-shadow-${color})` : undefined}
{type !== 'P' &&
(useNativeAbacusNumbers && typeof value === 'number' ? (
// Render mini abacus
<foreignObject
x={size * 0.1}
y={size * 0.1}
width={size * 0.8}
height={size * 0.8}
style={{ overflow: 'visible' }}
>
{value}
</text>
</g>
)}
<div
style={{
width: '100%',
height: '100%',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
}}
>
<AbacusReact
value={value}
columns={Math.max(1, Math.ceil(Math.log10(value + 1)))}
scaleFactor={0.35}
showNumbers={false}
beadShape={config.beadShape}
colorScheme={config.colorScheme}
hideInactiveBeads={config.hideInactiveBeads}
customStyles={{
columnPosts: {
fill: isDark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.15)',
stroke: isDark ? 'rgba(255, 255, 255, 0.15)' : 'rgba(0, 0, 0, 0.1)',
strokeWidth: 1,
},
reckoningBar: {
fill: isDark ? 'rgba(255, 255, 255, 0.25)' : 'rgba(0, 0, 0, 0.2)',
stroke: isDark ? 'rgba(255, 255, 255, 0.2)' : 'rgba(0, 0, 0, 0.15)',
strokeWidth: 1,
},
}}
/>
</div>
</foreignObject>
) : (
// Render traditional text number
<g>
{/* Outer glow/shadow for emphasis */}
{isDark ? (
<text
x={size / 2}
y={size / 2}
textAnchor="middle"
dominantBaseline="central"
fill="none"
stroke="rgba(255, 255, 255, 0.4)"
strokeWidth={fontSize * 0.2}
fontSize={fontSize}
fontWeight="900"
fontFamily="Georgia, 'Times New Roman', serif"
>
{value}
</text>
) : (
<text
x={size / 2}
y={size / 2}
textAnchor="middle"
dominantBaseline="central"
fill="none"
stroke="rgba(255, 255, 255, 0.95)"
strokeWidth={fontSize * 0.25}
fontSize={fontSize}
fontWeight="900"
fontFamily="Georgia, 'Times New Roman', serif"
>
{value}
</text>
)}
{/* Main text */}
<text
x={size / 2}
y={size / 2}
textAnchor="middle"
dominantBaseline="central"
fill={textColor}
fontSize={fontSize}
fontWeight="900"
fontFamily="Georgia, 'Times New Roman', serif"
filter={isDark ? `url(#text-shadow-${color})` : undefined}
>
{value}
</text>
</g>
))}
</svg>
)
}

View File

@@ -5,7 +5,7 @@ import { useTranslation } from 'react-i18next'
import { css } from '../../../../styled-system/css'
import { Z_INDEX } from '@/constants/zIndex'
import { useAbacusSettings } from '@/hooks/useAbacusSettings'
import '../i18n/config' // Initialize i18n
import { resources } from '../i18n/config'
import { OverviewSection } from './guide-sections/OverviewSection'
import { PiecesSection } from './guide-sections/PiecesSection'
import { CaptureSection } from './guide-sections/CaptureSection'
@@ -448,8 +448,11 @@ export function PlayingGuideModal({ isOpen, onClose, standalone = false }: Playi
},
})}
>
<option value="en">{t('guide.languageSelector.en', 'English')}</option>
<option value="de">{t('guide.languageSelector.de', 'Deutsch')}</option>
{Object.keys(resources).map((langCode) => (
<option key={langCode} value={langCode}>
{t(`guide.languageSelector.${langCode}`, langCode.toUpperCase())}
</option>
))}
</select>
</div>
</div>

View File

@@ -0,0 +1,200 @@
import { css } from '../../../../styled-system/css'
import { PieceRenderer } from './PieceRenderer'
import type { Color, PieceType } from '../types'
/**
* Simplified piece for board examples
*/
export interface ExamplePiece {
square: string // e.g. "A1", "B2"
type: PieceType
color: Color
value: number
}
interface CropArea {
// Support both naming conventions for backwards compatibility
minCol?: number // 0-15 (A=0, P=15)
maxCol?: number // 0-15
minRow?: number // 1-8
maxRow?: number // 1-8
startCol?: number // Alternative: 0-15
endCol?: number // Alternative: 0-15
startRow?: number // Alternative: 1-8
endRow?: number // Alternative: 1-8
}
interface RithmomachiaBoardProps {
pieces: ExamplePiece[]
highlightSquares?: string[] // Squares to highlight (e.g. for harmony examples)
scale?: number // Scale factor for the board size
showLabels?: boolean // Show rank/file labels
cropArea?: CropArea // Crop to show only a rectangular subsection
useNativeAbacusNumbers?: boolean // Display numbers as mini abaci
}
/**
* Reusable board component for displaying Rithmomachia positions.
* Used in the guide and for board examples.
*/
export function RithmomachiaBoard({
pieces,
highlightSquares = [],
scale = 0.5,
showLabels = true, // Default to true for proper board labels
cropArea,
useNativeAbacusNumbers = false,
}: RithmomachiaBoardProps) {
// Board dimensions
const cellSize = 100 // SVG units per cell
const gap = 2
const padding = 10
const labelMargin = showLabels ? 30 : 0 // Space for row/column labels
// Determine the area to display (support both naming conventions)
const minCol = cropArea?.minCol ?? cropArea?.startCol ?? 0
const maxCol = cropArea?.maxCol ?? cropArea?.endCol ?? 15
const minRow = cropArea?.minRow ?? cropArea?.startRow ?? 1
const maxRow = cropArea?.maxRow ?? cropArea?.endRow ?? 8
const displayCols = maxCol - minCol + 1
const displayRows = maxRow - minRow + 1
// Calculate cropped board dimensions (including label margins)
const boardInnerWidth = displayCols * cellSize + (displayCols - 1) * gap
const boardInnerHeight = displayRows * cellSize + (displayRows - 1) * gap
const boardWidth = boardInnerWidth + padding * 2 + labelMargin
const boardHeight = boardInnerHeight + padding * 2 + labelMargin
return (
<div
data-component="rithmomachia-board-example"
className={css({
width: '100%',
maxWidth: `${boardWidth * scale}px`,
margin: '0 auto',
})}
>
<svg
viewBox={`0 0 ${boardWidth} ${boardHeight}`}
className={css({
width: '100%',
height: 'auto',
})}
>
{/* Board background */}
<rect x={0} y={0} width={boardWidth} height={boardHeight} fill="#d1d5db" rx={8} />
{/* Board squares */}
{Array.from({ length: displayRows }, (_, displayRow) => {
const actualRank = maxRow - displayRow
return Array.from({ length: displayCols }, (_, displayCol) => {
const actualCol = minCol + displayCol
const square = `${String.fromCharCode(65 + actualCol)}${actualRank}`
const isLight = (actualCol + actualRank) % 2 === 0
const isHighlighted = highlightSquares.includes(square)
const x = labelMargin + padding + displayCol * (cellSize + gap)
const y = padding + displayRow * (cellSize + gap)
return (
<g key={square}>
<rect
x={x}
y={y}
width={cellSize}
height={cellSize}
fill={isHighlighted ? '#fde047' : isLight ? '#f3f4f6' : '#e5e7eb'}
stroke={isHighlighted ? '#f59e0b' : 'none'}
strokeWidth={isHighlighted ? 3 : 0}
/>
</g>
)
})
})}
{/* Column labels (A-P) at the bottom */}
{showLabels &&
Array.from({ length: displayCols }, (_, displayCol) => {
const actualCol = minCol + displayCol
const colLabel = String.fromCharCode(65 + actualCol)
const x = labelMargin + padding + displayCol * (cellSize + gap) + cellSize / 2
const y = boardHeight - 10
return (
<text
key={`col-${colLabel}`}
x={x}
y={y}
fontSize="20"
fontWeight="bold"
fill="#374151"
fontFamily="sans-serif"
textAnchor="middle"
dominantBaseline="middle"
>
{colLabel}
</text>
)
})}
{/* Row labels (1-8) on the left */}
{showLabels &&
Array.from({ length: displayRows }, (_, displayRow) => {
const actualRank = maxRow - displayRow
const x = 15
const y = padding + displayRow * (cellSize + gap) + cellSize / 2
return (
<text
key={`row-${actualRank}`}
x={x}
y={y}
fontSize="20"
fontWeight="bold"
fill="#374151"
fontFamily="sans-serif"
textAnchor="middle"
dominantBaseline="middle"
>
{actualRank}
</text>
)
})}
{/* Pieces */}
{pieces
.filter((piece) => {
const file = piece.square.charCodeAt(0) - 65
const rank = Number.parseInt(piece.square.slice(1), 10)
return file >= minCol && file <= maxCol && rank >= minRow && rank <= maxRow
})
.map((piece, idx) => {
const file = piece.square.charCodeAt(0) - 65
const rank = Number.parseInt(piece.square.slice(1), 10)
// Calculate position relative to the crop area
const displayCol = file - minCol
const displayRow = maxRow - rank
const x = labelMargin + padding + displayCol * (cellSize + gap) + cellSize / 2
const y = padding + displayRow * (cellSize + gap) + cellSize / 2
return (
<g key={`${piece.square}-${idx}`} transform={`translate(${x}, ${y})`}>
<g transform={`translate(${-cellSize / 2}, ${-cellSize / 2})`}>
<PieceRenderer
type={piece.type}
color={piece.color}
value={piece.value}
size={cellSize}
useNativeAbacusNumbers={useNativeAbacusNumbers}
/>
</g>
</g>
)
})}
</svg>
</div>
)
}

View File

@@ -13,6 +13,7 @@ import { useGameMode } from '@/contexts/GameModeContext'
import { useFullscreen } from '@/contexts/FullscreenContext'
import { useRoomData, useKickUser, useDeactivatePlayer } from '@/hooks/useRoomData'
import { useViewerId } from '@/hooks/useViewerId'
import { useAbacusSettings } from '@/hooks/useAbacusSettings'
import type { RosterWarning } from '@/components/nav/GameContextNav'
import { css } from '../../../../styled-system/css'
import { useRithmomachia } from '../Provider'
@@ -266,6 +267,10 @@ export function RithmomachiaGame() {
assignWhitePlayer,
assignBlackPlayer,
} = useRithmomachia()
// Get abacus settings for native abacus numbers
const { data: abacusSettings } = useAbacusSettings()
const useNativeAbacusNumbers = abacusSettings?.nativeAbacusNumbers ?? false
const { setFullscreenElement } = useFullscreen()
const gameRef = useRef<HTMLDivElement>(null)
const rosterWarning = useRosterWarning(state.gamePhase === 'setup' ? 'setup' : 'playing')
@@ -1128,6 +1133,10 @@ function SetupPhase({ onOpenGuide }: { onOpenGuide: () => void }) {
function PlayingPhase({ onOpenGuide }: { onOpenGuide: () => void }) {
const { state, isMyTurn, lastError, clearError, rosterStatus } = useRithmomachia()
// Get abacus settings for native abacus numbers
const { data: abacusSettings } = useAbacusSettings()
const useNativeAbacusNumbers = abacusSettings?.nativeAbacusNumbers ?? false
return (
<div
className={css({
@@ -1283,6 +1292,7 @@ function AnimatedHelperPiece({
onSelectHelper,
closing,
onHover,
useNativeAbacusNumbers = false,
}: {
piece: Piece
boardPos: { x: number; y: number }
@@ -1292,6 +1302,7 @@ function AnimatedHelperPiece({
onSelectHelper: (pieceId: string) => void
closing: boolean
onHover?: (pieceId: string | null) => void
useNativeAbacusNumbers?: boolean
}) {
console.log(
`[AnimatedHelperPiece] Rendering piece ${piece.id}: boardPos=(${boardPos.x}, ${boardPos.y}), ringPos=(${ringX}, ${ringY}), closing=${closing}`
@@ -1337,7 +1348,13 @@ function AnimatedHelperPiece({
strokeWidth={4}
/>
<g transform={`translate(${-cellSize / 2}, ${-cellSize / 2})`}>
<PieceRenderer type={piece.type} color={piece.color} value={value} size={cellSize} />
<PieceRenderer
type={piece.type}
color={piece.color}
value={value}
size={cellSize}
useNativeAbacusNumbers={useNativeAbacusNumbers}
/>
</g>
</animated.g>
)
@@ -1358,6 +1375,7 @@ function HelperSelectionOptions({
moverPiece,
targetPiece,
relation,
useNativeAbacusNumbers = false,
}: {
helpers: Array<{ piece: Piece; boardPos: { x: number; y: number } }>
targetPos: { x: number; y: number }
@@ -1369,6 +1387,7 @@ function HelperSelectionOptions({
moverPiece: Piece
targetPiece: Piece
relation: RelationKind
useNativeAbacusNumbers?: boolean
}) {
const [hoveredHelperId, setHoveredHelperId] = useState<string | null>(null)
const maxRadius = cellSize * 1.2
@@ -1441,6 +1460,7 @@ function HelperSelectionOptions({
cellSize={cellSize}
onSelectHelper={onSelectHelper}
closing={closing}
useNativeAbacusNumbers={useNativeAbacusNumbers}
onHover={setHoveredHelperId}
/>
)
@@ -1546,6 +1566,7 @@ function NumberBondVisualization({
helperStartPos,
padding,
gap,
useNativeAbacusNumbers = false,
}: {
moverPiece: Piece
helperPiece: Piece
@@ -1558,6 +1579,7 @@ function NumberBondVisualization({
autoAnimate?: boolean
moverStartPos: { x: number; y: number }
helperStartPos: { x: number; y: number }
useNativeAbacusNumbers?: boolean
padding: number
gap: number
}) {
@@ -1691,6 +1713,7 @@ function NumberBondVisualization({
color={moverPiece.color}
value={getMoverValue() || 0}
size={cellSize}
useNativeAbacusNumbers={useNativeAbacusNumbers}
/>
</g>
</animated.g>
@@ -1716,6 +1739,7 @@ function NumberBondVisualization({
color={helperPiece.color}
value={getHelperValue() || 0}
size={cellSize}
useNativeAbacusNumbers={useNativeAbacusNumbers}
/>
</g>
</animated.g>
@@ -1738,6 +1762,7 @@ function NumberBondVisualization({
<g transform={`translate(${-cellSize / 2}, ${-cellSize / 2})`}>
<PieceRenderer
type={targetPiece.type}
useNativeAbacusNumbers={useNativeAbacusNumbers}
color={targetPiece.color}
value={getTargetValue() || 0}
size={cellSize}
@@ -2215,18 +2240,22 @@ function SvgPiece({
piece,
cellSize,
padding,
labelMargin = 0,
opacity = 1,
useNativeAbacusNumbers = false,
}: {
piece: Piece
cellSize: number
padding: number
labelMargin?: number
opacity?: number
useNativeAbacusNumbers?: boolean
}) {
const file = piece.square.charCodeAt(0) - 65 // A=0
const rank = Number.parseInt(piece.square.slice(1), 10) // 1-8
const row = 8 - rank // Invert for display
const x = padding + file * cellSize
const x = labelMargin + padding + file * cellSize
const y = padding + row * cellSize
const spring = useSpring({
@@ -2255,6 +2284,7 @@ function SvgPiece({
color={piece.color}
value={piece.type === 'P' ? piece.pyramidFaces?.[0] || 0 : piece.value || 0}
size={pieceSize}
useNativeAbacusNumbers={useNativeAbacusNumbers}
/>
</div>
</foreignObject>
@@ -2267,6 +2297,11 @@ function SvgPiece({
*/
function BoardDisplay() {
const { state, makeMove, playerColor, isMyTurn } = useRithmomachia()
// Get abacus settings for native abacus numbers
const { data: abacusSettings } = useAbacusSettings()
const useNativeAbacusNumbers = abacusSettings?.nativeAbacusNumbers ?? false
const [selectedSquare, setSelectedSquare] = useState<string | null>(null)
const [captureDialogOpen, setCaptureDialogOpen] = useState(false)
const [closingDialog, setClosingDialog] = useState(false)
@@ -2545,8 +2580,11 @@ function BoardDisplay() {
const cellSize = 100 // SVG units per cell
const gap = 2
const padding = 10
const boardWidth = cols * cellSize + (cols - 1) * gap + padding * 2
const boardHeight = rows * cellSize + (rows - 1) * gap + padding * 2
const labelMargin = 30 // Space for row/column labels
const boardInnerWidth = cols * cellSize + (cols - 1) * gap
const boardInnerHeight = rows * cellSize + (rows - 1) * gap
const boardWidth = boardInnerWidth + padding * 2 + labelMargin
const boardHeight = boardInnerHeight + padding * 2 + labelMargin
const handleSvgClick = (e: React.MouseEvent<SVGSVGElement>) => {
if (!isMyTurn) return
@@ -2559,7 +2597,7 @@ function BoardDisplay() {
const svg = e.currentTarget
const rect = svg.getBoundingClientRect()
const x = ((e.clientX - rect.left) / rect.width) * boardWidth - padding
const x = ((e.clientX - rect.left) / rect.width) * boardWidth - labelMargin - padding
const y = ((e.clientY - rect.top) / rect.height) * boardHeight - padding
// Convert to grid coordinates
@@ -2578,7 +2616,7 @@ function BoardDisplay() {
const file = square.charCodeAt(0) - 65
const rank = Number.parseInt(square.slice(1), 10)
const row = 8 - rank
const x = padding + file * (cellSize + gap) + cellSize / 2
const x = labelMargin + padding + file * (cellSize + gap) + cellSize / 2
const y = padding + row * (cellSize + gap) + cellSize / 2
console.log(
`[getSquarePosition] square: ${square}, file: ${file}, rank: ${rank}, row: ${row}, x: ${x}, y: ${y}, cellSize: ${cellSize}, gap: ${gap}, padding: ${padding}`
@@ -2713,7 +2751,7 @@ function BoardDisplay() {
const isLight = (col + actualRank) % 2 === 0
const isSelected = selectedSquare === square
const x = padding + col * (cellSize + gap)
const x = labelMargin + padding + col * (cellSize + gap)
const y = padding + row * (cellSize + gap)
return (
@@ -2731,6 +2769,52 @@ function BoardDisplay() {
})
})}
{/* Column labels (A-P) at the bottom */}
{Array.from({ length: cols }, (_, col) => {
const colLabel = String.fromCharCode(65 + col)
const x = labelMargin + padding + col * (cellSize + gap) + cellSize / 2
const y = boardHeight - 10
return (
<text
key={`col-${colLabel}`}
x={x}
y={y}
fontSize="20"
fontWeight="bold"
fill="#374151"
fontFamily="sans-serif"
textAnchor="middle"
dominantBaseline="middle"
>
{colLabel}
</text>
)
})}
{/* Row labels (1-8) on the left */}
{Array.from({ length: rows }, (_, row) => {
const actualRank = 8 - row
const x = 15
const y = padding + row * (cellSize + gap) + cellSize / 2
return (
<text
key={`row-${actualRank}`}
x={x}
y={y}
fontSize="20"
fontWeight="bold"
fill="#374151"
fontFamily="sans-serif"
textAnchor="middle"
dominantBaseline="middle"
>
{actualRank}
</text>
)
})}
{/* Pieces */}
{activePieces.map((piece) => {
// Show low opacity for pieces currently being shown as helper options or in the number bond
@@ -2743,7 +2827,9 @@ function BoardDisplay() {
piece={piece}
cellSize={cellSize + gap}
padding={padding}
labelMargin={labelMargin}
opacity={isInNumberBond ? 0.2 : 1}
useNativeAbacusNumbers={useNativeAbacusNumbers}
/>
)
})}
@@ -2798,6 +2884,7 @@ function BoardDisplay() {
helperStartPos={helperStartPos}
padding={padding}
gap={gap}
useNativeAbacusNumbers={useNativeAbacusNumbers}
/>
)
}
@@ -2837,6 +2924,7 @@ function BoardDisplay() {
moverPiece={moverPiece}
targetPiece={targetPiece}
relation={selectedRelation}
useNativeAbacusNumbers={useNativeAbacusNumbers}
/>
)
}

View File

@@ -342,7 +342,7 @@ export function PiecesSection({ useNativeAbacusNumbers }: { useNativeAbacusNumbe
<RithmomachiaBoard
pieces={[
// White Pyramid at H5
{ square: 'H5', type: 'P', color: 'W', value: 'P' },
{ square: 'H5', type: 'P', color: 'W', value: 49 },
// Black pieces that can be captured
{ square: 'I5', type: 'T', color: 'B', value: 16 },
{ square: 'H6', type: 'S', color: 'B', value: 49 },

View File

@@ -0,0 +1,30 @@
import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import en from './locales/en.json'
import de from './locales/de.json'
import ja from './locales/ja.json'
import hi from './locales/hi.json'
import es from './locales/es.json'
import la from './locales/la.json'
export const defaultNS = 'translation'
export const resources = {
en: { translation: en },
de: { translation: de },
ja: { translation: ja },
hi: { translation: hi },
es: { translation: es },
la: { translation: la },
} as const
i18n.use(initReactI18next).init({
lng: 'en',
fallbackLng: 'en',
defaultNS,
resources,
interpolation: {
escapeValue: false, // React already escapes
},
})
export default i18n

View File

@@ -17,7 +17,11 @@
"languageSelector": {
"label": "Sprache",
"en": "English",
"de": "Deutsch"
"de": "Deutsch",
"ja": "日本語",
"hi": "हिन्दी",
"es": "Español",
"la": "Latina"
},
"overview": {
"goalTitle": "Spielziel",
@@ -31,7 +35,20 @@
"step2": "Suchen Sie nach Schlagmöglichkeiten durch mathematische Beziehungen",
"step3": "Dringen Sie ins gegnerische Gebiet vor (Reihen 1-4 für Schwarz, Reihen 5-8 für Weiß)",
"step4": "Achten Sie auf Harmoniemöglichkeiten mit Ihren vorderen Steinen",
"step5": "Gewinnen Sie durch eine Progression, die eine Runde übersteht!"
"step5": "Gewinnen Sie durch eine Progression, die eine Runde übersteht!",
"goalDesc": "Ordnen Sie <strong>3 Ihrer Steine im gegnerischen Gebiet</strong> an, um eine <strong>mathematische Progression</strong> zu bilden, überstehen Sie eine Gegnerrunde und gewinnen Sie.",
"boardItems": [
"8 Reihen × 16 Spalten (Spalten A-P, Reihen 1-8)",
"<strong>Ihre Hälfte:</strong> Schwarz kontrolliert Reihen 5-8, Weiß kontrolliert Reihen 1-4",
"<strong>Gegnerisches Gebiet:</strong> Wo Sie Ihre Siegprogression aufbauen müssen"
],
"howToPlayItems": [
"Bewegen Sie Steine zunächst zur Mitte",
"Suchen Sie nach Schlagmöglichkeiten durch mathematische Beziehungen",
"Dringen Sie ins gegnerische Gebiet vor (Reihen 1-4 für Schwarz, Reihen 5-8 für Weiß)",
"Achten Sie auf Harmoniemöglichkeiten mit Ihren vorderen Steinen",
"Gewinnen Sie durch eine Progression, die eine Runde übersteht!"
]
},
"pieces": {
"title": "Ihre Spielfiguren (25 insgesamt)",
@@ -64,7 +81,30 @@
"pyramidCaptureOptions": "Schlagoptionen von H5:",
"pyramidOption1": "Zug nach I5: Wähle Seite 64 → schlägt 16 durch Vielfaches (64÷16=4)",
"pyramidOption2": "Zug nach H6: Wähle Seite 49 → schlägt 49 durch Gleichheit (49=49)",
"pyramidOption3": "Zug nach G5: Wähle Seite 25 → schlägt 25 durch Gleichheit (25=25)"
"pyramidOption3": "Zug nach G5: Wähle Seite 25 → schlägt 25 durch Gleichheit (25=25)",
"intro": "Jeder Stein hat einen <strong>Zahlenwert</strong> und bewegt sich unterschiedlich:",
"pieceTypes": {
"circle": {
"name": "Kreis",
"movement": "Diagonal (wie ein Läufer)",
"count": "Anzahl: 8"
},
"triangle": {
"name": "Dreieck",
"movement": "Gerade Linien (wie ein Turm)",
"count": "Anzahl: 8"
},
"square": {
"name": "Quadrat",
"movement": "Alle Richtungen (wie eine Dame)",
"count": "Anzahl: 7"
},
"pyramid": {
"name": "Pyramide",
"movement": "Ein Feld in alle Richtungen (wie ein König)",
"count": "Anzahl: 1"
}
}
},
"capture": {
"title": "Wie man schlägt",
@@ -90,7 +130,50 @@
"ratioExample": "Ihre 20 ÷ Helfer 4 = Gegner 5",
"ratioCaption": "Weißes Dreieck (20) kann schwarzen Kreis (5) mit Helfer-Kreis (4) schlagen: 20 ÷ 4 = 5",
"helpersTitle": "💡 Was sind Helfer?",
"helpersDescription": "Helfer sind Ihre anderen Steine auf dem Brett. Sie bewegen sich nicht - sie fügen nur ihre Zahl zur Mathematik hinzu. Das Spiel zeigt Ihnen welche Schläge funktionieren wenn Sie einen Stein anklicken."
"helpersDescription": "Helfer sind Ihre anderen Steine auf dem Brett. Sie bewegen sich nicht - sie fügen nur ihre Zahl zur Mathematik hinzu. Das Spiel zeigt Ihnen welche Schläge funktionieren wenn Sie einen Stein anklicken.",
"intro": "Sie können einen gegnerischen Stein <strong>nur schlagen, wenn der Wert Ihres Steins mathematisch verwandt</strong> ist:",
"simpleEqual": {
"name": "Gleich",
"desc": "Ihre 25 schlägt deren 25"
},
"simpleMultiple": {
"name": "Vielfaches / Teiler",
"desc": "Ihre 64 schlägt deren 16 (64 ÷ 16 = 4)"
},
"advancedSum": {
"name": "Summe",
"desc": "Ihre 9 + Helfer 16 = Gegner 25"
},
"advancedDifference": {
"name": "Differenz",
"desc": "Ihre 30 - Helfer 10 = Gegner 20"
},
"advancedProduct": {
"name": "Produkt",
"desc": "Ihre 5 × Helfer 5 = Gegner 25"
},
"helpersDesc": "Helfer sind Ihre anderen Steine auf dem Brett — sie bewegen sich nicht, sie geben nur ihren Wert für die Mathematik. Das Spiel zeigt Ihnen gültige Schläge, wenn Sie einen Stein auswählen.",
"example1Title": "Beispiel: Vielfaches/Teiler-Schlag",
"example1Desc": "Weiße 64 (Quadrat) kann schwarze 16 (Dreieck) schlagen, weil 64 ein Vielfaches von 16 ist",
"example2Title": "Beispiel: Summen-Schlag mit Helfer",
"example2Desc": "Weiße 9 + Helfer 16 = schwarze 25 (9 + 16 = 25)",
"example3Title": "Beispiel: Differenz-Schlag mit Helfer",
"example3Desc": "Weiße 30 - Helfer 10 = schwarze 20 (30 - 10 = 20)",
"example4Title": "Beispiel: Produkt-Schlag mit Helfer",
"example4Desc": "Weiße 4 × Helfer 5 = schwarze 20 (4 × 5 = 20)",
"example5Title": "Beispiel: Verhältnis-Schlag mit Helfer",
"example5Desc": "Weiße 20 ÷ Helfer 4 = schwarze 5 (20 ÷ 4 = 5)",
"pyramidTitle": "Spezial: Pyramiden-Schläge",
"pyramidIntro": "Pyramiden haben 4 Seitenwerte, was sie unglaublich vielseitig macht. Sie wählen welche Seite Sie beim Schlagversuch verwenden, sodass eine Pyramide mehrere gegnerische Steine bedrohen kann.",
"pyramidEx1Title": "Beispiel: Pyramiden-Seitenwahl (Gleichheit)",
"pyramidEx1Desc": "Weiße Pyramide (Seiten: 64, 49, 36, 25) kann schwarze 49 schlagen, indem Seite 49 für Gleichheit gewählt wird (49 = 49)",
"pyramidEx1Note": "<strong>Seitenwahl:</strong> Weiß wählt Seite 49 → 49 = 49 (Gleichheit) → Schlag erfolgreich! Die Pyramide könnte auch Steine mit Werten 64, 36 oder 25 schlagen mit den entsprechenden Seiten.",
"pyramidEx2Title": "Beispiel: Pyramide mit Helfer (Summe)",
"pyramidEx2Desc": "Weiße Pyramide verwendet Seite 25 + Helfer 20 = schwarze 45 (25 + 20 = 45)",
"pyramidEx2Note": "<strong>Seitenwahl:</strong> Weiß wählt Seite 25 und deklariert Helfer bei D4 (Wert 20) → 25 + 20 = 45 (Summe) → Schlag erfolgreich! Durch Wahl verschiedener Seiten könnte dieselbe Pyramide andere Werte mit verschiedenen Helfern schlagen.",
"pyramidEx3Title": "Beispiel: Pyramiden-Flexibilität (Vielfaches/Teiler)",
"pyramidEx3Desc": "Schwarze Pyramide (Seiten: 36, 25, 16, 4) kann weiße 9 mit Seite 36 schlagen (Vielfaches: 36 ÷ 9 = 4)",
"pyramidEx3Note": "<strong>Seitenwahl:</strong> Schwarz wählt Seite 36 → 36 ÷ 9 = 4 (Vielfaches) → Schlag erfolgreich! Hinweis: Schwarz könnte auch Seite 4 mit Helfer 5 für Summe verwenden (4 + 5 = 9), was mehrere gültige Ansätze zeigt."
},
"harmony": {
"title": "Harmonien: Der coolste Weg zu gewinnen",
@@ -157,6 +240,88 @@
"tip3": "Große Steine sind stark - schwerer zu schlagen",
"tip4": "Achten Sie auf ihre Harmonien - lassen Sie nicht 3 Steine tief",
"tip5": "Pyramiden sind flexibel - wählen Sie den richtigen Wert für jeden Schlag"
},
"strategy": {
"title": "Strategie & Taktik",
"intro": "Rithmomachia belohnt sowohl mathematische Einsicht als auch strategische Planung. Erfolg erfordert das Ausbalancieren von Gebietskontrolle, Steineerhaltung und mathematischen Möglichkeiten.",
"openingPrinciples": {
"title": "Eröffnungsprinzipien",
"controlCenter": {
"title": "Kontrollieren Sie das Zentrum",
"desc": "Bewegen Sie Steine zur leeren 8-Spalten-Mitte (Spalten EL). Dies bietet Mobilität und schafft Schlagmöglichkeiten aus mehreren Winkeln."
},
"developCircles": {
"title": "Entwickeln Sie zuerst kleine Kreise",
"desc": "Ihre kleinen Kreise (29) in Spalten D und M sind mobil und vielseitig. Bewegen Sie sie früh zur Mitte, um Präsenz zu etablieren und Helfer-Netzwerke zu schaffen."
},
"protectPyramid": {
"title": "Schützen Sie Ihre Pyramide",
"desc": "Die Pyramide ist Ihr flexibelster Stein (4 Seitenwerte), bewegt sich aber nur 1 Feld. Halten Sie sie hinter vorrückenden Linien bis zum Mittelspiel, wenn mathematische Bedrohungen klar sind."
},
"knowNumbers": {
"title": "Kennen Sie Ihre Zahlen",
"desc": "Merken Sie sich wichtige mathematische Beziehungen in Ihrer Armee. Identifizieren Sie welche Steine Faktoren, Vielfache und Summen bilden—dies beschleunigt taktische Berechnungen."
}
},
"midGame": {
"title": "Mittelspiel-Taktiken",
"helperNetworks": {
"title": "Bauen Sie Helfer-Netzwerke",
"desc": "Positionieren Sie Steine so, dass mehrere Helfer Schläge unterstützen können. Wenn Sie zum Beispiel Steine mit Werten 5 und 10 haben, können Sie 15 (Summe), 5 (Differenz) oder 50 (Produkt) schlagen, wenn Ihr Beweger richtig positioniert ist."
},
"createThreats": {
"title": "Schaffen Sie Schlagdrohungen",
"desc": "Zwingen Sie Ihren Gegner mehrere Steine gleichzeitig zu verteidigen. Auch wenn Sie nicht alle Schläge ausführen können, schränkt die Drohung deren Optionen ein und kontrolliert das Tempo."
},
"thinkDefensively": {
"title": "Denken Sie defensiv",
"desc": "Überprüfen Sie nach jedem Zug welche Ihrer Steine geschlagen werden können. Hochwertige Steine wie Quadrate (169, 225, 289, 361) sind anfällig für viele Beziehungen—positionieren Sie sie hinter Verteidigern oder auf geschützten Feldern."
},
"exchangeWhenAhead": {
"title": "Tauschen Sie wenn Sie vorne liegen",
"desc": "Wenn Sie mehr Steine oder höhere Werte geschlagen haben, vereinfachen Sie die Position durch Steintausch. Dies reduziert die Angriffsoptionen Ihres Gegners und bringt Sie näher an den Erschöpfungssieg."
}
},
"victoryPaths": {
"title": "Wege zum Sieg",
"harmony": {
"title": "Harmoniesieg (Am elegantesten)",
"desc": "Platzieren Sie 3 Steine im gegnerischen Gebiet, die eine arithmetische, geometrische oder harmonische Progression bilden. Häufige Triaden:",
"arithmetic": "<strong>Arithmetisch:</strong> (6, 9, 12), (5, 7, 9), (8, 12, 16)",
"geometric": "<strong>Geometrisch:</strong> (4, 8, 16), (3, 9, 27), (2, 8, 32)",
"harmonic": "<strong>Harmonisch:</strong> (6, 8, 12), (10, 12, 15), (6, 10, 15)"
},
"exhaustion": {
"title": "Erschöpfungssieg (Zermürbung)",
"desc": "Schlagen Sie systematisch Steine bis Ihr Gegner keine legalen Züge hat. Fokus auf: mobile Steine eliminieren (Quadrate und Dreiecke), Diagonalen und Reihen blockieren, und die Pyramide in eine Ecke zwingen."
},
"points": {
"title": "Punktesieg (Optionale Regel)",
"desc": "Falls aktiviert, schlagen Sie Steine im Wert von 30 Punkten (C=1, T=2, S=3, P=5). Jagen Sie hochwertige Ziele und bewahren Sie Ihre eigenen schweren Steine. Tauschen Sie vorteilhaft."
}
},
"commonMistakes": {
"title": "⚠️ Häufige Fehler zu vermeiden",
"movingWithoutCalc": "<strong>Bewegen ohne Berechnung:</strong> Überprüfen Sie immer ob Ihr Zielfeld von gegnerischen Steinen geschlagen werden kann",
"ignoringGeometry": "<strong>Helfer-Geometrie ignorieren:</strong> Helfer können überall sein, aber Sie brauchen noch einen legalen Zugpfad zum Schlagen",
"neglectingHarmony": "<strong>Harmoniedrohungen vernachlässigen:</strong> Wenn Ihr Gegner 2 Steine in Ihrem Gebiet hat, die Teil einer Progression bilden, blockieren Sie deren dritten",
"exposingPyramid": "<strong>Die Pyramide exponieren:</strong> Sie bewegt sich nur 1 Feld und hat begrenzte Fluchtoptionen—schützen Sie sie früh"
},
"advanced": {
"title": "Fortgeschrittene Konzepte",
"sacrifices": {
"title": "Positionsopfer",
"desc": "Manchmal öffnet das Opfern eines Steins Linien für Ihre anderen Steine oder zwingt Ihren Gegner in eine schlechtere Position. Berechnen Sie das resultierende Ungleichgewicht vor dem Opfern."
},
"pyramidFaces": {
"title": "Pyramiden-Seitenwahl",
"desc": "Ihre Pyramide hat 4 Seitenwerte. Beim Schlagen wählen Sie die Seite, die zukünftige Flexibilität maximiert. Bei Harmoniedeklarationen wählen Sie die Seite, die den wertvollsten Progressionstyp vervollständigt."
},
"tempo": {
"title": "Tempo und Initiative",
"desc": "Jeder Zug der eine defensive Antwort erzwingt gewinnt Tempo. Reihen Sie erzwungene Züge (Schläge, Drohungen) aneinander, um das Tempo zu diktieren und Ihren Gegner daran zu hindern, deren Plan auszuführen."
}
}
}
}
}

View File

@@ -20,7 +20,8 @@
"de": "Deutsch",
"ja": "日本語",
"hi": "हिन्दी",
"es": "Español"
"es": "Español",
"la": "Latina"
},
"overview": {
"goalTitle": "Goal of the Game",

View File

@@ -1,7 +1,8 @@
{
"guide": {
"title": "Guía de Juego",
"subtitle": "Rithmomachia El Juego del Filósofo",
"subtitle": "Rithmomachia El Juego de los Filósofos",
"bustOut": "Abrir en ventana nueva",
"close": "Cerrar",
"maximize": "Maximizar",
"restore": "Restaurar",
@@ -16,9 +17,11 @@
"languageSelector": {
"label": "Idioma",
"en": "English",
"de": "Deutsch",
"ja": "日本語",
"hi": "हिन्दी",
"es": "Español"
"es": "Español",
"la": "Latina"
},
"overview": {
"goalTitle": "Objetivo del Juego",
@@ -36,7 +39,16 @@
"Avanza hacia territorio enemigo (filas 1-4 para Negro, filas 5-8 para Blanco)",
"Busca oportunidades de armonía con tus piezas avanzadas",
"¡Gana formando una progresión que sobreviva un turno!"
]
],
"goal": "Organiza 3 de tus piezas en territorio enemigo para formar una progresión matemática, sobrevive un turno del oponente y gana.",
"boardSize": "8 filas × 16 columnas (columnas A-P, filas 1-8)",
"territory": "Tu mitad: Negro controla filas 5-8, Blanco controla filas 1-4",
"enemyTerritory": "Territorio enemigo: Donde necesitas construir tu progresión ganadora",
"step1": "Comienza moviendo piezas hacia el centro",
"step2": "Busca oportunidades de captura usando relaciones matemáticas",
"step3": "Avanza hacia territorio enemigo (filas 1-4 para Negro, filas 5-8 para Blanco)",
"step4": "Busca oportunidades de armonía con tus piezas avanzadas",
"step5": "¡Gana formando una progresión que sobreviva un turno!"
},
"pieces": {
"title": "Tus Piezas (24 en total)",
@@ -84,7 +96,19 @@
"option1": "Mover a I5: Elegir cara <strong>64</strong> → captura 16 por múltiplo (64÷16=4)",
"option2": "Mover a H6: Elegir cara <strong>49</strong> → captura 49 por igualdad (49=49)",
"option3": "Mover a G5: Elegir cara <strong>25</strong> → captura 25 por igualdad (25=25)"
}
},
"description": "Cada lado tiene 25 piezas con diferentes patrones de movimiento. La forma te dice cómo se mueve:",
"count": "Cantidad",
"circle": "Círculo",
"circleMove": "Se mueve en diagonal",
"triangle": "Triángulo",
"triangleMove": "Se mueve en líneas rectas",
"square": "Cuadrado",
"squareMove": "Se mueve en cualquier dirección",
"pyramid": "Pirámide",
"pyramidMove": "Un paso en cualquier dirección (como un rey)",
"exampleValues": "Valores de ejemplo",
"example": "Ejemplo:"
},
"capture": {
"title": "Cómo Capturar",
@@ -133,85 +157,83 @@
"pyramidEx2Note": "<strong>Selección de cara:</strong> Blanco elige cara 25 y declara ayudante en D4 (valor 20) → 25 + 20 = 45 (suma) → ¡Captura exitosa! Al seleccionar diferentes caras, la misma Pirámide podría capturar otros valores usando varios ayudantes.",
"pyramidEx3Title": "Ejemplo: Flexibilidad de Pirámide (Múltiplo/Divisor)",
"pyramidEx3Desc": "La Pirámide de Negro (caras: 36, 25, 16, 4) puede capturar el 9 de Blanco usando cara 36 (múltiplo: 36 ÷ 9 = 4)",
"pyramidEx3Note": "<strong>Selección de cara:</strong> Negro elige cara 36 → 36 ÷ 9 = 4 (múltiplo) → ¡Captura exitosa! Nota: Negro también podría usar cara 4 con un ayudante 5 para suma (4 + 5 = 9), mostrando múltiples enfoques válidos."
"pyramidEx3Note": "<strong>Selección de cara:</strong> Negro elige cara 36 → 36 ÷ 9 = 4 (múltiplo) → ¡Captura exitosa! Nota: Negro también podría usar cara 4 con un ayudante 5 para suma (4 + 5 = 9), mostrando múltiples enfoques válidos.",
"description": "Solo puedes capturar una pieza enemiga si el valor de tu pieza tiene una relación matemática con la suya:",
"equality": "Igual",
"equalityExample": "Tu 25 captura su 25",
"equalityCaption": "El Círculo Blanco (25) puede capturar el Círculo Negro (25) por igualdad",
"multiple": "Múltiplo / Divisor",
"multipleExample": "Tu 64 captura su 16 (64 ÷ 16 = 4)",
"multipleCaption": "El Cuadrado Blanco (64) puede capturar el Triángulo Negro (16) porque 64 ÷ 16 = 4",
"sum": "Suma",
"sumExample": "Tu 9 + ayudante 16 = enemigo 25",
"sumCaption": "El Círculo Blanco (9) puede capturar el Círculo Negro (25) usando el Triángulo ayudante (16): 9 + 16 = 25",
"difference": "Diferencia",
"differenceExample": "Tu 30 - ayudante 10 = enemigo 20",
"differenceCaption": "El Triángulo Blanco (30) puede capturar el Triángulo Negro (20) usando el Círculo ayudante (10): 30 - 10 = 20",
"product": "Producto",
"productExample": "Tu 5 × ayudante 5 = enemigo 25",
"productCaption": "El Círculo Blanco (5) puede capturar el Círculo Negro (25) usando el Círculo ayudante (5): 5 × 5 = 25",
"ratio": "Ratio",
"ratioExample": "Tu 20 ÷ ayudante 4 = enemigo 5",
"ratioCaption": "El Triángulo Blanco (20) puede capturar el Círculo Negro (5) usando el Círculo ayudante (4): 20 ÷ 4 = 5",
"helpersDescription": "Los ayudantes son tus otras piezas en el tablero. No se mueven - solo agregan su número a las matemáticas. El juego te muestra qué capturas funcionan cuando haces clic en una pieza."
},
"harmony": {
"title": "Armonías: La Victoria Elegante",
"intro1": "Una <strong>Armonía</strong> (también llamada \"Victoria Propia\") es la forma más sofisticada de ganar. Lleva <strong>3 de tus piezas al territorio enemigo</strong> dispuestas en línea recta donde sus valores forman un patrón matemático.",
"intro2": "Piensa en ello como obtener tres números en una secuencia, pero las secuencias siguen reglas matemáticas especiales de la filosofía antigua y la teoría musical.",
"typesTitle": "Los Tres Tipos de Armonía",
"arithmetic": {
"title": "1. Progresión Aritmética (La Más Fácil de Entender)",
"desc": "El número del medio está exactamente a medio camino entre los otros dos. En otras palabras, las <strong>diferencias son iguales</strong>.",
"formula": "Cómo verificar: Medio × 2 = Primero + Último",
"ex1": "<strong>Ejemplo 1:</strong> 6, 9, 12",
"ex1Check": "Diferencias: 96=3, 129=3 (¡iguales!) • Verificar: 9×2 = 18 = 6+12 ✓",
"ex2": "<strong>Ejemplo 2:</strong> 5, 7, 9",
"ex2Check": "Diferencias: 75=2, 97=2 • Verificar: 7×2 = 14 = 5+9 ✓",
"ex3": "<strong>Ejemplo 3:</strong> 8, 12, 16",
"ex3Check": "Diferencias: 128=4, 1612=4 • Verificar: 12×2 = 24 = 8+16 ✓",
"tip": "<strong>Consejo de estrategia:</strong> Tus círculos pequeños (2-9) y muchos triángulos forman naturalmente progresiones aritméticas. ¡Busca tres piezas donde los espacios sean iguales!"
},
"geometric": {
"title": "2. Progresión Geométrica (Potencias y Múltiplos)",
"desc": "Cada número se multiplica por la misma cantidad para obtener el siguiente. Los <strong>ratios son iguales</strong>.",
"formula": "Cómo verificar: Medio² = Primero × Último",
"ex1": "<strong>Ejemplo 1:</strong> 4, 8, 16",
"ex1Check": "Ratios: 8÷4=2, 16÷8=2 (¡iguales!) • Verificar: 8² = 64 = 4×16 ✓",
"ex2": "<strong>Ejemplo 2:</strong> 3, 9, 27",
"ex2Check": "Ratios: 9÷3=3, 27÷9=3 • Verificar: 9² = 81 = 3×27 ✓",
"ex3": "<strong>Ejemplo 3:</strong> 2, 8, 32",
"ex3Check": "Ratios: 8÷2=4, 32÷8=4 • Verificar: 8² = 64 = 2×32 ✓",
"tip": "<strong>Consejo de estrategia:</strong> ¡Los valores cuadrados (4, 9, 16, 25, 36, 49, 64, 81) funcionan genial aquí! Por ejemplo, 4-16-64 (cuadrados de 2, 4, 8)."
},
"harmonic": {
"title": "3. Progresión Armónica (Basada en Música, La Más Complicada)",
"desc": "Nombrada por las armonías musicales. El patrón es: el ratio de los números exteriores iguala el ratio de sus diferencias desde el medio.",
"formula": "Cómo verificar: 2 × Primero × Último = Medio × (Primero + Último)",
"ex1": "<strong>Ejemplo 1:</strong> 6, 8, 12",
"ex1Check": "Verificar: 2×6×12 = 144 = 8×(6+12) = 8×18 ✓",
"ex2": "<strong>Ejemplo 2:</strong> 10, 12, 15",
"ex2Check": "Verificar: 2×10×15 = 300 = 12×(10+15) = 12×25 ✓",
"ex3": "<strong>Ejemplo 3:</strong> 6, 10, 15",
"ex3Check": "Verificar: 2×6×15 = 180 = 10×(6+15) = 10×18 ✓",
"tip": "<strong>Consejo de estrategia:</strong> Las progresiones armónicas son más raras. Memoriza tríadas comunes: (3,4,6), (4,6,12), (6,8,12), (6,10,15), (8,12,24)."
},
"intro": "Una Armonía (también llamada \"Victoria Propia\") es la forma más sofisticada de ganar. Lleva 3 de tus piezas al territorio enemigo dispuestas en línea recta donde sus valores forman un patrón matemático.",
"introDetail": "Piensa en ello como obtener tres números en una secuencia, pero las secuencias siguen reglas matemáticas especiales de la filosofía antigua y la teoría musical.",
"arithmetic": "1. Progresión Aritmética (La Más Fácil de Entender)",
"arithmeticDesc": "El número del medio está exactamente a medio camino entre los otros dos. En otras palabras, las diferencias son iguales.",
"arithmeticFormula": "Medio × 2 = Primero + Último",
"arithmeticTip": "Tus círculos pequeños (2-9) y muchos triángulos forman naturalmente progresiones aritméticas. ¡Busca tres piezas donde los espacios sean iguales!",
"arithmeticCaption": "Las piezas blancas 6, 9, 12 en fila en territorio enemigo forman una progresión aritmética",
"geometric": "2. Progresión Geométrica (Potencias y Múltiplos)",
"geometricDesc": "Cada número se multiplica por la misma cantidad para obtener el siguiente. Los ratios son iguales.",
"geometricFormula": "Medio² = Primero × Último",
"geometricTip": "¡Los valores cuadrados (4, 9, 16, 25, 36, 49, 64, 81) funcionan genial aquí! Por ejemplo, 4-16-64 (cuadrados de 2, 4, 8).",
"geometricCaption": "Las piezas blancas 4, 8, 16 en fila en territorio enemigo forman una progresión geométrica",
"harmonic": "3. Progresión Armónica (Basada en Música, La Más Complicada)",
"harmonicDesc": "Nombrada por las armonías musicales. El patrón es: el ratio de los números exteriores iguala el ratio de sus diferencias desde el medio.",
"harmonicFormula": "2 × Primero × Último = Medio × (Primero + Último)",
"harmonicTip": "Las progresiones armónicas son más raras. Memoriza tríadas comunes: (3,4,6), (4,6,12), (6,8,12), (6,10,15), (8,12,24).",
"harmonicCaption": "Las piezas blancas 6, 8, 12 en fila en territorio enemigo forman una progresión armónica",
"howToCheck": "Cómo verificar:",
"example": "Ejemplo:",
"check": "Verificar:",
"differences": "Diferencias:",
"equal": "(¡iguales!)",
"ratios": "Ratios:",
"strategyTip": "Consejo de estrategia:",
"rulesTitle": "⚠️ Reglas de Armonía que Debes Seguir",
"rules": [
"<strong>Solo Territorio Enemigo:</strong> Las 3 piezas deben estar en la mitad de tu oponente (Blanco necesita filas 5-8, Negro necesita filas 1-4)",
"<strong>Línea Recta:</strong> Las 3 piezas deben formar una fila, columna o diagonal, sin formaciones dispersas",
"<strong>Colocación Adyacente:</strong> En esta implementación, las 3 piezas deben estar una al lado de la otra (sin espacios)",
"<strong>Regla de Supervivencia:</strong> Cuando declaras una armonía, tu oponente tiene UN turno para romperla capturando o moviendo una pieza",
"<strong>Victoria:</strong> Si tu armonía sobrevive hasta que comience tu siguiente turno, ¡ganas!"
],
"enemyTerritoryTitle": "Solo Territorio Enemigo:",
"enemyTerritory": "Las 3 piezas deben estar en la mitad de tu oponente (Blanco necesita filas 5-8, Negro necesita filas 1-4)",
"straightLineTitle": "Línea Recta:",
"straightLine": "Las 3 piezas deben formar una fila, columna o diagonal, sin formaciones dispersas",
"adjacentTitle": "Colocación Adyacente:",
"adjacent": "En esta implementación, las 3 piezas deben estar una al lado de la otra (sin espacios)",
"survivalTitle": "Regla de Supervivencia:",
"survival": "Cuando declaras una armonía, tu oponente tiene UN turno para romperla capturando o moviendo una pieza",
"victoryTitle": "Victoria:",
"victoryRule": "Si tu armonía sobrevive hasta que comience tu siguiente turno, ¡ganas!",
"strategyTitle": "Estrategia: Cómo Construir Armonías",
"strategy1Title": "Comienza con 2, Añade la Tercera",
"strategy1Desc": "Primero lleva dos piezas al territorio enemigo. Calcula qué tercera pieza completaría una progresión, luego avanza esa pieza. ¡Tu oponente puede no notar la amenaza hasta que sea demasiado tarde!",
"strategy2Title": "Usa Valores Comunes",
"strategy2Desc": "Piezas como 6, 8, 9, 12, 16 aparecen en múltiples progresiones. Si tienes estas en territorio enemigo, calcula todas las posibles terceras piezas que completarían un patrón.",
"strategy3Title": "Protege la Línea",
"strategy3Desc": "Mientras construyes tu armonía, posiciona otras piezas para defender tus piezas avanzadas. ¡Una captura rompe la progresión!",
"strategy4Title": "Bloquea las Armonías del Oponente",
"strategy4Desc": "Si tu oponente tiene 2 piezas en tu territorio formando parte de una progresión, identifica qué tercera pieza la completaría. Bloquea esa casilla o captura una de las dos piezas inmediatamente.",
"strategy5Title": "Calcula Antes de Declarar",
"strategy5Desc": "Antes de declarar armonía, examina si tu oponente puede capturar cualquiera de las 3 piezas en su turno. Si puede, protege esas piezas primero o espera un momento más seguro.",
"quickRefTitle": "💡 Referencia Rápida: Armonías Comunes en Tu Ejército",
"exampleTitle": "Ejemplo: Victoria por Progresión Aritmética",
"exampleDesc": "Blanco ha formado 6, 9, 12 en una fila en el territorio de Negro (filas 5-8). Dado que 9 = (6+12)/2, esta es una progresión aritmética. Si sobrevive al siguiente turno de Negro, ¡Blanco gana!",
"exampleNote": "Las piezas resaltadas forman la progresión ganadora en territorio enemigo"
"startWith2Title": "Comienza con 2, Agrega la Tercera",
"startWith2": "Lleva primero dos piezas al territorio enemigo. Calcula qué tercera pieza completaría la progresión, luego avanza esa pieza. ¡Puede que tu oponente no vea la amenaza hasta que sea demasiado tarde!",
"useCommonTitle": "Usa Valores Comunes",
"useCommon": "Piezas como 6, 8, 9, 12, 16 aparecen en múltiples progresiones. Si tienes estas en territorio enemigo, calcula todas las posibles terceras piezas que completarían un patrón.",
"protectTitle": "Protege la Línea",
"protect": "Mientras construyes tu armonía, posiciona otras piezas para defender tus piezas avanzadas. ¡Una captura rompe la progresión!",
"blockTitle": "Bloquea las Armonías del Oponente",
"block": "Si tu oponente tiene 2 piezas en tu territorio formando parte de una progresión, identifica qué tercera pieza la completaría. Bloquea ese cuadrado o captura una de las dos piezas inmediatamente.",
"calculateTitle": "Calcula Antes de Declarar",
"calculate": "Antes de declarar armonía, examina si tu oponente puede capturar cualquiera de las 3 piezas en su turno. Si puede, protege esas piezas primero o espera un momento más seguro.",
"quickRefTitle": "💡 Referencia Rápida: Armonías Comunes en Tu Ejército"
},
"victory": {
"title": "Cómo Ganar",
"harmony": {
"title": "Victoria #1: Armonía (Progresión)",
"desc": "Forma una progresión matemática con 3 piezas en territorio enemigo. Si sobrevive al siguiente turno de tu oponente, ¡ganas!",
"note": "Esta es la condición de victoria principal en Rithmomachia"
},
"exhaustion": {
"title": "Victoria #2: Agotamiento",
"desc": "Si tu oponente no tiene movimientos legales al comienzo de su turno, pierde."
},
"exampleTitle": "Ejemplo Visual: Ganar por Armonía",
"harmony": "Victoria #1: Armonía (Progresión)",
"exhaustion": "Victoria #2: Agotamiento",
"exampleTitle": "Ejemplo: ¡Blanco Gana!",
"exampleDesc": "Las piezas de Blanco en E6, F6, G6 forman 6, 9, 12 - una progresión aritmética en territorio de Negro. Si Negro no puede romper esto en su siguiente turno, ¡Blanco gana!",
"exampleNote": "✓ Las 3 piezas resaltadas están en territorio enemigo (filas 5-8 para Blanco)\n✓ Forman una línea recta (fila horizontal 6)\n✓ Satisfacen la progresión aritmética: 9 = (6+12)/2",
"tipsTitle": "Consejos Rápidos de Estrategia",
@@ -221,7 +243,17 @@
"<strong>Las piezas grandes son poderosas</strong> — más difíciles de capturar debido a su tamaño",
"<strong>Vigila las amenazas de armonía</strong> — no dejes que el oponente coloque 3 piezas en lo profundo de tu territorio",
"<strong>Las pirámides son flexibles</strong> — elige el valor de cara correcto para cada situación"
]
],
"harmonyDesc": "Forma una progresión matemática con 3 piezas en territorio enemigo. Si sobrevive al siguiente turno de tu oponente, ¡ganas!",
"exampleCaption": "Las piezas de Blanco 4, 8, 16 forman una progresión geométrica en territorio enemigo. Negro no puede romperla - ¡Blanco gana!",
"harmonyNote": "Esta es la condición de victoria principal en Rithmomachia",
"exhaustionDesc": "Si tu oponente no tiene movimientos legales al comienzo de su turno, pierde.",
"strategyTitle": "Consejos Rápidos",
"tip1": "Controla el centro - más fácil avanzar",
"tip2": "Las piezas pequeñas son rápidas - los círculos pueden deslizarse rápidamente al lado enemigo",
"tip3": "Las piezas grandes son poderosas - más difíciles de capturar",
"tip4": "Vigila sus armonías - no dejes que 3 piezas se adentren profundamente",
"tip5": "Las pirámides son flexibles - elige el valor correcto para cada captura"
},
"strategy": {
"title": "Estrategia y Tácticas",

View File

@@ -16,10 +16,13 @@
"languageSelector": {
"label": "भाषा",
"en": "English",
"de": "Deutsch",
"ja": "日本語",
"hi": "हिन्दी",
"es": "Español"
"es": "Español",
"la": "Latina"
},
"bustOut": "नई विंडो में खोलें",
"overview": {
"goalTitle": "खेल का लक्ष्य",
"goalDesc": "दुश्मन के क्षेत्र में <strong>अपने 3 मोहरों को व्यवस्थित करें</strong> ताकि <strong>गणितीय प्रगति</strong> बन सके, विरोधी की एक चाल तक जीवित रहें और जीतें।",
@@ -36,7 +39,16 @@
"दुश्मन के क्षेत्र में धकेलें (काले के लिए पंक्तियाँ 1-4, सफेद के लिए 5-8)",
"अपने आगे के मोहरों के साथ सद्भाव के अवसरों की तलाश करें",
"एक चाल तक जीवित रहने वाली प्रगति बनाकर जीतें!"
]
],
"goal": "दुश्मन के क्षेत्र में अपने 3 मोहरों को व्यवस्थित करें ताकि गणितीय प्रगति बने, प्रतिद्वंद्वी की एक चाल तक जीवित रहें और जीतें।",
"boardSize": "8 पंक्तियाँ × 16 स्तंभ (स्तंभ A-P, पंक्तियाँ 1-8)",
"territory": "आपका आधा: काला 5-8 पंक्तियों को नियंत्रित करता है, सफेद 1-4 पंक्तियों को",
"enemyTerritory": "दुश्मन का क्षेत्र: जहाँ आपको अपनी विजयी प्रगति बनानी होगी",
"step1": "मोहरों को केंद्र की ओर ले जाकर शुरू करें",
"step2": "गणितीय संबंधों का उपयोग करके पकड़ने के अवसर खोजें",
"step3": "दुश्मन के क्षेत्र में धकेलें (काले के लिए पंक्तियाँ 1-4, सफेद के लिए 5-8)",
"step4": "अपने आगे के मोहरों के साथ सद्भाव के अवसरों की तलाश करें",
"step5": "एक चाल तक जीवित रहने वाली प्रगति बनाकर जीतें!"
},
"pieces": {
"title": "आपके मोहरे (कुल 24)",
@@ -84,7 +96,19 @@
"option1": "I5 पर जाएं: फलक <strong>64</strong> चुनें → गुणज द्वारा 16 को पकड़ें (64÷16=4)",
"option2": "H6 पर जाएं: फलक <strong>49</strong> चुनें → समानता द्वारा 49 को पकड़ें (49=49)",
"option3": "G5 पर जाएं: फलक <strong>25</strong> चुनें → समानता द्वारा 25 को पकड़ें (25=25)"
}
},
"description": "प्रत्येक पक्ष के पास अलग-अलग आंदोलन पैटर्न वाले 25 मोहरे हैं। आकार बताता है कि यह कैसे चलता है:",
"count": "संख्या",
"circle": "वृत्त",
"circleMove": "विकर्ण रूप से चलता है",
"triangle": "त्रिकोण",
"triangleMove": "सीधी रेखाओं में चलता है",
"square": "वर्ग",
"squareMove": "किसी भी दिशा में चलता है",
"pyramid": "पिरामिड",
"pyramidMove": "किसी भी तरीके से एक कदम (राजा की तरह)",
"exampleValues": "उदाहरण मान",
"example": "उदाहरण:"
},
"capture": {
"title": "कैसे पकड़ें",
@@ -133,85 +157,83 @@
"pyramidEx2Note": "<strong>फलक चयन:</strong> सफेद फलक 25 चुनता है और D4 पर सहायक घोषित करता है (मान 20) → 25 + 20 = 45 (योग) → पकड़ सफल! विभिन्न फलकों का चयन करके, वही पिरामिड विभिन्न सहायकों का उपयोग करके अन्य मानों को पकड़ सकता है।",
"pyramidEx3Title": "उदाहरण: पिरामिड लचीलापन (गुणज/भाजक)",
"pyramidEx3Desc": "काले का पिरामिड (फलक: 36, 25, 16, 4) फलक 36 का उपयोग करके सफेद के 9 को पकड़ सकता है (गुणज: 36 ÷ 9 = 4)",
"pyramidEx3Note": "<strong>फलक चयन:</strong> काला फलक 36 चुनता है → 36 ÷ 9 = 4 (गुणज) → पकड़ सफल! नोट: काला योग के लिए फलक 4 के साथ सहायक 5 का भी उपयोग कर सकता है (4 + 5 = 9), जो कई वैध दृष्टिकोण दिखाता है।"
"pyramidEx3Note": "<strong>फलक चयन:</strong> काला फलक 36 चुनता है → 36 ÷ 9 = 4 (गुणज) → पकड़ सफल! नोट: काला योग के लिए फलक 4 के साथ सहायक 5 का भी उपयोग कर सकता है (4 + 5 = 9), जो कई वैध दृष्टिकोण दिखाता है।",
"description": "आप केवल एक दुश्मन मोहरे को पकड़ सकते हैं यदि आपके मोहरे का मान उनसे गणितीय संबंध रखता है:",
"equality": "समान",
"equalityExample": "आपका 25 उनके 25 को पकड़ता है",
"equalityCaption": "सफेद वृत्त (25) समानता द्वारा काले वृत्त (25) को पकड़ सकता है",
"multiple": "गुणज / भाजक",
"multipleExample": "आपका 64 उनके 16 को पकड़ता है (64 ÷ 16 = 4)",
"multipleCaption": "सफेद वर्ग (64) काले त्रिकोण (16) को पकड़ सकता है क्योंकि 64 ÷ 16 = 4",
"sum": "योग",
"sumExample": "आपका 9 + सहायक 16 = दुश्मन 25",
"sumCaption": "सफेद वृत्त (9) सहायक त्रिकोण (16) का उपयोग करके काले वृत्त (25) को पकड़ सकता है: 9 + 16 = 25",
"difference": "अंतर",
"differenceExample": "आपका 30 - सहायक 10 = दुश्मन 20",
"differenceCaption": "सफेद त्रिकोण (30) सहायक वृत्त (10) का उपयोग करके काले त्रिकोण (20) को पकड़ सकता है: 30 - 10 = 20",
"product": "गुणनफल",
"productExample": "आपका 5 × सहायक 5 = दुश्मन 25",
"productCaption": "सफेद वृत्त (5) सहायक वृत्त (5) का उपयोग करके काले वृत्त (25) को पकड़ सकता है: 5 × 5 = 25",
"ratio": "अनुपात",
"ratioExample": "आपका 20 ÷ सहायक 4 = दुश्मन 5",
"ratioCaption": "सफेद त्रिकोण (20) सहायक वृत्त (4) का उपयोग करके काले वृत्त (5) को पकड़ सकता है: 20 ÷ 4 = 5",
"helpersDescription": "सहायक आपके अन्य मोहरे बोर्ड पर हैं। वे चलते नहीं हैं - वे केवल गणित में अपनी संख्या जोड़ते हैं। जब आप एक मोहरा क्लिक करते हैं तो खेल आपको दिखाता है कि कौन से कैप्चर काम करते हैं।"
},
"harmony": {
"title": "सद्भाव: सुरुचिपूर्ण विजय",
"intro1": "<strong>सद्भाव</strong> (जिसे \"उचित विजय\" भी कहा जाता है) जीतने का सबसे परिष्कृत तरीका है। <strong>अपने 3 मोहरों को दुश्मन के क्षेत्र में</strong> एक सीधी रेखा में व्यवस्थित करें जहाँ उनके मान एक गणितीय पैटर्न बनाते हैं।",
"intro2": "इसे एक अनुक्रम में तीन संख्याएं प्राप्त करने की तरह समझें—लेकिन अनुक्रम प्राचीन दर्शन और संगीत सिद्धांत के विशेष गणितीय नियमों का पालन करते हैं।",
"typesTitle": "सद्भाव के ती प्रकार",
"arithmetic": {
"title": "1. अंकगणितीय प्रगति (समझने में सबसे आसान)",
"desc": "बीच की संख्या अन्य दो के बीच में बिल्कुल आधी होती है। दूसरे शब्दों में, <strong>अंतर समान</strong> होते हैं।",
"formula": "कैसे जाँचें: बीच × 2 = पहला + अंतिम",
"ex1": "<strong>उदाहरण 1:</strong> 6, 9, 12",
"ex1Check": "अंतर: 96=3, 129=3 (समान!) • जाँच: 9×2 = 18 = 6+12 ✓",
"ex2": "<strong>उदाहरण 2:</strong> 5, 7, 9",
"ex2Check": "अंतर: 75=2, 97=2 • जाँच: 7×2 = 14 = 5+9 ✓",
"ex3": "<strong>उदाहरण 3:</strong> 8, 12, 16",
"ex3Check": "अंतर: 128=4, 1612=4 • जाँच: 12×2 = 24 = 8+16 ✓",
"tip": "<strong>रणनीति टिप:</strong> आपके छोटे वृत्त (2-9) और कई त्रिकोण स्वाभाविक रूप से अंकगणितीय प्रगति बनाते हैं। तीन मोहरों की तलाश करें जहाँ अंतराल समान हों!"
},
"geometric": {
"title": "2. ज्यामितीय प्रगति (घात और गुणज)",
"desc": "प्रत्येक संख्या को अगली प्राप्त करने के लिए समान राशि से गुणा किया जाता है। <strong>अनुपात समान</strong> होते हैं।",
"formula": "कैसे जाँचें: बीच² = पहला × अंतिम",
"ex1": "<strong>उदाहरण 1:</strong> 4, 8, 16",
"ex1Check": "अनुपात: 8÷4=2, 16÷8=2 (समान!) • जाँच: 8² = 64 = 4×16 ✓",
"ex2": "<strong>उदाहरण 2:</strong> 3, 9, 27",
"ex2Check": "अनुपात: 9÷3=3, 27÷9=3 • जाँच: 9² = 81 = 3×27 ✓",
"ex3": "<strong>उदाहरण 3:</strong> 2, 8, 32",
"ex3Check": "अनुपात: 8÷2=4, 32÷8=4 • जाँच: 8² = 64 = 2×32 ✓",
"tip": "<strong>रणनीति टिप:</strong> वर्ग मान (4, 9, 16, 25, 36, 49, 64, 81) यहाँ बहुत अच्छे हैं! उदाहरण के लिए, 4-16-64 (2, 4, 8 के वर्ग)।"
},
"harmonic": {
"title": "3. हार्मोनिक प्रगति (संगीत-आधारित, सबसे मुश्किल)",
"desc": "संगीतीय सामंजस्य के नाम पर। पैटर्न है: बाहरी संख्याओं का अनुपात बीच से उनके अंतर के अनुपात के बराबर होता है।",
"formula": "कैसे जाँचें: 2 × पहला × अंतिम = बीच × (पहला + अंतिम)",
"ex1": "<strong>उदाहरण 1:</strong> 6, 8, 12",
"ex1Check": "जाँच: 2×6×12 = 144 = 8×(6+12) = 8×18 ✓",
"ex2": "<strong>उदाहरण 2:</strong> 10, 12, 15",
"ex2Check": "जाँच: 2×10×15 = 300 = 12×(10+15) = 12×25 ✓",
"ex3": "<strong>उदाहरण 3:</strong> 6, 10, 15",
"ex3Check": "जाँच: 2×6×15 = 180 = 10×(6+15) = 10×18 ✓",
"tip": "<strong>रणनीति टिप:</strong> हार्मोनिक प्रगति दुर्लभ हैं। सामान्य त्रिक याद रखें: (3,4,6), (4,6,12), (6,8,12), (6,10,15), (8,12,24)।"
},
"intro": "सद्भाव (जिसे \"उचित विजय\" भी कहा जाता है) जीतने का सबसे परिष्कृत तरीका है। अपने 3 मोहरों को दुश्मन के क्षेत्र में एक सीधी रेखा में व्यवस्थित करें जहाँ उनके मान एक गणितीय पैटर्न बनाते हैं।",
"introDetail": "इसे एक अनुक्रम में तीन संख्याएं प्राप्त करने की तरह समझें—लेकिन अनुक्रम प्राचीन दर्शन और संगीत सिद्धांत के विशेष गणितीय नियमों का पालन करते हैं।",
"arithmetic": "1. अंकगणिती प्रगति (समझने में सबसे आसान)",
"arithmeticDesc": "बीच की संख्या अन्य दो के बीच में बिल्कुल आधी होती है। दूसरे शब्दों में, अंतर समान होते हैं।",
"arithmeticFormula": "बीच × 2 = पहला + अंतिम",
"arithmeticTip": "आपके छोटे वृत्त (2-9) और कई त्रिकोण स्वाभाविक रूप से अंकगणितीय प्रगति बनाते हैं। तीन मोहरों की तलाश करें जहाँ अंतराल समान हों!",
"arithmeticCaption": "सफेद मोहरे 6, 9, 12 दुश्मन के क्षेत्र में एक पंक्ति में अंकगणितीय प्रगति बनाते हैं",
"geometric": "2. ज्यामितीय प्रगति (घात और गुणज)",
"geometricDesc": "प्रत्येक संख्या को अगली प्राप्त करने के लिए समान राशि से गुणा किया जाता है। अनुपात समान होते हैं।",
"geometricFormula": "बीच² = पहला × अंतिम",
"geometricTip": "वर्ग मान (4, 9, 16, 25, 36, 49, 64, 81) यहाँ बहुत अच्छे हैं! उदाहरण के लिए, 4-16-64 (2, 4, 8 के वर्ग)।",
"geometricCaption": "सफेद मोहरे 4, 8, 16 दुश्मन के क्षेत्र में एक पंक्ति में ज्यामितीय प्रगति बनाते हैं",
"harmonic": "3. हार्मोनिक प्रगति (संगीत-आधारित, सबसे मुश्किल)",
"harmonicDesc": "संगीतीय सामंजस्य के नाम पर। पैटर्न है: बाहरी संख्याओं का अनुपात बीच से उनके अंतर के अनुपात के बराबर होता है।",
"harmonicFormula": "2 × पहला × अंतिम = बीच × (पहला + अंतिम)",
"harmonicTip": "हार्मोनिक प्रगति दुर्लभ हैं। सामान्य त्रिक याद रखें: (3,4,6), (4,6,12), (6,8,12), (6,10,15), (8,12,24)।",
"harmonicCaption": "सफेद मोहरे 6, 8, 12 दुश्मन के क्षेत्र में एक पंक्ति में हार्मोनिक प्रगति बनाते हैं",
"howToCheck": "कैसे जाँचें:",
"example": "उदाहरण:",
"check": "जाँच:",
"differences": "अंतर:",
"equal": "(समान!)",
"ratios": "अनुपात:",
"strategyTip": "रणनीति युक्ति:",
"rulesTitle": "⚠️ सद्भाव नियम जिनका आपको पालन करना चाहिए",
"rules": [
"<strong>केवल दुश्मन का क्षेत्र:</strong> सभी 3 मोहरों को आपके प्रतिद्वंद्वी के आधे में होना चाहिए (सफेद को पंक्तियाँ 5-8, काले को पंक्तियाँ 1-4 चाहिए)",
"<strong>सीधी रेखा:</strong> 3 मोहरों को एक पंक्ति, स्तंभ, या विकर्ण बनाना चाहिए—कोई बिखरी हुई संरचना नहीं",
"<strong>आसन्न प्लेसमेंट:</strong> इस कार्यान्वयन में, 3 मोहरों को एक दूसरे के बगल में होना चाहिए (कोई अंतराल नहीं)",
"<strong>जीवित रहने का नियम:</strong> जब आप सद्भाव घोषित करते हैं, तो आपके प्रतिद्वंद्वी को एक मोहरा पकड़कर या स्थानांतरित करके इसे तोड़ने के लिए एक चाल मिलती है",
"<strong>विजय:</strong> यदि आपका सद्भाव आपकी अगली बारी शुरू होने तक जीवित रहता है—आप जीत जाते हैं!"
],
"enemyTerritoryTitle": "केवल दुश्मन का क्षेत्र:",
"enemyTerritory": "सभी 3 मोहरों को प्रतिद्वंद्वी के आधे में होना चाहिए (सफेद को पंक्तियाँ 5-8, काले को पंक्तियाँ 1-4 चाहिए)",
"straightLineTitle": "सीधी रेखा:",
"straightLine": "3 मोहरों को एक पंक्ति, स्तंभ, या विकर्ण बनाना चाहिएकोई बिखरी हुई संरचना नहीं",
"adjacentTitle": "आसन्न प्लेसमेंट:",
"adjacent": "इस कार्यान्वयन में, 3 मोहरों को एक दूसरे के बगल में होना चाहिए (कोई अंतराल नहीं)",
"survivalTitle": "जीवित रहने का नियम:",
"survival": "जब आप सद्भाव घोषित करते हैं, तो आपके प्रतिद्वंद्वी को एक मोहरा पकड़कर या स्थानांतरित करके इसे तोड़ने के लिए एक चाल मिलती है",
"victoryTitle": "विजय:",
"victoryRule": "यदि आपका सद्भाव आपकी अगली बारी शुरू होने तक जीवित रहता है—आप जीत जाते हैं!",
"strategyTitle": "रणनीति: सद्भाव कैसे बनाएं",
"strategy1Title": "2 से शुरू करें, तीसरा जोड़ें",
"strategy1Desc": "पहले दो मोहरे दुश्मन के क्षेत्र में ले जाएं। गणना करें कि कौन सा तीसरा मोहरा प्रगति को पूरा करेगा, फिर उस मोहरे को आगे बढ़ाएं। आपके प्रतिद्वंद्वी को खतरा बहुत देर हो जाने तक दिखाई नहीं दे सकता है!",
"strategy2Title": "सामान्य मानों का उपयोग करें",
"strategy2Desc": "6, 8, 9, 12, 16 जैसे मोहरे कई प्रगतियों में दिखाई देते हैं। यदि आपके पास दुश्मन के क्षेत्र में ये हैं, तो सभी संभावित तीसरे मोहरों की गणना करें जो एक पैटर्न को पूरा करेंगे।",
"strategy3Title": "लाइन की रक्षा करें",
"strategy3Desc": "अपने सद्भाव का निर्माण करते समय, अपने आगे बढ़ने वाले मोहरों की रक्षा के लिए अन्य मोहरों को स्थापित करें। एक पकड़ प्रगति को तोड़ती है!",
"strategy4Title": "प्रतिद्वंद्वी के सद्भाव को ब्लॉक करें",
"strategy4Desc": "यदि आपके प्रतिद्वंद्वी के पास आपके क्षेत्र में 2 मोहरे हैं जो एक प्रगति का हिस्सा बनाते हैं, तो पहचानें कि कौन सा तीसरा मोहरा इसे पूरा करेगा। उस वर्ग को ब्लॉक करें या दो मोहरों में से एक को तुरंत पकड़ें।",
"strategy5Title": "घोषित करने से पहले गणना करें",
"strategy5Desc": "सद्भाव घोषित करने से पहले, जाँचें कि क्या आपका प्रतिद्वंद्वी अपनी बारी पर 3 में से किसी मोहरे को पकड़ सकता है। यदि वे कर सकते हैं, तो या तो पहले उन मोहरों की रक्षा करें या एक सुरक्षित क्षण की प्रतीक्षा करें।",
"quickRefTitle": "💡 त्वरित संदर्भ: आपकी सेना में सामान्य सद्भाव",
"exampleTitle": "उदाहरण: अंकगणितीय प्रगति विजय",
"exampleDesc": "सफेद ने काले के क्षेत्र (पंक्तियाँ 5-8) में एक पंक्ति में 6, 9, 12 बनाया है। चूंकि 9 = (6+12)/2, यह एक अंकगणितीय प्रगति है। यदि यह काले की अगली चाल से बच जाता है, तो सफेद की जीत है!",
"exampleNote": "हाइलाइट किए गए मोहरे दुश्मन के क्षेत्र में विजयी प्रगति बनाते हैं"
"startWith2Title": "2 से शुरू करें, तीसरा जोड़ें",
"startWith2": "पहले दो मोहरे दुश्मन के क्षेत्र में ले जाएं। गणना करें कि कौन सा तीसरा मोहरा प्रगति को पूरा करेगा, फिर उस मोहरे को आगे बढ़ाएं। आपके प्रतिद्वंद्वी को खतरा बहुत देर हो जाने तक दिखाई नहीं दे सकता है!",
"useCommonTitle": "सामान्य मानों का उपयोग करें",
"useCommon": "6, 8, 9, 12, 16 जैसे मोहरे कई प्रगतियों में दिखाई देते हैं। यदि आपके पास दुश्मन के क्षेत्र में ये हैं, तो सभी संभावित तीसरे मोहरों की गणना करें जो एक पैटर्न को पूरा करेंगे।",
"protectTitle": "लाइन की रक्षा करें",
"protect": "अपने सद्भाव का निर्माण करते समय, अपने आगे बढ़ने वाले मोहरों की रक्षा के लिए अन्य मोहरों को स्थापित करें। एक पकड़ प्रगति को तोड़ती है!",
"blockTitle": "प्रतिद्वंद्वी के सद्भाव को ब्लॉक करें",
"block": "यदि आपके प्रतिद्वंद्वी के पास आपके क्षेत्र में 2 मोहरे हैं जो एक प्रगति का हिस्सा बनाते हैं, तो पहचानें कि कौन सा तीसरा मोहरा इसे पूरा करेगा। उस वर्ग को ब्लॉक करें या दो मोहरों में से एक को तुरंत पकड़ें।",
"calculateTitle": "घोषित करने से पहले गणना करें",
"calculate": "सद्भाव घोषित करने से पहले, जाँचें कि क्या आपका प्रतिद्वंद्वी अपनी बारी पर 3 में से किसी मोहरे को पकड़ सकता है। यदि वे कर सकते हैं, तो या तो पहले उन मोहरों की रक्षा करें या एक सुरक्षित क्षण की प्रतीक्षा करें।",
"quickRefTitle": "💡 त्वरित संदर्भ: आपकी सेना में सामान्य सद्भाव"
},
"victory": {
"title": "कैसे जीतें",
"harmony": {
"title": "विजय #1: सद्भाव (प्रगति)",
"desc": "दुश्मन के क्षेत्र में 3 मोहरों के साथ एक गणितीय प्रगति बनाएं। यदि यह आपके प्रतिद्वंद्वी की अगली चाल से बच जाता है, तो आप जीत जाते हैं!",
"note": "यह रिथ्मोमैकिया में प्राथमिक विजय की शर्त है"
},
"exhaustion": {
"title": "विजय #2: थकावट",
"desc": "यदि आपके प्रतिद्वंद्वी के पास अपनी बारी की शुरुआत में कोई कानूनी चाल नहीं है, तो वे हार जाते हैं।"
},
"exampleTitle": "दृश्य उदाहरण: सद्भाव से जीतना",
"harmony": "विजय #1: सद्भाव (प्रगति)",
"exhaustion": "विजय #2: थकावट",
"exampleTitle": "उदाहरण: सफेद की जीत!",
"exampleDesc": "E6, F6, G6 पर सफेद के मोहरे 6, 9, 12 बनाते हैं - काले के क्षेत्र में एक अंकगणितीय प्रगति। यदि काला अपनी अगली चाल पर इसे नहीं तोड़ सकता, तो सफेद की जीत है!",
"exampleNote": "✓ सभी 3 हाइलाइट किए गए मोहरे दुश्मन के क्षेत्र में हैं (सफेद के लिए पंक्तियाँ 5-8)\n✓ वे एक सीधी रेखा बनाते हैं (क्षैतिज पंक्ति 6)\n✓ वे अंकगणितीय प्रगति को संतुष्ट करते हैं: 9 = (6+12)/2",
"tipsTitle": "त्वरित रणनीति टिप्स",
@@ -221,7 +243,17 @@
"<strong>बड़े मोहरे शक्तिशाली हैं</strong> — उनके आकार के कारण पकड़ना कठिन",
"<strong>सद्भाव के खतरों पर नज़र रखें</strong> — प्रतिद्वंद्वी को अपने क्षेत्र में गहराई से 3 मोहरे न रखने दें",
"<strong>पिरामिड लचीले हैं</strong> — प्रत्येक स्थिति के लिए सही फलक मान चुनें"
]
],
"harmonyDesc": "दुश्मन के क्षेत्र में 3 मोहरों के साथ एक गणितीय प्रगति बनाएं। यदि यह आपके प्रतिद्वंद्वी की अगली चाल से बच जाता है, तो आप जीत जाते हैं!",
"exampleCaption": "सफेद के मोहरे 4, 8, 16 दुश्मन के क्षेत्र में ज्यामितीय प्रगति बनाते हैं। काला इसे तोड़ नहीं सकता - सफेद की जीत!",
"harmonyNote": "यह रिथ्मोमैकिया में प्राथमिक विजय की शर्त है",
"exhaustionDesc": "यदि आपके प्रतिद्वंद्वी के पास अपनी बारी की शुरुआत में कोई कानूनी चाल नहीं है, तो वे हार जाते हैं।",
"strategyTitle": "त्वरित टिप्स",
"tip1": "केंद्र को नियंत्रित करें - आगे बढ़ना आसान",
"tip2": "छोटे मोहरे तेज हैं - वृत्त जल्दी से दुश्मन की ओर फिसल सकते हैं",
"tip3": "बड़े मोहरे शक्तिशाली हैं - पकड़ना कठिन",
"tip4": "उनके सद्भावों पर ध्यान दें - 3 मोहरों को गहराई से न जाने दें",
"tip5": "पिरामिड लचीले हैं - प्रत्येक कैप्चर के लिए सही मूल्य चुनें"
},
"strategy": {
"title": "रणनीति और रणनीतियां",

View File

@@ -16,9 +16,11 @@
"languageSelector": {
"label": "言語",
"en": "English",
"de": "Deutsch",
"ja": "日本語",
"hi": "हिन्दी",
"es": "Español"
"es": "Español",
"la": "Latina"
},
"overview": {
"goalTitle": "ゲームの目標",
@@ -36,31 +38,40 @@
"敵陣に進む黒は1-4行、白は5-8行",
"前進した駒でハーモニーの機会を探す",
"1ターン生き残る級数を形成して勝利"
]
],
"goal": "敵陣に3つの駒を配置して数学的級数を形成し、相手のターンを1回生き延びれば勝利です。",
"boardSize": "8行×16列A-P列、1-8行",
"territory": "自陣黒は5-8行、白は1-4行を支配",
"enemyTerritory": "敵陣:勝利の級数を構築する必要がある場所",
"step1": "中央に向かって駒を動かすことから始める",
"step2": "数学的関係を使って捕獲の機会を探す",
"step3": "敵陣に進入する黒は1-4行、白は5-8行",
"step4": "前進した駒でハーモニーの機会を狙う",
"step5": "1ターン生き残る級数を形成して勝利"
},
"pieces": {
"title": "あなたの駒全24個",
"intro": "各駒には<strong>数値</strong>があり、それぞれ異なる動きをします:",
"intro": "各駒には<strong>数値</strong>があり、異なる動きをします:",
"pieceTypes": {
"circle": {
"name": "円",
"movement": "斜め(ビショップのように)",
"count": "数8"
"count": "数8"
},
"triangle": {
"name": "三角",
"movement": "直線(ルークのように)",
"count": "数8"
"count": "数8"
},
"square": {
"name": "四角",
"name": "正方形",
"movement": "全方向(クイーンのように)",
"count": "数7"
"count": "数7"
},
"pyramid": {
"name": "ピラミッド",
"movement": "1マス全方向(キングのように)",
"count": "数1"
"movement": "全方向に1マス(キングのように)",
"count": "数1"
}
},
"pyramidSpecial": {
@@ -84,14 +95,26 @@
"option1": "I5に移動面<strong>64</strong>を選択 → 倍数で16を捕獲64÷16=4",
"option2": "H6に移動面<strong>49</strong>を選択 → 等式で49を捕獲49=49",
"option3": "G5に移動面<strong>25</strong>を選択 → 等式で25を捕獲25=25"
}
},
"description": "各サイドには異なる移動パターンを持つ25個の駒があります。形状がどのように動くかを示します",
"count": "数",
"circle": "円",
"circleMove": "斜めに移動",
"triangle": "三角",
"triangleMove": "直線で移動",
"square": "正方形",
"squareMove": "全方向に移動",
"pyramid": "ピラミッド",
"pyramidMove": "全方向に1マスキングのように",
"exampleValues": "例の値",
"example": "例:"
},
"capture": {
"title": "捕獲方法",
"intro": "敵の駒を捕獲できるのは、<strong>駒の値が数学的に関連している場合のみ</strong>す:",
"intro": "駒の値が<strong>数学的に関連している場合のみ</strong>敵の駒を捕獲できます:",
"simpleTitle": "単純な関係(ヘルパー不要)",
"simpleEqual": {
"name": "等",
"name": "等しい",
"desc": "あなたの25が相手の25を捕獲"
},
"simpleMultiple": {
@@ -100,118 +123,116 @@
},
"advancedTitle": "高度な関係ヘルパー駒が1つ必要",
"advancedSum": {
"name": "",
"desc": "あなたの9 + ヘルパー16 = 敵の25"
"name": "合計",
"desc": "あなたの9+ヘルパー16=敵の25"
},
"advancedDifference": {
"name": "差",
"desc": "あなたの30 - ヘルパー10 = 敵の20"
"desc": "あなたの30-ヘルパー10=敵の20"
},
"advancedProduct": {
"name": "積",
"desc": "あなたの5 × ヘルパー5 = 敵の25"
"desc": "あなたの5×ヘルパー5=敵の25"
},
"helpersTitle": "💡 ヘルパーとは?",
"helpersDesc": "ヘルパーは、まだボード上にある他の駒です移動せず、数学のために値を提供するだけです。駒を選択すると、ゲームが有効な捕獲を表示します。",
"helpersDesc": "ヘルパーはボード上他の駒です移動せず、計算のために値を提供するだけです。駒を選択すると、有効な捕獲がゲームに表示されます。",
"example1Title": "例:倍数/約数捕獲",
"example1Desc": "白の64四角は黒の16三角を捕獲できます。64は16の倍数だからです",
"example2Title": "例:ヘルパー付き捕獲",
"example2Desc": "白の9 + ヘルパー16 = 黒の259 + 16 = 25",
"example1Desc": "白の64正方形は64が16の倍数であるため黒の16三角を捕獲可能",
"example2Title": "例:ヘルパー付き合計捕獲",
"example2Desc": "白の9+ヘルパー16=黒の259+16=25",
"example3Title": "例:ヘルパー付き差捕獲",
"example3Desc": "白の30 - ヘルパー10 = 黒の2030 - 10 = 20",
"example3Desc": "白の30-ヘルパー10=黒の2030-10=20",
"example4Title": "例:ヘルパー付き積捕獲",
"example4Desc": "白の4 × ヘルパー5 = 黒の204 × 5 = 20",
"example4Desc": "白の4×ヘルパー5=黒の204×5=20",
"example5Title": "例:ヘルパー付き比捕獲",
"example5Desc": "白の20 ÷ ヘルパー4 = 黒の520 ÷ 4 = 5",
"example5Desc": "白の20÷ヘルパー4=黒の520÷4=5",
"pyramidTitle": "特別:ピラミッド捕獲",
"pyramidIntro": "ピラミッドは4つの面の値があり、非常に多用途です。捕獲を試みるときにどの面を使用するかを選択でき、1つのピラミッドで複数の敵の駒を脅かすことができます。",
"pyramidEx1Title": "例:ピラミッド面選択(等",
"pyramidEx1Desc": "白のピラミッド64、49、36、25、等式のために面49を選択して黒の49を捕獲できます49 = 49",
"pyramidEx1Note": "<strong>面選択:</strong>白は面49を宣言 → 49 = 49)→ 捕獲成功!ピラミッドは対応する面を使用して値64、36、または25の駒も捕獲できます。",
"pyramidEx2Title": "例:ヘルパー付きピラミッド(",
"pyramidEx2Desc": "白のピラミッドは面25 + ヘルパー20 = 黒の45を使用25 + 20 = 45",
"pyramidEx2Note": "<strong>面選択:</strong>白は面25を選択しD4ヘルパー値20を宣言 → 25 + 20 = 45)→ 捕獲成功!異なる面を選択することで、同じピラミッド様々なヘルパーを使用して他の値を捕獲できます。",
"pyramidIntro": "ピラミッドは4つの面の値を持ち、非常に多です。捕獲を試みるときにどの面を使用するかを選択でき、1つのピラミッドで複数の敵の駒を脅かすことができます。",
"pyramidEx1Title": "例:ピラミッド面選択(等しさ",
"pyramidEx1Desc": "白のピラミッド64、49、36、25等しさのために面49を選択して黒の49を捕獲可能49=49",
"pyramidEx1Note": "<strong>面選択:</strong>白は面49を宣言→49=49しさ→捕獲成功ピラミッドは対応する面を使用して値64、36、または25の駒も捕獲可能。",
"pyramidEx2Title": "例:ヘルパー付きピラミッド(合計",
"pyramidEx2Desc": "白のピラミッドは面25+ヘルパー20=黒の45を使用25+20=45",
"pyramidEx2Note": "<strong>面選択:</strong>白は面25を選択しD4ヘルパーを宣言値20→25+20=45合計)→捕獲成功!異なる面を選択することで、同じピラミッド様々なヘルパーを使用して他の値を捕獲可能。",
"pyramidEx3Title": "例:ピラミッドの柔軟性(倍数/約数)",
"pyramidEx3Desc": "黒のピラミッド36、25、16、4面36を使用して白の9を捕獲できます倍数36 ÷ 9 = 4",
"pyramidEx3Note": "<strong>面選択:</strong>黒は面36を選択 → 36 ÷ 9 = 4倍数 捕獲成功黒は面4とヘルパー5使用して和4 + 5 = 9で捕獲することもでき、複数の有効なアプローチを示しています。"
"pyramidEx3Desc": "黒のピラミッド36、25、16、4は面36を使用して白の9を捕獲可能倍数36÷9=4",
"pyramidEx3Note": "<strong>面選択:</strong>黒は面36を選択→36÷9=4倍数→捕獲成功黒は合計のために面4とヘルパー5使用可能4+5=9、複数の有効なアプローチを示す。",
"description": "駒の値が数学的関係を持つ場合のみ、敵の駒を捕獲できます:",
"equality": "等しい",
"equalityExample": "あなたの25が相手の25を捕獲",
"equalityCaption": "白の円25は等しさにより黒の円25を捕獲可能",
"multiple": "倍数/約数",
"multipleExample": "あなたの64が相手の16を捕獲64÷16=4",
"multipleCaption": "白の正方形64は64÷16=4であるため黒の三角16を捕獲可能",
"sum": "合計",
"sumExample": "あなたの9+ヘルパー16=敵の25",
"sumCaption": "白の円9はヘルパー三角16を使用して黒の円25を捕獲可能9+16=25",
"difference": "差",
"differenceExample": "あなたの30-ヘルパー10=敵の20",
"differenceCaption": "白の三角30はヘルパー円10を使用して黒の三角20を捕獲可能30-10=20",
"product": "積",
"productExample": "あなたの5×ヘルパー5=敵の25",
"productCaption": "白の円5はヘルパー円5を使用して黒の円25を捕獲可能5×5=25",
"ratio": "比",
"ratioExample": "あなたの20÷ヘルパー4=敵の5",
"ratioCaption": "白の三角20はヘルパー円4を使用して黒の円5を捕獲可能20÷4=5",
"helpersDescription": "ヘルパーはボード上の他の駒です。移動しません - 計算に数字を追加するだけです。駒をクリックすると、どの捕獲が機能するかがゲームに表示されます。"
},
"harmony": {
"title": "ハーモニー:エレガントな勝利",
"intro1": "<strong>ハーモニー</strong>(「正式な勝利」とも呼ばれる)は、勝利する最も洗練された方法です。<strong>3つの駒を敵陣に</strong>配置し、直線上に並べ、その値が数学的パターンを形成します。",
"intro2": "3つの数字を連続で並べるようなものですが、連続は古代哲学と音楽理論の特別な数学的規則に従います。",
"typesTitle": "3つのハーモニータイプ",
"arithmetic": {
"title": "1. 算術級数(最も理解しやすい)",
"desc": "中央の数字は他の2つの正確に中間にあります。言い換えれば、<strong>差が等しい</strong>のです。",
"formula": "確認方法:中央 × 2 = 最初 + 最後",
"ex1": "<strong>例1</strong>6、9、12",
"ex1Check": "差96=3、129=3等しい• 確認9×2 = 18 = 6+12 ✓",
"ex2": "<strong>例2</strong>5、7、9",
"ex2Check": "差75=2、97=2 • 確認7×2 = 14 = 5+9 ✓",
"ex3": "<strong>例3</strong>8、12、16",
"ex3Check": "差128=4、1612=4 • 確認12×2 = 24 = 8+16 ✓",
"tip": "<strong>戦略のヒント:</strong>小さな円2-9と多くの三角は自然に算術級数を形成します。ギャップが等しい3つの駒を探してください"
},
"geometric": {
"title": "2. 幾何級数(累乗と倍数)",
"desc": "各数字は次を得るために同じ量で乗算されます。<strong>比が等しい</strong>のです。",
"formula": "確認方法:中央² = 最初 × 最後",
"ex1": "<strong>例1</strong>4、8、16",
"ex1Check": "比8÷4=2、16÷8=2等しい• 確認8² = 64 = 4×16 ✓",
"ex2": "<strong>例2</strong>3、9、27",
"ex2Check": "比9÷3=3、27÷9=3 • 確認9² = 81 = 3×27 ✓",
"ex3": "<strong>例3</strong>2、8、32",
"ex3Check": "比8÷2=4、32÷8=4 • 確認8² = 64 = 2×32 ✓",
"tip": "<strong>戦略のヒント:</strong>平方値4、9、16、25、36、49、64、81がここで最適です例えば、4-16-642、4、8の平方。"
},
"harmonic": {
"title": "3. 調和級数(音楽ベース、最もトリッキー)",
"desc": "音楽的調和にちなんで名付けられました。パターンは:外側の数字の比が中央からの差の比に等しいことです。",
"formula": "確認方法2 × 最初 × 最後 = 中央 × (最初 + 最後)",
"ex1": "<strong>例1</strong>6、8、12",
"ex1Check": "確認2×6×12 = 144 = 8×(6+12) = 8×18 ✓",
"ex2": "<strong>例2</strong>10、12、15",
"ex2Check": "確認2×10×15 = 300 = 12×(10+15) = 12×25 ✓",
"ex3": "<strong>例3</strong>6、10、15",
"ex3Check": "確認2×6×15 = 180 = 10×(6+15) = 10×18 ✓",
"tip": "<strong>戦略のヒント:</strong>調和級数はより稀です。一般的な三つ組を記憶してください:(3,4,6)、(4,6,12)、(6,8,12)、(6,10,15)、(8,12,24)。"
},
"intro": "ハーモニー(「正式な勝利」とも呼ばれる)は、勝利する最も洗練された方法です。3つの駒を敵陣に配置し、直線上に並べ、その値が数学的パターンを形成します。",
"introDetail": "3つの数字を連続で並べるようなものですが、連続は古代哲学と音楽理論の特別な数学的規則に従います。",
"arithmetic": "1. 算術級数(最も理解しやすい)",
"arithmeticDesc": "中央の数字は他の2つの正確に中間にあります。言い換えれば、差が等しいのです。",
"arithmeticFormula": "中央 × 2 = 最初 + 最後",
"arithmeticTip": "小さな円2-9と多くの三角は自然に算術級数を形成します。ギャップが等しい3つの駒を探してください",
"arithmeticCaption": "白の駒6、9、12が敵陣で一列に並び算術級数を形成しています",
"geometric": "2. 幾何級数(累乗と倍数)",
"geometricDesc": "各数字は次を得るために同じ量で乗算されます。比が等しいのです。",
"geometricFormula": "中央² = 最初 × 最後",
"geometricTip": "平方値4、9、16、25、36、49、64、81がここで最適です例えば、4-16-642、4、8の平方",
"geometricCaption": "白の駒4、8、16が敵陣で一列に並び幾何級数を形成しています",
"harmonic": "3. 調和級数(音楽ベース、最もトリッキー)",
"harmonicDesc": "音楽的調和にちなんで名付けられました。パターンは:外側の数字の比が中央からの差の比に等しいことです。",
"harmonicFormula": "2 × 最初 × 最後 = 中央 × (最初 + 最後)",
"harmonicTip": "調和級数はより稀です。一般的な三つ組を記憶してください:(3,4,6)、(4,6,12)、(6,8,12)、(6,10,15)、(8,12,24)。",
"harmonicCaption": "白の駒6、8、12が敵陣で一列に並び調和級数を形成しています",
"howToCheck": "確認方法:",
"example": "例:",
"check": "確認:",
"differences": "差:",
"equal": "(等しい!)",
"ratios": "比:",
"strategyTip": "戦略のヒント:",
"rulesTitle": "⚠️ 従うべきハーモニールール",
"rules": [
"<strong>敵陣のみ:</strong>3つの駒すべてが相手の半分にある必要があります白は5-8行、黒は1-4行が必要",
"<strong>直線:</strong>3つの駒は行、列、または斜めを形成する必要があります。散在する形成は不可",
"<strong>隣接配置:</strong>この実装では、3つの駒は互いに隣接している必要がありますギャップなし",
"<strong>生存ルール:</strong>ハーモニーを宣言すると、相手は駒を捕獲または移動して破るために1ターン得ます",
"<strong>勝利:</strong>次のターンが始まるまでハーモニーが生き残れば、勝利です!"
],
"enemyTerritoryTitle": "敵陣のみ:",
"enemyTerritory": "3つの駒すべてが相手の半分にある必要があります白は5-8行、黒は1-4行が必要",
"straightLineTitle": "直線:",
"straightLine": "3つの駒は行、列、または斜めを形成する必要があります。散在する形成は不可",
"adjacentTitle": "隣接配置:",
"adjacent": "この実装では、3つの駒は互いに隣接している必要がありますギャップなし",
"survivalTitle": "生存ルール:",
"survival": "ハーモニーを宣言すると、相手は駒を捕獲または移動して破るために1ターン得ます",
"victoryTitle": "勝利:",
"victoryRule": "次のターンが始まるまでハーモニーが生き残れば、勝利です!",
"strategyTitle": "戦略:ハーモニーの構築方法",
"strategy1Title": "2つから始めて、3つ目を追加",
"strategy1Desc": "まず2つの駒を敵陣に入れます。どの3つ目の駒が級数を完成させるかを計算し、その駒を進めます。相手は手遅れになるまで脅威に気づかないかもしれません",
"strategy2Title": "一般的な値を使用",
"strategy2Desc": "6、8、9、12、16のような駒は複数の級数に現れます。これらを敵陣に持っている場合、パターンを完成させるすべての可能な3つ目の駒を計算します。",
"strategy3Title": "ラインを保護",
"strategy3Desc": "ハーモニーを構築している間、他の駒を配置して前進する駒を守ります。1回の捕獲で級数が壊れます",
"strategy4Title": "相手のハーモニーをブロック",
"strategy4Desc": "相手が級数の一部を形成する2つの駒を自陣に持っている場合、それを完成させる3つ目の駒を特定します。そのマスをブロックするか、2つの駒のいずれかをすぐに捕獲します。",
"strategy5Title": "宣言前に計算",
"strategy5Desc": "ハーモニーを宣言する前に、相手がそのターンで3つの駒のいずれかを捕獲できるかどうかを確認します。できる場合は、まずそれらの駒を保護するか、より安全な瞬間を待ちます。",
"quickRefTitle": "💡 クイックリファレンス:軍の一般的なハーモニー",
"exampleTitle": "例:算術級数による勝利",
"exampleDesc": "白は黒の陣地5-8行で6、9、12を一列に形成しました。9 = (6+12)/2なので、これは算術級数です。黒の次のターンを生き延びれば、白の勝利です",
"exampleNote": "ハイライトされた駒が敵陣で勝利の級数を形成しています"
"startWith2Title": "2つから始めて、3つ目を追加",
"startWith2": "まず2つの駒を敵陣に入れます。どの3つ目の駒が級数を完成させるかを計算し、その駒を進めます。相手は手遅れになるまで脅威に気づかないかもしれません",
"useCommonTitle": "一般的な値を使用",
"useCommon": "6、8、9、12、16のような駒は複数の級数に現れます。これらを敵陣に持っている場合、パターンを完成させるすべての可能な3つ目の駒を計算します。",
"protectTitle": "ラインを保護",
"protect": "ハーモニーを構築している間、他の駒を配置して前進する駒を守ります。1回の捕獲で級数が壊れます",
"blockTitle": "相手のハーモニーをブロック",
"block": "相手が級数の一部を形成する2つの駒を自陣に持っている場合、それを完成させる3つ目の駒を特定します。そのマスをブロックするか、2つの駒のいずれかをすぐに捕獲します。",
"calculateTitle": "宣言前に計算",
"calculate": "ハーモニーを宣言する前に、相手がそのターンで3つの駒のいずれかを捕獲できるかどうかを確認します。できる場合は、まずそれらの駒を保護するか、より安全な瞬間を待ちます。",
"quickRefTitle": "💡 クイックリファレンス:軍の一般的なハーモニー"
},
"victory": {
"title": "勝利方法",
"harmony": {
"title": "勝利#1ハーモニー級数",
"desc": "敵陣で3つの駒で数学的級数を形成します。相手の次のターンを生き延びれば、勝利です",
"note": "これはリトモマキアの主要な勝利条件です"
},
"exhaustion": {
"title": "勝利#2消耗",
"desc": "相手のターン開始時に合法的な手がない場合、相手は負けます。"
},
"exampleTitle": "視覚的な例:ハーモニーで勝利",
"harmony": "勝利#1ハーモニー級数",
"exhaustion": "勝利#2消耗",
"exampleTitle": "例:白の勝利",
"exampleDesc": "E6、F6、G6の白の駒は6、9、12を形成 - 黒の陣地での算術級数です。黒が次のターンでこれを破れなければ、白の勝利です!",
"exampleNote": "✓ ハイライトされた3つの駒すべてが敵陣にあります白は5-8行\n✓ 直線を形成しています水平6行\n✓ 算術級数を満たしています9 = (6+12)/2",
"tipsTitle": "クイック戦略のヒント",
@@ -221,79 +242,89 @@
"<strong>大きな駒は強力</strong> — サイズのため捕獲が困難",
"<strong>ハーモニーの脅威を監視</strong> — 相手が自陣の深くに3つの駒を配置しないように",
"<strong>ピラミッドは柔軟</strong> — 各状況に適した面の値を選択"
]
],
"harmonyDesc": "敵陣に3つの駒で数学的級数を形成します。相手の次のターンを生き残れば勝利",
"exampleCaption": "白の駒4、8、16が敵陣で幾何級数を形成。黒はそれを壊せない - 白の勝利!",
"harmonyNote": "これはリトモマキアの主要な勝利条件です",
"exhaustionDesc": "相手がターン開始時に合法的な移動がない場合、負けます。",
"strategyTitle": "クイックヒント",
"tip1": "中央を制御 - 前進しやすい",
"tip2": "小さな駒は速い - 円は敵陣に素早く侵入可能",
"tip3": "大きな駒は強力 - 捕獲が困難",
"tip4": "相手のハーモニーに注意 - 3つの駒を深く進ませない",
"tip5": "ピラミッドは柔軟 - 各捕獲に適した値を選択"
},
"strategy": {
"title": "戦略と戦術",
"intro": "リトモマキアは数学的洞察力と戦略的計画の両方を報酬します。成功には領土支配、駒の保、数学的機会のバランスが必要です。",
"title": "戦略とタクティクス",
"intro": "リトモマキアは数学的洞察力と戦略的計画の両方を報ます。成功には領土支配、駒の保、数学的機会のバランスが必要です。",
"openingPrinciples": {
"title": "序盤の原則",
"title": "オープニングの原則",
"controlCenter": {
"title": "中央を支配する",
"desc": "駒を8列の空の中央E-L列に向けて進めます。これにより機動性が提供され、複数の角度から捕獲機会が生まれます。"
"title": "中央を制御",
"desc": "8列の空の中央E-L列に向かって駒を進めます。これにより機動性が提供され、複数の角度から捕獲機会が生まれます。"
},
"developCircles": {
"title": "小さな円を最初に展開する",
"desc": "DとM列にある小さな円2-9は機動的で多用途です。早期に中央に向けて移動し、存在感を確立し、ヘルパーネットワークを構築します。"
"title": "小さな円を最初に開発",
"desc": "DとM列小さな円2-9は機動性があり多様です。早期に中央に移動させて存在感を確立し、ヘルパーネットワークを作成します。"
},
"protectPyramid": {
"title": "ピラミッドを守る",
"desc": "ピラミッドは最も柔軟な駒4つの面の値ですが、1マスしか動けません。数学的脅威が明確になる中盤まで、進行するラインの後ろに置いておきます。"
"title": "ピラミッドを保護",
"desc": "ピラミッドは最も柔軟な駒4つの面の値ですが、1マスしか移動しません。数学的脅威が明確になる中盤まで、進ラインの後ろに保持します。"
},
"knowNumbers": {
"title": "数字を知る",
"desc": "軍の主要な数学的関係を記憶します。どの駒が因数、倍数、を形成するかを特定しますこれにより戦術的計算が速くなります。"
"desc": "軍の主要な数学的関係を記憶します。どの駒が因数、倍数、合計を形成するかを識別しますこれにより戦術的計算が加速されます。"
}
},
"midGame": {
"title": "中盤の戦術",
"title": "中盤のタクティクス",
"helperNetworks": {
"title": "ヘルパーネットワークを構築する",
"desc": "複数のヘルパーが捕獲をサポートできるように駒を配置します。例えば、5と10の値を持つ駒がある場合、移動駒が正しく配置されていれば15、5、または50を捕獲できます。"
"title": "ヘルパーネットワークを構築",
"desc": "複数のヘルパーが捕獲をサポートできるように駒を配置します。例えば、5と10の駒がある場合、移動駒が正しく配置されていれば15合計、5、または50を捕獲できます。"
},
"createThreats": {
"title": "捕獲の脅威を作",
"desc": "相手に複数の駒を同時に守らせます。すべての捕獲を実行できなくても、脅威相手の選択肢を制約し、テンポをコントロールします。"
"title": "捕獲の脅威を作",
"desc": "相手に複数の駒を同時に守らせます。すべての捕獲を実行できなくても、脅威によって相手の選択肢が制限され、テンポが制御されます。"
},
"thinkDefensively": {
"title": "防御的に考える",
"desc": "各手番後、どの駒が捕獲可能かをチェックします。四角169、225、289、361のような高価値の駒は多くの関係に対して脆弱です防御の後ろまたは保護されたマスに配置します。"
"desc": "各移動後、どの駒が捕獲可能かを確認します。正方形169、225、289、361どの高価値の駒は多くの関係に脆弱です防御の後ろまたは保護されたマスに配置します。"
},
"exchangeWhenAhead": {
"title": "優勢時に交換する",
"desc": "より多くの駒またはより高い値を捕獲している場合、駒を交換して局面を単純化します。これにより相手の攻撃オプションが減、消耗勝利に近づきます。"
"title": "リードしているときに交換",
"desc": "より多くの駒またはより高い値を捕獲し場合、駒を交換して局面を単純化します。これにより相手の攻撃オプションが減少し、消耗勝利に近づきます。"
}
},
"victoryPaths": {
"title": "勝利への道",
"harmony": {
"title": "ハーモニー勝利(最もエレガント)",
"desc": "敵陣に算術級数、幾何級数、または調和級数を形成する3つの駒を配置します。一般的な三つ組",
"desc": "算術、幾何、または調和級数を形成する3つの駒を敵陣に配置します。一般的な三つ組:",
"arithmetic": "<strong>算術:</strong>6、9、125、7、98、12、16",
"geometric": "<strong>幾何:</strong>4、8、163、9、272、8、32",
"harmonic": "<strong>調和:</strong>6、8、1210、12、156、10、15"
},
"exhaustion": {
"title": "消耗勝利(消耗戦)",
"desc": "相手が合法的なを持たなくなるまで系的に駒を捕獲します。焦点:機動的な駒(四角と三角)の排除、斜めと縦横のブロック、ピラミッドを隅に追い込む。"
"desc": "相手が合法的な移動を持たなくなるまで系的に駒を捕獲します。焦点:機動駒(正方形と三角)の排除、対角線と列のブロック、ピラミッドを隅に追い込む。"
},
"points": {
"title": "ポイント勝利(オプションルール)",
"desc": "有効な場合、30ポイントの駒を捕獲しますC=1、T=2、S=3、P=5。高価値の標的を狙い、自分の重い駒を保します。有利に交換します。"
"desc": "有効な場合、30ポイント相当の駒を捕獲しますC=1、T=2、S=3、P=5。高価値ターゲットを狙い、自分の重い駒を保します。有利に交換します。"
}
},
"commonMistakes": {
"title": "⚠️ 避けるべき一般的な間違い",
"movingWithoutCalc": "<strong>計算せずに移動:</strong>常に目的地のマスが敵の駒に捕獲可能かをチェックします",
"ignoringGeometry": "<strong>ヘルパーの幾何学を無視:</strong>ヘルパーはどこにでもいられますが、捕獲するには合法的な移動パスが必要です",
"neglectingHarmony": "<strong>ハーモニー脅威を軽視:</strong>相手が級数の一部を形成する2つの駒を自陣に持っている場合、3つ目をブロックします",
"exposingPyramid": "<strong>ピラミッド露出させる</strong>1マスしか移動できず、逃走オプションが限られています早期に保護します"
"title": "⚠️ 避けるべき一般的なミス",
"movingWithoutCalc": "<strong>計算せずに移動:</strong>目的地のマスが敵の駒に捕獲可能かを常に確認",
"ignoringGeometry": "<strong>ヘルパーの幾何学を無視:</strong>ヘルパーはどこにでもいられますが、捕獲には合法的な移動パスが必要",
"neglectingHarmony": "<strong>ハーモニー脅威の無視:</strong>相手が自陣に級数の一部を形成する2つの駒を持っている場合、3つ目をブロック",
"exposingPyramid": "<strong>ピラミッド露出:</strong>1マスしか移動せず、脱出オプションが限られています早期に保護"
},
"advanced": {
"title": "高度な概念",
"sacrifices": {
"title": "ポジショナルサクリファイス",
"desc": "時には駒を犠牲にすることで他の駒のラインを開いたり、相手をより悪い位置に追い込んだりします。犠牲にする前に結果の不均衡を計算します。"
"title": "位置的犠牲",
"desc": "時には駒を犠牲にすることで他の駒のラインが開かれたり、相手をより悪い位置に追い込んだりします。犠牲にする前に結果の不均衡を計算します。"
},
"pyramidFaces": {
"title": "ピラミッドの面選択",
@@ -301,9 +332,10 @@
},
"tempo": {
"title": "テンポとイニシアチブ",
"desc": "防御的応答を強制する各手番はテンポを獲得します。強制(捕獲、脅威)をつなぎ合わせてペースを決定し、相手が計画を実行するのを防ぎます。"
"desc": "防御的応答を強制する各移動はテンポを獲得します。強制移動(捕獲、脅威)を連続させてペースを支配し、相手が計画を実行するのを防ぎます。"
}
}
}
},
"bustOut": "新しいウィンドウで開く"
}
}

View File

@@ -0,0 +1,327 @@
{
"guide": {
"title": "Libellus Ludi Rithmomachia",
"subtitle": "Rithmomachia Ludus Philosophorum",
"close": "Claudere",
"maximize": "Maximizare",
"restore": "Restituere",
"bustOut": "Aperire in fenestra nova",
"sections": {
"overview": "Initium Celeriter",
"pieces": "Tabulae",
"capture": "Captura",
"strategy": "Ratio",
"harmony": "Harmonia",
"victory": "Victoria"
},
"languageSelector": {
"label": "Lingua",
"en": "English",
"de": "Deutsch",
"ja": "日本語",
"hi": "हिन्दी",
"es": "Español",
"la": "Latina"
},
"overview": {
"goalTitle": "Finis Ludi",
"goal": "Dispone 3 tabulas tuas in territorio hostium ut progressionem mathematicam faciant, unum tempus adversarii superesse, et vincere.",
"goalDesc": "Dispone <strong>3 tabulas tuas in territorio hostium</strong> ut <strong>progressionem mathematicam</strong> faciant, unum tempus adversarii superesse, et vincere.",
"boardTitle": "Tabula",
"boardSize": "8 ordines × 16 columnae (columnae A-P, ordines 1-8)",
"territory": "Tua pars: Niger regit ordines 5-8, Albus regit ordines 1-4",
"enemyTerritory": "Territorium hostium: Ubi progressionem victoriae tuae aedificare debes",
"boardItems": [
"8 ordines × 16 columnae (columnae A-P, ordines 1-8)",
"<strong>Tua pars:</strong> Niger regit ordines 5-8, Albus regit ordines 1-4",
"<strong>Territorium hostium:</strong> Ubi progressionem victoriae tuae aedificare debes"
],
"howToPlayTitle": "Quomodo Ludere",
"step1": "Incipe tabulas ad centrum movendo",
"step2": "Occasiones capturae quaere relationibus mathematicis utendo",
"step3": "In territorium hostium impelle (ordines 1-4 pro Nigro, ordines 5-8 pro Albo)",
"step4": "Occasiones harmoniae cum tabulis tuis anterioribus specta",
"step5": "Vince progressionem faciendo quae unum tempus supersit!",
"howToPlayItems": [
"Incipe tabulas ad centrum movendo",
"Occasiones capturae quaere relationibus mathematicis utendo",
"In territorium hostium impelle (ordines 1-4 pro Nigro, ordines 5-8 pro Albo)",
"Occasiones harmoniae cum tabulis tuis anterioribus specta",
"Vince progressionem faciendo quae unum tempus supersit!"
]
},
"pieces": {
"title": "Tabulae Tuae (25 in summa)",
"description": "Utraque pars 25 tabulas habet cum diversis modis movendi. Forma tibi dicit quomodo movetur:",
"intro": "Quaeque tabula <strong>valorem numericum</strong> habet et diversimode movetur:",
"circle": "Circulus",
"circleMove": "Diagonaliter movetur",
"triangle": "Triangulum",
"triangleMove": "Lineae rectae movetur",
"square": "Quadratum",
"squareMove": "Quaque directione movetur",
"pyramid": "Pyramis",
"pyramidMove": "Unus gradus quaque via",
"count": "Numerus",
"exampleValues": "Valores exempli",
"example": "Exemplum:",
"pieceTypes": {
"circle": {
"name": "Circulus",
"movement": "Diagonaliter (sicut episcopus)",
"count": "Numerus: 8"
},
"triangle": {
"name": "Triangulum",
"movement": "Lineae rectae (sicut turris)",
"count": "Numerus: 8"
},
"square": {
"name": "Quadratum",
"movement": "Quaque directione (sicut regina)",
"count": "Numerus: 7"
},
"pyramid": {
"name": "Pyramis",
"movement": "Unus gradus quaque via (sicut rex)",
"count": "Numerus: 1"
}
},
"pyramidTitle": "⭐ Pyramides: Tabula Specialis",
"pyramidIntro": "Pyramides speciales sunt. 4 valores diversos habeant quos eligere potes cum capias. Hoc eas valde flexibiles facit!",
"pyramidExample": "Pyramis Albi 16 Nigri capere potest faciem 64 utendo (multiplex: 64÷16=4), faciem 36 (multiplex: 36÷9=4, cum 9 Nigri), vel faciem 25 cum aequalitate si 25 Nigri capit.",
"blackPyramid": "Facies Pyramidis Nigrae",
"blackPyramidValues": "36 (6²), 25 (5²), 16 (4²), 4 (2²)",
"whitePyramid": "Facies Pyramidis Albae",
"whitePyramidValues": "64 (8²), 49 (7²), 36 (6²), 25 (5²)",
"pyramidHowItWorks": "Quomodo operatur:",
"pyramidRule1": "Elige quem valorem uti antequam capias",
"pyramidRule2": "Ille valor fit numerus tabulae tuae pro mathematica",
"pyramidRule3": "Valores diversos eligere potes singulis vicibus - nihil fixum est",
"pyramidRule4": "Hoc Pyramides optimas facit ad impetus subitos aliasque tabulas adiuvandas",
"pyramidVisualTitle": "Exemplum Visuale: Multae Optiones Capturae Pyramidis",
"pyramidVisualDesc": "Pyramis Alba (facies: 64, 49, 36, 25) posita est ad tabulas Nigras capiendas. Nota flexibilitatem:",
"pyramidCaptureOptions": "Optiones capturae ex H5:",
"pyramidOption1": "Move ad I5: Elige faciem 64 → capit 16 per multiplum (64÷16=4)",
"pyramidOption2": "Move ad H6: Elige faciem 49 → capit 49 per aequalitatem (49=49)",
"pyramidOption3": "Move ad G5: Elige faciem 25 → capit 25 per aequalitatem (25=25)"
},
"capture": {
"title": "Quomodo Capere",
"description": "Tabulam hostilem capere potes solum si valor tabulae tuae relationem mathematicam ad eam habet:",
"intro": "Tabulam hostilem capere potes <strong>solum si valor tabulae tuae mathematice se refert</strong> ad eam:",
"equality": "Aequale",
"equalityExample": "Tuum 25 capit eorum 25",
"equalityCaption": "Circulus Albus (25) capere potest Circulum Nigrum (25) per aequalitatem",
"multiple": "Multiplex / Divisor",
"multipleExample": "Tuum 64 capit eorum 16 (64 ÷ 16 = 4)",
"multipleCaption": "Quadratum Album (64) capere potest Triangulum Nigrum (16) quia 64 ÷ 16 = 4",
"sum": "Summa",
"sumExample": "Tuum 9 + adiutor 16 = hostis 25",
"sumCaption": "Circulus Albus (9) capere potest Circulum Nigrum (25) adiutore Triangulo (16) utendo: 9 + 16 = 25",
"difference": "Differentia",
"differenceExample": "Tuum 30 - adiutor 10 = hostis 20",
"differenceCaption": "Triangulum Album (30) capere potest Triangulum Nigrum (20) adiutore Circulo (10) utendo: 30 - 10 = 20",
"product": "Productum",
"productExample": "Tuum 5 × adiutor 5 = hostis 25",
"productCaption": "Circulus Albus (5) capere potest Circulum Nigrum (25) adiutore Circulo (5) utendo: 5 × 5 = 25",
"ratio": "Ratio",
"ratioExample": "Tuum 20 ÷ adiutor 4 = hostis 5",
"ratioCaption": "Triangulum Album (20) capere potest Circulum Nigrum (5) adiutore Circulo (4) utendo: 20 ÷ 4 = 5",
"simpleTitle": "Relationes Simplices (adiutor non necessarius)",
"simpleEqual": {
"name": "Aequale",
"desc": "Tuum 25 capit eorum 25"
},
"simpleMultiple": {
"name": "Multiplex / Divisor",
"desc": "Tuum 64 capit eorum 16 (64 ÷ 16 = 4)"
},
"advancedTitle": "Relationes Provectae (una tabula adiutrix necessaria)",
"advancedSum": {
"name": "Summa",
"desc": "Tuum 9 + adiutor 16 = hostis 25"
},
"advancedDifference": {
"name": "Differentia",
"desc": "Tuum 30 - adiutor 10 = hostis 20"
},
"advancedProduct": {
"name": "Productum",
"desc": "Tuum 5 × adiutor 5 = hostis 25"
},
"helpersTitle": "💡 Quid sunt adiutores?",
"helpersDescription": "Adiutores sunt aliae tabulae tuae in tabula. Non movent - tantum numerum suum mathematicae addunt. Ludus tibi ostendet quae capturae operentur cum tabulam eligas.",
"helpersDesc": "Adiutores sunt aliae tabulae tuae adhuc in tabula — non movent, tantum valorem suum mathematicae praebent. Ludus capturas validas tibi ostendet cum tabulam eligas.",
"example1Title": "Exemplum: Captura Multiplicis/Divisoris",
"example1Desc": "64 Albi (quadratum) capere potest 16 Nigri (triangulum) quia 64 multiplex 16 est",
"example2Title": "Exemplum: Captura Summae cum Adiutore",
"example2Desc": "9 Albi + adiutor 16 = 25 Nigri (9 + 16 = 25)",
"example3Title": "Exemplum: Captura Differentiae cum Adiutore",
"example3Desc": "30 Albi - adiutor 10 = 20 Nigri (30 - 10 = 20)",
"example4Title": "Exemplum: Captura Producti cum Adiutore",
"example4Desc": "4 Albi × adiutor 5 = 20 Nigri (4 × 5 = 20)",
"example5Title": "Exemplum: Captura Rationis cum Adiutore",
"example5Desc": "20 Albi ÷ adiutor 4 = 5 Nigri (20 ÷ 4 = 5)",
"pyramidTitle": "Speciale: Capturae Pyramidis",
"pyramidIntro": "Pyramides 4 valores faciei habent, eas incredibiliter versatiles faciendo. Eligis quam faciem uti cum capturam tentes, permittendo unam Pyramidem multas tabulas hostiles minari.",
"pyramidEx1Title": "Exemplum: Electio Faciei Pyramidis (Aequalitas)",
"pyramidEx1Desc": "Pyramis Albi (facies: 64, 49, 36, 25) capere potest 49 Nigri eligendo faciem 49 pro aequalitate (49 = 49)",
"pyramidEx1Note": "<strong>Electio faciei:</strong> Albus faciem 49 declarat → 49 = 49 (aequalitas) → Captura succedit! Pyramis quoque tabulas valoris 64, 36, vel 25 capere posset faciebus correspondentibus utendo.",
"pyramidEx2Title": "Exemplum: Pyramis cum Adiutore (Summa)",
"pyramidEx2Desc": "Pyramis Albi faciem 25 + adiutorem 20 = 45 Nigri utitur (25 + 20 = 45)",
"pyramidEx2Note": "<strong>Electio faciei:</strong> Albus faciem 25 eligit et adiutorem in D4 (valor 20) declarat → 25 + 20 = 45 (summa) → Captura succedit! Facies diversas eligendo, eadem Pyramis valores alios variis adiutoribus utendo capere posset.",
"pyramidEx3Title": "Exemplum: Flexibilitas Pyramidis (Multiplex/Divisor)",
"pyramidEx3Desc": "Pyramis Nigri (facies: 36, 25, 16, 4) capere potest 9 Albi faciem 36 utendo (multiplex: 36 ÷ 9 = 4)",
"pyramidEx3Note": "<strong>Electio faciei:</strong> Niger faciem 36 eligit → 36 ÷ 9 = 4 (multiplex) → Captura succedit! Nota: Niger quoque faciem 4 cum adiutore 5 pro summa uti posset (4 + 5 = 9), multas vias validas ostendens."
},
"harmony": {
"title": "Harmoniae: Via Optima Vincendi",
"intro": "Harmonia est quomodo ludum vincas. 3 tabulas tuas in territorium hostium in lineam rectam pone. Earum valores formam mathematicam facere debent.",
"introDetail": "Cogita de eo sicut de serie numerorum. Sunt 3 genera formarum quas facere potes:",
"arithmetic": "1. Arithmetica (Facillima)",
"arithmeticDesc": "Numerus medius exacte inter alios duos est. Spatia aequalia.",
"arithmeticFormula": "Medius × 2 = Primus + Ultimus",
"arithmeticTip": "Circuli parvi (2-9) hic optime operantur. Hiatus aequales quaere! Exemplum: 6, 9, 12",
"arithmeticCaption": "Tabulae Albae 6, 9, 12 in ordine in territorio hostium progressionem arithmeticam faciunt",
"geometric": "2. Geometrica (Eodem Numero Multiplica)",
"geometricDesc": "Eodem numero semper multiplica. Rationes aequales.",
"geometricFormula": "Medius² = Primus × Ultimus",
"geometricTip": "Numeri quadrati optime operantur! Exemplum: 4, 8, 16 (per 2 semper multiplica)",
"geometricCaption": "Tabulae Albae 4, 8, 16 in ordine in territorio hostium progressionem geometricam faciunt",
"harmonic": "3. Harmonica (Difficilis!)",
"harmonicDesc": "Ex harmoniis musicalibus. Difficillima invenienda.",
"harmonicFormula": "2 × Primus × Ultimus = Medius × (Primus + Ultimus)",
"harmonicTip": "Hae rarae sunt. Tantum haec memoriza: 3-4-6, 4-6-12, 6-8-12, 6-10-15",
"harmonicCaption": "Tabulae Albae 6, 8, 12 in ordine in territorio hostium progressionem harmonicam faciunt",
"howToCheck": "Quomodo verificare:",
"example": "Exemplum:",
"check": "Verifica:",
"differences": "Differentiae:",
"equal": "(aequales!)",
"ratios": "Rationes:",
"strategyTip": "Consilium:",
"rulesTitle": "⚠️ Regulae Importantes",
"enemyTerritoryTitle": "In territorio hostium esse debent:",
"enemyTerritory": "Omnes 3 tabulae in parte adversarii esse debent (Albus: ordines 5-8, Niger: ordines 1-4)",
"straightLineTitle": "In linea esse debent:",
"straightLine": "Ordo, columna, vel diagonalis. Nullae tabulae dispersae!",
"adjacentTitle": "Contingentes esse debent:",
"adjacent": "3 tabulae proximae inter se esse debent sine hiatu",
"survivalTitle": "Unum tempus superesse debent:",
"survival": "Postquam harmoniam declaras, adversarius UNUM tempus accipit ad eam frangendum",
"victoryTitle": "Tunc vincis:",
"victoryRule": "Si supersit, in tuo proximo tempore vincis!",
"strategyTitle": "Quomodo Harmoniis Vincere",
"startWith2Title": "Incipe cum 2, tunc adde tertiam",
"startWith2": "Primum 2 tabulas profunde pone. Cogita quae tertia tabula formam complet. Tunc eam tabulam impelle. Forsitan non venientem videant!",
"useCommonTitle": "Numeros communes utere",
"useCommon": "Numeri sicut 6, 8, 9, 12, 16 in multis formis operantur. Si hos profunde habes, vide quae tertia tabula laborem perficit.",
"protectTitle": "Tabulas tuas protege",
"protect": "Dum aedificas, alias tabulas prope tene ad defendendum. Una captura omnia perdit!",
"blockTitle": "Harmonias eorum obstrue",
"block": "Si adversarius 2 tabulas profunde habet, cogita quam tertiam tabulam necessitant. Eum locum obstrue vel unam ex tabulis eorum STATIM cape.",
"calculateTitle": "Verifica antequam declares",
"calculate": "Antequam declarare, certa quod adversarius nullam ex 3 tabulis tuis capere possit. Si potest, primum protege vel exspecta.",
"quickRefTitle": "💡 Referentia Celera: Harmoniae Communes in Exercitu Tuo"
},
"victory": {
"title": "Quomodo Vincere",
"harmony": "Victoria #1: Harmonia (Progressio)",
"harmonyDesc": "Fac progressionem mathematicam cum 3 tabulis in territorio hostium. Si proximum tempus adversarii tui supersit, vincis!",
"exampleTitle": "Exemplum: Albus Vincit!",
"exampleCaption": "Tabulae Albae 4, 8, 16 progressionem geometricam in territorio hostium faciunt. Niger eam frangere non potest - Albus vincit!",
"harmonyNote": "Haec est condicio victoriae primaria in Rithmomachia",
"exhaustion": "Victoria #2: Exhaustio",
"exhaustionDesc": "Si adversarius tuus nullos motus legales in initio sui temporis habet, perdit.",
"strategyTitle": "Consilia Celera",
"tip1": "Centrum rege - facilius impellere",
"tip2": "Tabulae parvae celeres sunt - circuli in partem hostilem celeriter labi possunt",
"tip3": "Tabulae magnae potentes sunt - difficilius capere",
"tip4": "Harmonias eorum specta - noli 3 tabulas profunde ire sinere",
"tip5": "Pyramides flexibiles sunt - valorem rectum pro singula captura elige"
},
"strategy": {
"title": "Ratio et Tactica",
"intro": "Rithmomachia et perspicaciam mathematicam et consilium strategicum remuneratur. Successus requirit temperantiam inter imperium territoriale, conservationem tabularum, et occasiones mathematicas.",
"openingPrinciples": {
"title": "Principia Aperturae",
"controlCenter": {
"title": "Centrum Rege",
"desc": "Tabulas ad vacuum centrum 8-columnarum (columnae EL) impelle. Hoc mobilitatem praebet et occasiones capiendi ex multis angulis creat."
},
"developCircles": {
"title": "Circulos Parvos Primum Evolve",
"desc": "Circuli tui parvi (29) in columnis D et M mobiles et versatiles sunt. Eos ad centrum mature move ut praesentiam stabilias et retia adiutorum crees."
},
"protectPyramid": {
"title": "Pyramidem Tuam Protege",
"desc": "Pyramis est tabula tua flexibilissima (4 valores faciei) sed tantum 1 quadratum movetur. Eam post lineas impellentes tene usque ad medium ludum cum minae mathematicae clarae sint."
},
"knowNumbers": {
"title": "Numeros Tuos Cognosce",
"desc": "Relationes mathematicas principales in exercitu tuo memoriza. Cognosce quae tabulae factores, multiplices, et summas faciunt—hoc computationem tacticam accelerat."
}
},
"midGame": {
"title": "Tactica Medii Ludi",
"helperNetworks": {
"title": "Retia Adiutorum Aedifica",
"desc": "Tabulas dispone ut multi adiutores capturas sustinere possint. Exempli gratia, si tabulas valoris 5 et 10 habes, 15 (summa), 5 (differentia), vel 50 (productum) capere potes cum tabula tua mobilis recte posita sit."
},
"createThreats": {
"title": "Minas Capturae Crea",
"desc": "Adversarium tuum coge ut multas tabulas simul defendat. Etsi omnes capturas exsequi non potes, mina optiones eorum constringit et tempus regit."
},
"thinkDefensively": {
"title": "Defensive Cogita",
"desc": "Post singulos motus, verifica quae ex tabulis tuis capi possint. Tabulae magni valoris sicut quadrata (169, 225, 289, 361) multis relationibus vulnerabiles sunt—eas post defensores vel in quadratis protectis pone."
},
"exchangeWhenAhead": {
"title": "Permuta Cum Praecedis",
"desc": "Si plures tabulas vel valores altiores cepisti, positionem simplifica tabulas permutando. Hoc optiones oppugnationis adversarii tui reducit et te ad victoriam exhaustionis propius ducit."
}
},
"victoryPaths": {
"title": "Viae ad Victoriam",
"harmony": {
"title": "Victoria Harmoniae (Elegantissima)",
"desc": "Pone 3 tabulas in territorio hostium progressionem arithmeticam, geometricam, vel harmonicam facientes. Triades communes:",
"arithmetic": "<strong>Arithmetica:</strong> (6, 9, 12), (5, 7, 9), (8, 12, 16)",
"geometric": "<strong>Geometrica:</strong> (4, 8, 16), (3, 9, 27), (2, 8, 32)",
"harmonic": "<strong>Harmonica:</strong> (6, 8, 12), (10, 12, 15), (6, 10, 15)"
},
"exhaustion": {
"title": "Victoria Exhaustionis (Attritio)",
"desc": "Tabulas systematice cape donec adversarius tuus nullos motus legales habeat. Attende ad: tabulas mobiles (Quadrata et Triangula) eliminandas, diagonales et ordines obstruendos, et Pyramidem in angulum cogendam."
},
"points": {
"title": "Victoria Punctorum (Regula Optionalis)",
"desc": "Si habilitata, 30 puncta tabularum cape (C=1, T=2, S=3, P=5). Scopos magni valoris vena et tabulas tuas graves conserva. Utiliter permuta."
}
},
"commonMistakes": {
"title": "⚠️ Errores Communes Vitandi",
"movingWithoutCalc": "<strong>Movere sine computatione:</strong> Semper verifica si quadratum tuum destinationis a tabulis hostilibus capi potest",
"ignoringGeometry": "<strong>Geometriam adiutoris ignorare:</strong> Adiutores ubicumque esse possunt, sed adhuc viam motus legalem ad capiendum necessitas",
"neglectingHarmony": "<strong>Minas harmoniae neglegere:</strong> Si adversarius tuus 2 tabulas in tuo territorio habet partem progressionis facientes, tertiam eorum obstrue",
"exposingPyramid": "<strong>Pyramidem expositam relinquere:</strong> Tantum 1 quadratum movetur et optiones fugae limitatas habet—eam mature protege"
},
"advanced": {
"title": "Conceptus Provecti",
"sacrifices": {
"title": "Sacrificia Positionalia",
"desc": "Interdum tabulam sacrificare lineas pro aliis tabulis tuis aperit vel adversarium tuum in positionem peiorem cogit. Inaequalitatem resultantem computa antequam sacrifices."
},
"pyramidFaces": {
"title": "Electio Facierum Pyramidis",
"desc": "Pyramis tua 4 valores faciei habet. In capturis, faciem elige quae flexibilitatem futuram maximizat. In declarationibus harmoniae, faciem elige quae genus progressionis pretiosissimum complet."
},
"tempo": {
"title": "Tempus et Initium",
"desc": "Quilibet motus qui responsum defensivum cogit tempus acquirit. Motus cogentes (capturas, minas) constringe ut cursum dictes et adversarium tuum consilium suum exsequi prohibeas."
}
}
}
}
}