3 #define BEGINNER_MINES 10
4 #define BEGINNER_COLS 8
5 #define BEGINNER_ROWS 8
7 #define ADVANCED_MINES 40
8 #define ADVANCED_COLS 16
9 #define ADVANCED_ROWS 16
11 #define EXPERT_MINES 99
12 #define EXPERT_COLS 30
13 #define EXPERT_ROWS 16
18 #define BOTTOM_MARGIN 20
19 #define BOARD_WMARGIN 5
20 #define BOARD_HMARGIN 5
24 #define MINE_HEIGHT 16
28 #define FACE_HEIGHT 24
30 typedef enum { SPRESS_BMP
, COOL_BMP
, DEAD_BMP
, OOH_BMP
, SMILE_BMP
} FACE_BMP
;
32 typedef enum { WAITING
, PLAYING
, GAMEOVER
, WON
} GAME_STATUS
;
35 MPRESS_BMP
, ONE_BMP
, TWO_BMP
, THREE_BMP
, FOUR_BMP
, FIVE_BMP
, SIX_BMP
,
36 SEVEN_BMP
, EIGHT_BMP
, BOX_BMP
, FLAG_BMP
, QUESTION_BMP
, EXPLODE_BMP
,
37 WRONG_BMP
, MINE_BMP
, QPRESS_BMP
40 typedef enum { BEGINNER
, ADVANCED
, EXPERT
, CUSTOM
} DIFFICULTY
;
42 typedef struct tagBOARD
69 char best_name
[3][16];
70 unsigned best_time
[3];
71 DIFFICULTY difficulty
;
79 #define MB_RIGHTDOWN 3
90 unsigned IsPressed
: 1;
91 unsigned FlagType
: 2;
92 unsigned NumMines
: 4;
93 } box
[MAX_COLS
+ 2] [MAX_ROWS
+ 2];
95 /* defines for FlagType */
103 void ExitApp( int error
);
105 void InitBoard( BOARD
*p_board
);
107 void LoadBoard( BOARD
*p_board
);
109 void SaveBoard( BOARD
*p_board
);
111 void SetDifficulty( BOARD
*p_board
, DIFFICULTY difficulty
);
113 void CheckLevel( BOARD
*p_board
);
115 void CreateBoard( BOARD
*p_board
);
117 void CreateBoxes( BOARD
*p_board
);
119 void TestBoard( HWND hWnd
, BOARD
*p_board
, unsigned x
, unsigned y
, int msg
);
121 void TestMines( BOARD
*p_board
, POINT pt
, int msg
);
123 void TestFace( BOARD
*p_board
, POINT pt
, int msg
);
125 void DrawBoard( HDC hdc
, PAINTSTRUCT
*ps
, BOARD
*p_board
);
127 void DrawMines( HDC hdc
, BOARD
*p_board
);
129 void DrawMine( HDC hdc
, BOARD
*p_board
, unsigned col
, unsigned row
, BOOL IsPressed
);
131 void AddFlag( BOARD
*p_board
, unsigned col
, unsigned row
);
133 void CompleteBox( BOARD
*p_board
, unsigned col
, unsigned row
);
135 void CompleteBoxes( BOARD
*p_board
, unsigned col
, unsigned row
);
137 void PressBox( BOARD
*p_board
, unsigned col
, unsigned row
);
139 void PressBoxes( BOARD
*p_board
, unsigned col
, unsigned row
);
141 void UnpressBox( BOARD
*p_board
, unsigned col
, unsigned row
);
143 void UnpressBoxes( BOARD
*p_board
, unsigned col
, unsigned row
);
145 void UpdateTimer( BOARD
*p_board
);
147 void DrawLeds( HDC hdc
, BOARD
*p_board
, int number
, int x
, int y
);
149 void DrawFace( HDC hdc
, BOARD
*p_board
);
151 LRESULT WINAPI
MainProc( HWND hWnd
, UINT msg
, WPARAM wParam
, LPARAM lParam
);
153 BOOL CALLBACK
CustomDlgProc( HWND hDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
155 BOOL CALLBACK
CongratsDlgProc( HWND hDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
157 BOOL CALLBACK
TimesDlgProc( HWND hDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
159 BOOL CALLBACK
AboutDlgProc( HWND hDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);