34 lines
734 B
C
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
|