diff options
| author | tslil clingman <> | 2024-07-07 13:22:37 +0100 |
|---|---|---|
| committer | tslil clingman <> | 2024-07-07 13:22:37 +0100 |
| commit | 1735a79f0a53df37d9380b88ed98ee6fffc9ff36 (patch) | |
| tree | 31ed07e92bf5e842c0faafa1025ccbf490243437 /src/game.rs | |
| parent | 6edf7d4cdc19ee80b50c813835b8e36b011232b4 (diff) | |
From: ~devp
Previously, the cap flag checked stone 0 of a stack rather than stone
n-1, so it did not take into account a capstone moved as part of a
stack. I additionally added logic to check that no other stones were
dropped with the capstones, per Tak rules.
Diffstat (limited to 'src/game.rs')
| -rw-r--r-- | src/game.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/game.rs b/src/game.rs index 4a91755..6bc43dc 100644 --- a/src/game.rs +++ b/src/game.rs @@ -424,7 +424,7 @@ impl GameState { } let mut steps: usize = drops.len(); - let cap: bool = stack[0].stone == Stone::Capstone; + let cap: bool = stack[stack.len() - 1].stone == Stone::Capstone; let mut pos_new = Position { x: pos.x, y: pos.y }; while steps > 0 { @@ -453,7 +453,13 @@ impl GameState { )); } Stone::Standing => { - if (steps > 1) || (!cap) { + if cap { + if (steps > 1) || (drops[drops.len() - 1] > 1) { + return Err(String::from( + "A capstone move may not flatten a standing stone unless dropped on its own.", + )); + } + } else { return Err(String::from( "A move may not cover a standing stone.", )); |
