feat(game): add persistent bush-wall breakthroughs
This commit is contained in:
@@ -346,6 +346,37 @@ static void test_victory_and_draw_window(void) {
|
||||
printf("game outward result window: PASS (200 ms draw boundary, 201 ms winner)\n");
|
||||
}
|
||||
|
||||
static void test_persistent_bush_wall_breakthrough(void) {
|
||||
maze32_maze_t maze;
|
||||
open_test_grid(&maze);
|
||||
maze.passages[index_of(2U, 2U)] &= (uint8_t)~MAZE32_PASSAGE_EAST;
|
||||
maze.passages[index_of(3U, 2U)] &= (uint8_t)~MAZE32_PASSAGE_WEST;
|
||||
maze32_game_t game = active_game(&maze);
|
||||
game.players[0].position = (maze32_cell_t){2U, 2U};
|
||||
|
||||
for (uint8_t hit = 1U; hit < MAZE32_GAME_BREAKTHROUGH_HITS; ++hit) {
|
||||
maze32_game_command_result_t result =
|
||||
move_player(&game, MAZE32_GAME_ROLE_PLAYER_ONE, MAZE32_GAME_DIRECTION_EAST, hit * 500U);
|
||||
assert(result.result == MAZE32_GAME_RESULT_BLOCKED);
|
||||
assert(result.breakthrough_hits == hit);
|
||||
assert(!result.breakthrough_opened);
|
||||
assert(game.players[0].position.x == 2U);
|
||||
}
|
||||
maze32_game_command_result_t result =
|
||||
move_player(&game, MAZE32_GAME_ROLE_PLAYER_ONE, MAZE32_GAME_DIRECTION_EAST, 2500U);
|
||||
assert(result.result == MAZE32_GAME_RESULT_ACCEPTED && result.breakthrough_opened);
|
||||
assert(result.breakthrough_hits == MAZE32_GAME_BREAKTHROUGH_HITS);
|
||||
assert(game.players[0].position.x == 3U);
|
||||
assert(game.opened_passages[index_of(2U, 2U)] & MAZE32_PASSAGE_EAST);
|
||||
assert(game.opened_passages[index_of(3U, 2U)] & MAZE32_PASSAGE_WEST);
|
||||
|
||||
game.players[1].position = (maze32_cell_t){3U, 2U};
|
||||
result = move_player(&game, MAZE32_GAME_ROLE_PLAYER_TWO, MAZE32_GAME_DIRECTION_WEST, 2600U);
|
||||
assert(result.result == MAZE32_GAME_RESULT_ACCEPTED);
|
||||
assert(game.players[1].position.x == 2U);
|
||||
printf("game persistent bush-wall breakthrough: PASS (five impacts, shared passage)\n");
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
test_inventory_drop_and_sabotage();
|
||||
test_atomic_meeting_return();
|
||||
@@ -353,6 +384,7 @@ int main(void) {
|
||||
test_vision_artifact_duration();
|
||||
test_compass_and_role_projections();
|
||||
test_victory_and_draw_window();
|
||||
test_persistent_bush_wall_breakthrough();
|
||||
puts("game mechanics tests: PASS");
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user