Add SAFE state to indicate un-probed safe tile
This commit is contained in:
parent
3d4cfc7a0c
commit
49417b4840
3
main.c
3
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 y = 0; y < HEIGHT; ++y) {
|
||||||
for (int x = 0; x < WIDTH; ++x) {
|
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;
|
continue;
|
||||||
|
|
||||||
const int mines = countadj(state->field, x, y, MINE);
|
const int mines = countadj(state->field, x, y, MINE);
|
||||||
|
12
puzz.c
12
puzz.c
@ -106,8 +106,18 @@ status_t check(puzz_t puzz)
|
|||||||
{
|
{
|
||||||
for (int y = 0; y < HEIGHT; ++y) {
|
for (int y = 0; y < HEIGHT; ++y) {
|
||||||
for (int x = 0; x < WIDTH; ++x) {
|
for (int x = 0; x < WIDTH; ++x) {
|
||||||
if (puzz[x][y] != UNKNOWN && puzz[x][y] != soln[x][y])
|
switch (puzz[x][y]) {
|
||||||
|
case UNKNOWN:
|
||||||
|
continue;
|
||||||
|
case SAFE:
|
||||||
|
if (soln[x][y] == MINE)
|
||||||
return INCORRECT;
|
return INCORRECT;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (puzz[x][y] != soln[x][y])
|
||||||
|
return INCORRECT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return OK;
|
return OK;
|
||||||
|
2
puzz.h
2
puzz.h
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
enum { MINE = 0xff, UNKNOWN = 0xfe };
|
enum { MINE = 0xff, UNKNOWN = 0xfe, SAFE = 0xfd };
|
||||||
|
|
||||||
typedef uint8_t puzz_t[WIDTH][HEIGHT];
|
typedef uint8_t puzz_t[WIDTH][HEIGHT];
|
||||||
typedef enum { DEAD, OK, INCORRECT } status_t;
|
typedef enum { DEAD, OK, INCORRECT } status_t;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user