fix(rithmomachia): Correct board setup to match reference image exactly
Applied four critical corrections to match the reference photo: 1. Black Column C (inner edge) - Fixed circle sequence: - C3: 9 (was 3) - C4: 7 (was 4) - C5: 5 (was 2) - C6: 3 (was 12) 2. White N8 - Fixed top inner triangle: - N8: T(9) (was T(5)) 3. White Pyramid - Moved to lower position: - O2: Pyramid (was O7) - Shifted O2-O6 circles down to O3-O7 4. Black A6 - Fixed outer rim piece: - A6: S(120) (was T(64)) - B6: T(64) (was C(81)) - B7: C(81) (was S(120)) These changes ensure the layout matches the traditional Rithmomachia reference image with large figurates on outer edges (A, P) and small geometric units on inner edges (C, N). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -88,19 +88,19 @@ This is the **classical symmetric formation** where large composite numbers occu
|
||||
**Column A** (Outer edge — Large squares and triangles):
|
||||
```
|
||||
A1: S(49) A2: S(121) A3: T(36) A4: T(30)
|
||||
A5: T(56) A6: T(64) A7: S(225) A8: S(361)
|
||||
A5: T(56) A6: S(120) A7: S(225) A8: S(361)
|
||||
```
|
||||
|
||||
**Column B** (Middle — Mixed pieces + Pyramid):
|
||||
```
|
||||
B1: empty B2: T(66) B3: C(9) B4: C(25)
|
||||
B5: C(49) B6: C(81) B7: S(120) B8: P[36,25,16,4]
|
||||
B5: C(49) B6: T(64) B7: C(81) B8: P[36,25,16,4]
|
||||
```
|
||||
|
||||
**Column C** (Inner edge — Small units):
|
||||
```
|
||||
C1: T(16) C2: T(12) C3: C(3) C4: C(4)
|
||||
C5: C(2) C6: C(12) C7: T(90) C8: T(9)
|
||||
C1: T(16) C2: T(12) C3: C(9) C4: C(7)
|
||||
C5: C(5) C6: C(3) C7: T(90) C8: T(9)
|
||||
```
|
||||
|
||||
### WHITE Setup (Right side — columns N, O, P)
|
||||
@@ -108,13 +108,13 @@ C5: C(2) C6: C(12) C7: T(90) C8: T(9)
|
||||
**Column N** (Inner edge — Small units):
|
||||
```
|
||||
N1: T(4) N2: C(2) N3: C(6) N4: C(8)
|
||||
N5: C(4) N6: C(2) N7: T(6) N8: T(5)
|
||||
N5: C(4) N6: C(2) N7: T(6) N8: T(9)
|
||||
```
|
||||
|
||||
**Column O** (Middle — Mixed pieces + Pyramid):
|
||||
```
|
||||
O1: S(153) O2: C(25) O3: C(36) O4: C(64)
|
||||
O5: C(16) O6: C(4) O7: P[64,49,36,25] O8: S(169)
|
||||
O1: S(153) O2: P[64,49,36,25] O3: C(25) O4: C(36)
|
||||
O5: C(64) O6: C(16) O7: C(4) O8: S(169)
|
||||
```
|
||||
|
||||
**Column P** (Outer edge — Large squares and triangles):
|
||||
@@ -131,7 +131,7 @@ P5: T(49) P6: T(72) P7: S(45) P8: S(25)
|
||||
### Strategic layout philosophy
|
||||
|
||||
* **Outer edges (A and P)**: Heavy squares (361, 289, 225, 169, etc.) command the flanks
|
||||
* **Middle columns (B and O)**: Mix of powers with the Pyramids (royal pieces) anchoring rows 8 and 7
|
||||
* **Middle columns (B and O)**: Mix of powers with the Pyramids (royal pieces) at B8 (Black) and O2 (White)
|
||||
* **Inner edges (C and N)**: Nimble circles and small triangles (2–16) for rapid infiltration
|
||||
* **Central battlefield (D–M)**: 10 empty columns provide space for mathematical maneuvering
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ export function createInitialBoard(): Record<string, Piece> {
|
||||
{ type: 'T', value: 36, square: 'A3' },
|
||||
{ type: 'T', value: 30, square: 'A4' },
|
||||
{ type: 'T', value: 56, square: 'A5' },
|
||||
{ type: 'T', value: 64, square: 'A6' },
|
||||
{ type: 'S', value: 120, square: 'A6' }, // was T(64) - moved to outer rim
|
||||
{ type: 'S', value: 225, square: 'A7' },
|
||||
{ type: 'S', value: 361, square: 'A8' },
|
||||
] as const
|
||||
@@ -32,8 +32,8 @@ export function createInitialBoard(): Record<string, Piece> {
|
||||
{ type: 'C', value: 9, square: 'B3' },
|
||||
{ type: 'C', value: 25, square: 'B4' },
|
||||
{ type: 'C', value: 49, square: 'B5' },
|
||||
{ type: 'C', value: 81, square: 'B6' },
|
||||
{ type: 'S', value: 120, square: 'B7' },
|
||||
{ type: 'T', value: 64, square: 'B6' }, // was C(81) - now has T(64) from A6
|
||||
{ type: 'C', value: 81, square: 'B7' }, // was S(120) - now has C(81) from B6
|
||||
// B8 is Pyramid (see below)
|
||||
] as const
|
||||
|
||||
@@ -41,10 +41,10 @@ export function createInitialBoard(): Record<string, Piece> {
|
||||
const blackColumnC = [
|
||||
{ type: 'T', value: 16, square: 'C1' },
|
||||
{ type: 'T', value: 12, square: 'C2' },
|
||||
{ type: 'C', value: 3, square: 'C3' },
|
||||
{ type: 'C', value: 4, square: 'C4' },
|
||||
{ type: 'C', value: 2, square: 'C5' },
|
||||
{ type: 'C', value: 12, square: 'C6' },
|
||||
{ type: 'C', value: 9, square: 'C3' }, // was 3 - corrected to match reference
|
||||
{ type: 'C', value: 7, square: 'C4' }, // was 4 - corrected to match reference
|
||||
{ type: 'C', value: 5, square: 'C5' }, // was 2 - corrected to match reference
|
||||
{ type: 'C', value: 3, square: 'C6' }, // was 12 - corrected to match reference
|
||||
{ type: 'T', value: 90, square: 'C7' },
|
||||
{ type: 'T', value: 9, square: 'C8' },
|
||||
] as const
|
||||
@@ -99,18 +99,18 @@ export function createInitialBoard(): Record<string, Piece> {
|
||||
{ type: 'C', value: 4, square: 'N5' },
|
||||
{ type: 'C', value: 2, square: 'N6' },
|
||||
{ type: 'T', value: 6, square: 'N7' },
|
||||
{ type: 'T', value: 5, square: 'N8' },
|
||||
{ type: 'T', value: 9, square: 'N8' }, // was 5 - corrected to match reference
|
||||
] as const
|
||||
|
||||
// Column O (Middle - Mixed pieces + Pyramid)
|
||||
const whiteColumnO = [
|
||||
{ type: 'S', value: 153, square: 'O1' },
|
||||
{ type: 'C', value: 25, square: 'O2' },
|
||||
{ type: 'C', value: 36, square: 'O3' },
|
||||
{ type: 'C', value: 64, square: 'O4' },
|
||||
{ type: 'C', value: 16, square: 'O5' },
|
||||
{ type: 'C', value: 4, square: 'O6' },
|
||||
// O7 is Pyramid (see below)
|
||||
// O2 is Pyramid (see below) - moved from O7
|
||||
{ type: 'C', value: 25, square: 'O3' }, // shifted down from O2
|
||||
{ type: 'C', value: 36, square: 'O4' }, // shifted down from O3
|
||||
{ type: 'C', value: 64, square: 'O5' }, // shifted down from O4
|
||||
{ type: 'C', value: 16, square: 'O6' }, // shifted down from O5
|
||||
{ type: 'C', value: 4, square: 'O7' }, // shifted down from O6
|
||||
{ type: 'S', value: 169, square: 'O8' },
|
||||
] as const
|
||||
|
||||
@@ -153,14 +153,14 @@ export function createInitialBoard(): Record<string, Piece> {
|
||||
}
|
||||
}
|
||||
|
||||
// White Pyramid at O7
|
||||
// White Pyramid at O2 (moved lower to match reference image)
|
||||
pieces.W_P_01 = {
|
||||
id: 'W_P_01',
|
||||
color: 'W',
|
||||
type: 'P',
|
||||
pyramidFaces: [64, 49, 36, 25],
|
||||
activePyramidFace: null,
|
||||
square: 'O7',
|
||||
square: 'O2',
|
||||
captured: false,
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user