1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
/******************************************************************************
* Copyright (C) 2015 Alejandro Colomar Andrés *
******************************************************************************/
/******************************************************************************
******* include guard ********************************************************
******************************************************************************/
# ifndef MSW_GAME_IFACE_H
# define MSW_GAME_IFACE_H
/******************************************************************************
******* macros ***************************************************************
******************************************************************************/
# define ROWS_MAX (999)
# define COLS_MAX (999)
# define CHEATED (-1)
# define GAME_IFACE_LEVEL_BEGINNER_ROWS (8)
# define GAME_IFACE_LEVEL_BEGINNER_COLS (8)
# define GAME_IFACE_LEVEL_BEGINNER_MINES (10)
# define GAME_IFACE_LEVEL_INTERMEDIATE_ROWS (16)
# define GAME_IFACE_LEVEL_INTERMEDIATE_COLS (16)
# define GAME_IFACE_LEVEL_INTERMEDIATE_MINES (40)
# define GAME_IFACE_LEVEL_EXPERT_ROWS (16)
# define GAME_IFACE_LEVEL_EXPERT_COLS (30)
# define GAME_IFACE_LEVEL_EXPERT_MINES (99)
/******************************************************************************
******* enums ****************************************************************
******************************************************************************/
enum Game_Iface_Level {
GAME_IFACE_LEVEL_BEGINNER = 0,
GAME_IFACE_LEVEL_INTERMEDIATE,
GAME_IFACE_LEVEL_EXPERT,
GAME_IFACE_LEVEL_EXPERT_INV,
GAME_IFACE_LEVEL_CUSTOM
};
enum Game_Iface_Visible_Board {
GAME_IFACE_VIS_FOO = -1,
GAME_IFACE_VIS_KBOOM,
GAME_IFACE_VIS_HIDDEN_FIELD,
GAME_IFACE_VIS_HIDDEN_MINE,
GAME_IFACE_VIS_HIDDEN_SAFE,
GAME_IFACE_VIS_SAFE_MINE,
GAME_IFACE_VIS_0,
GAME_IFACE_VIS_1,
GAME_IFACE_VIS_2,
GAME_IFACE_VIS_3,
GAME_IFACE_VIS_4,
GAME_IFACE_VIS_5,
GAME_IFACE_VIS_6,
GAME_IFACE_VIS_7,
GAME_IFACE_VIS_8,
GAME_IFACE_VIS_FLAG,
GAME_IFACE_VIS_FLAG_FALSE,
GAME_IFACE_VIS_POSSIBLE,
GAME_IFACE_VIS_POSSIBLE_FALSE
};
/* Needs to be the same as 'enum Game_Usr_Board' in 'game.h' */
enum Game_Iface_Usr_Board {
GAME_IFACE_USR_KBOOM = -1,
GAME_IFACE_USR_HIDDEN,
GAME_IFACE_USR_CLEAR,
GAME_IFACE_USR_FLAG,
GAME_IFACE_USR_POSSIBLE
};
/* Needs to be the same as 'enum Game_Action' in 'game.h' */
enum Game_Iface_Action_Play {
GAME_IFACE_GAME_ACT_FOO = 0,
GAME_IFACE_GAME_ACT_STEP,
GAME_IFACE_GAME_ACT_FLAG,
GAME_IFACE_GAME_ACT_FLAG_POSSIBLE,
GAME_IFACE_GAME_ACT_RM_FLAG
};
enum Game_Iface_Action {
GAME_IFACE_ACT_FOO,
GAME_IFACE_ACT_PLAY,
GAME_IFACE_ACT_PAUSE,
GAME_IFACE_ACT_SAVE,
GAME_IFACE_ACT_XYZZY_ON,
GAME_IFACE_ACT_XYZZY_OFF,
GAME_IFACE_ACT_XYZZY_LIN,
GAME_IFACE_ACT_XYZZY_P,
GAME_IFACE_ACT_XYZZY_NP,
GAME_IFACE_ACT_QUIT
};
enum Game_Iface_State {
GAME_IFACE_STATE_PLAYING,
GAME_IFACE_STATE_SAFE,
GAME_IFACE_STATE_GAMEOVER,
GAME_IFACE_STATE_PAUSE,
GAME_IFACE_STATE_CHEATED,
GAME_IFACE_STATE_XYZZY,
GAME_IFACE_STATE_QUIT,
GAME_IFACE_STATE_FOO
};
/******************************************************************************
******* structs **************************************************************
******************************************************************************/
struct Game_Iface_Out {
int rows;
int cols;
int mines;
int visible [ROWS_MAX] [COLS_MAX];
int usr [ROWS_MAX] [COLS_MAX];
int flags;
int clr;
int state;
};
struct Game_Iface_Score {
int level;
int time;
int clicks;
};
struct Game_Iface_In {
int action;
int act_game [ROWS_MAX] [COLS_MAX];
};
/******************************************************************************
******* functions ************************************************************
******************************************************************************/
void game_iface_init_rand (int level, int pos_row, int pos_col);
void game_iface_init_load (void);
void game_iface (void);
/******************************************************************************
******* include guard ********************************************************
******************************************************************************/
# endif /* game_iface.h */
/******************************************************************************
******* end of file **********************************************************
******************************************************************************/
|