diff --git a/main.c b/main.c index 655fe50..d35e1de 100644 --- a/main.c +++ b/main.c @@ -68,7 +68,8 @@ static update_res_t update(state_t *state, int *x_out, int *y_out) for (int y = 0; y < HEIGHT; ++y) { for (int x = 0; x < WIDTH; ++x) { - if (state->field[x][y] == UNKNOWN || state->field[x][y] == MINE) + if (state->field[x][y] == UNKNOWN || state->field[x][y] == MINE + || state->field[x][y] == SAFE) continue; const int mines = countadj(state->field, x, y, MINE); diff --git a/puzz.c b/puzz.c index e797830..b4d0a32 100644 --- a/puzz.c +++ b/puzz.c @@ -106,8 +106,18 @@ status_t check(puzz_t puzz) { for (int y = 0; y < HEIGHT; ++y) { for (int x = 0; x < WIDTH; ++x) { - if (puzz[x][y] != UNKNOWN && puzz[x][y] != soln[x][y]) - return INCORRECT; + switch (puzz[x][y]) { + case UNKNOWN: + continue; + case SAFE: + if (soln[x][y] == MINE) + return INCORRECT; + break; + default: + if (puzz[x][y] != soln[x][y]) + return INCORRECT; + break; + } } } return OK; diff --git a/puzz.h b/puzz.h index 34e66ce..d819c05 100644 --- a/puzz.h +++ b/puzz.h @@ -12,7 +12,7 @@ #include -enum { MINE = 0xff, UNKNOWN = 0xfe }; +enum { MINE = 0xff, UNKNOWN = 0xfe, SAFE = 0xfd }; typedef uint8_t puzz_t[WIDTH][HEIGHT]; typedef enum { DEAD, OK, INCORRECT } status_t;