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:
Thomas Hallock
2025-10-30 22:04:38 -05:00
parent 5208fb5a1b
commit 618e56358d
2 changed files with 24 additions and 24 deletions

View File

@@ -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 (216) for rapid infiltration
* **Central battlefield (DM)**: 10 empty columns provide space for mathematical maneuvering

View File

@@ -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,
}