2025-03-22 13:30:25 +00:00

34 lines
734 B
C

/*
* Copyright (c) Camden Dixie O'Brien
* SPDX-License-Identifier: AGPL-3.0-only
*/
#ifndef PUZZ_H
#define PUZZ_H
#include <stdint.h>
#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