summaryrefslogtreecommitdiffstats
path: root/modules/game/inc/game_iface.h
blob: 51f0e8cfdf00c683067c081387f4d67189a535f5 (plain) (blame)
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 **********************************************************
 ******************************************************************************/