/* * Copyright (c) Camden Dixie O'Brien * SPDX-License-Identifier: AGPL-3.0-only */ #ifndef PUZZ_H #define PUZZ_H #include #define WIDTH 9 #define HEIGHT 9 #define NMINES 10 #define FORADJ(X, Y, XI, YI) \ for (int YI = Y - 1; YI < Y + 2; ++YI) \ for (int XI = X - 1; XI < X + 2; ++XI) \ if (XI >= 0 && XI < WIDTH && YI >= 0 && YI < HEIGHT \ && (XI != X || YI != Y)) enum { MINE = 0xff, UNKNOWN = 0xfe, SAFE = 0xfd }; typedef uint8_t puzz_t[WIDTH][HEIGHT]; typedef enum { DEAD, OK, INCORRECT } status_t; void gen(void); void print(puzz_t puzz); void printsoln(void); status_t probe(int x, int y, puzz_t out); status_t check(puzz_t puzz); int countadj(puzz_t field, int x, int y, uint8_t val); #endif