ecattez / shahmat

A Chess implementation with the Domain Driven Design
https://ecattez.github.io/shahmat/
GNU General Public License v3.0
3 stars 0 forks source link

Feature: Knight #8

Closed ecattez closed 4 years ago

ecattez commented 4 years ago

Feature: Knight

Scenario: A knight can move forward, backward, left or right two squares and must then move one square in either perpendicular direction

GIVEN a <color> knight in <from>
WHEN the knight is moved to <direction> two times
AND then moved <perpendicular> one square
THEN the knight is in <to>

Example:
        | color | from | direction | perpendicular | to |
        | WHITE | D5 | FORWARD | SHIFT_LEFT | C7 |
        | WHITE | D5 | FORWARD | SHIFT_RIGHT | E7 |
        | WHITE | D5 | SHIFT_LEFT | FORWARD | B6 |
        | WHITE | D5 | SHIFT_RIGHT | FORWARD | F6 |
        | WHITE | D5 | SHIFT_LEFT | BACKWARD | B4 |
        | WHITE | D5 | SHIFT_RIGHT | BACKWARD | F4 |
        | WHITE | D5 | BACKWARD | SHIFT_LEFT | C3 |
        | WHITE | D5 | BACKWARD | SHIFT_RIGHT | E3 |
        | BLACK | E4 | BACKWARD | SHIFT_LEFT | F2 |
        | BLACK | E4 | BACKWARD | SHIFT_RIGHT | D2 |
        | BLACK | E4 | SHIFT_LEFT | FORWARD | G3 |
        | BLACK | E4 | SHIFT_RIGHT | FORWARD | C3 |
        | BLACK | E4 | SHIFT_LEFT | BACKWARD | G5 |
        | BLACK | E4 | SHIFT_RIGHT | BACKWARD | C5 |
        | BLACK | E4 | BACKWARD | SHIFT_LEFT | F6 |
        | BLACK | E4 | BACKWARD | SHIFT_RIGHT | D6 |

Scenario: A knight can not take the place of any of its allies on the board that is within its bounds of movement

GIVEN a <color> knight in <from>
AND an allied piece in <to>
WHEN the knight is moved to <to>
THEN the move is refused

Example:
        | color | from | to |
        | WHITE | D5 | C7 |
        | WHITE | D5 | E7 |
        | WHITE | D5 | B6 |
        | WHITE | D5 | F6 |
        | WHITE | D5 | B4 |
        | WHITE | D5 | F4 |
        | WHITE | D5 | C3 |
        | WHITE | D5 | E3 |
        | BLACK | E4 | D6 |
        | BLACK | E4 | F6 |
        | BLACK | E4 | C5 |
        | BLACK | E4 | G5 |
        | BLACK | E4 | C3 |
        | BLACK | E4 | G3 |
        | BLACK | E4 | D2 |
        | BLACK | E4 | F2 |

Scenario: A knight can take any opposing piece on the board that is within its bounds of movement

GIVEN a <color> knight in <from>
AND an opposing piece in <to>
WHEN the knight is moved to <to>
THEN the knight captures the opposing piece

Example:
        | color | from | to |
        | WHITE | D5 | C7 |
        | WHITE | D5 | E7 |
        | WHITE | D5 | B6 |
        | WHITE | D5 | F6 |
        | WHITE | D5 | B4 |
        | WHITE | D5 | F4 |
        | WHITE | D5 | C3 |
        | WHITE | D5 | E3 |
        | BLACK | E4 | D6 |
        | BLACK | E4 | F6 |
        | BLACK | E4 | C5 |
        | BLACK | E4 | G5 |
        | BLACK | E4 | C3 |
        | BLACK | E4 | G3 |
        | BLACK | E4 | D2 |
        | BLACK | E4 | F2 |

Scenario: A knight can skip over any other pieces to reach its destination position

GIVEN a <color> knight in <from>
AND the square <obstructed> is not vacant
WHEN the knight is moved to <to>
THEN the knight is in <to>

Example:
        | color | from | obstructed | to |
        | WHITE | D5 | D6 | C7 |
        | WHITE | D5 | D7 | E7 |
        | WHITE | D5 | C5 | B6 |
        | WHITE | D5 | F5 | F6 |
        | WHITE | D5 | B5 | B4 |
        | WHITE | D5 | E5 | F4 |
        | WHITE | D5 | D4 | C3 |
        | WHITE | D5 | D3 | E3 |
        | BLACK | E4 | E5 | D6 |
        | BLACK | E4 | E6 | F6 |
        | BLACK | E4 | D4 | C5 |
        | BLACK | E4 | F4 | G5 |
        | BLACK | E4 | D4 | C3 |
        | BLACK | E4 | G4 | G3 |
        | BLACK | E4 | E3 | D2 |
        | BLACK | E4 | E2 | F2 |