| /* | |
| * Copyright 2000 Joshua Thielen | |
| * | |
| * This library is free software; you can redistribute it and/or | |
| * modify it under the terms of the GNU Lesser General Public | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #include <windows.h> | |
| #define BEGINNER_MINES 10 | |
| #define BEGINNER_COLS 8 | |
| #define BEGINNER_ROWS 8 | |
| #define ADVANCED_MINES 40 | |
| #define ADVANCED_COLS 16 | |
| #define ADVANCED_ROWS 16 | |
| #define EXPERT_MINES 99 | |
| #define EXPERT_COLS 30 | |
| #define EXPERT_ROWS 16 | |
| #define MAX_COLS 30 | |
| #define MAX_ROWS 24 | |
| #define BOTTOM_MARGIN 20 | |
| #define BOARD_WMARGIN 5 | |
| #define BOARD_HMARGIN 5 | |
| /* mine defines */ | |
| #define MINE_WIDTH 16 | |
| #define MINE_HEIGHT 16 | |
| #define LED_WIDTH 12 | |
| #define LED_HEIGHT 23 | |
| #define FACE_WIDTH 24 | |
| #define FACE_HEIGHT 24 | |
| typedef enum { SPRESS_BMP, COOL_BMP, DEAD_BMP, OOH_BMP, SMILE_BMP } FACE_BMP; | |
| typedef enum { WAITING, PLAYING, GAMEOVER, WON } GAME_STATUS; | |
| typedef enum { | |
| MPRESS_BMP, ONE_BMP, TWO_BMP, THREE_BMP, FOUR_BMP, FIVE_BMP, SIX_BMP, | |
| SEVEN_BMP, EIGHT_BMP, BOX_BMP, FLAG_BMP, QUESTION_BMP, EXPLODE_BMP, | |
| WRONG_BMP, MINE_BMP, QPRESS_BMP | |
| } MINEBMP_OFFSET; | |
| typedef enum { BEGINNER, ADVANCED, EXPERT, CUSTOM } DIFFICULTY; | |
| typedef struct tagBOARD | |
| { | |
| BOOL IsMarkQ; | |
| HDC hdc; | |
| HINSTANCE hInst; | |
| HWND hWnd; | |
| HBITMAP hMinesBMP; | |
| HBITMAP hFacesBMP; | |
| HBITMAP hLedsBMP; | |
| RECT mines_rect; | |
| RECT face_rect; | |
| RECT timer_rect; | |
| RECT counter_rect; | |
| unsigned width; | |
| unsigned height; | |
| POINT pos; | |
| unsigned time; | |
| unsigned num_flags; | |
| unsigned boxes_left; | |
| unsigned num_mines; | |
| /* difficulty info */ | |
| unsigned rows; | |
| unsigned cols; | |
| unsigned mines; | |
| char best_name [3][16]; | |
| unsigned best_time [3]; | |
| DIFFICULTY difficulty; | |
| POINT press; | |
| /* defines for mb */ | |
| #define MB_NONE 0 | |
| #define MB_LEFTDOWN 1 | |
| #define MB_LEFTUP 2 | |
| #define MB_RIGHTDOWN 3 | |
| #define MB_RIGHTUP 4 | |
| #define MB_BOTHDOWN 5 | |
| #define MB_BOTHUP 6 | |
| unsigned mb; | |
| FACE_BMP face_bmp; | |
| GAME_STATUS status; | |
| struct BOX_STRUCT | |
| { | |
| unsigned IsMine : 1; | |
| unsigned IsPressed : 1; | |
| unsigned FlagType : 2; | |
| unsigned NumMines : 4; | |
| } box [MAX_COLS + 2] [MAX_ROWS + 2]; | |
| /* defines for FlagType */ | |
| #define NORMAL 0 | |
| #define QUESTION 1 | |
| #define FLAG 2 | |
| #define COMPLETE 3 | |
| } BOARD; | |
| void ExitApp( int error ); | |
| void InitBoard( BOARD *p_board ); | |
| void LoadBoard( BOARD *p_board ); | |
| void SaveBoard( BOARD *p_board ); | |
| void DestroyBoard( BOARD *p_board ); | |
| void SetDifficulty( BOARD *p_board, DIFFICULTY difficulty ); | |
| void CheckLevel( BOARD *p_board ); | |
| void CreateBoard( BOARD *p_board ); | |
| void CreateBoxes( BOARD *p_board ); | |
| void TestBoard( HWND hWnd, BOARD *p_board, unsigned x, unsigned y, int msg ); | |
| void TestMines( BOARD *p_board, POINT pt, int msg ); | |
| void TestFace( BOARD *p_board, POINT pt, int msg ); | |
| void DrawBoard( HDC hdc, HDC hMemDC, PAINTSTRUCT *ps, BOARD *p_board ); | |
| void DrawMines( HDC hdc, HDC hMemDC, BOARD *p_board ); | |
| void DrawMine( HDC hdc, HDC hMemDC, BOARD *p_board, unsigned col, unsigned row, BOOL IsPressed ); | |
| void AddFlag( BOARD *p_board, unsigned col, unsigned row ); | |
| void CompleteBox( BOARD *p_board, unsigned col, unsigned row ); | |
| void CompleteBoxes( BOARD *p_board, unsigned col, unsigned row ); | |
| void PressBox( BOARD *p_board, unsigned col, unsigned row ); | |
| void PressBoxes( BOARD *p_board, unsigned col, unsigned row ); | |
| void UnpressBox( BOARD *p_board, unsigned col, unsigned row ); | |
| void UnpressBoxes( BOARD *p_board, unsigned col, unsigned row ); | |
| void UpdateTimer( BOARD *p_board ); | |
| void DrawLeds( HDC hdc, HDC hMemDC, BOARD *p_board, int number, int x, int y); | |
| void DrawFace( HDC hdc, HDC hMemDC, BOARD *p_board ); | |
| LRESULT WINAPI MainProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); | |
| BOOL CALLBACK CustomDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); | |
| BOOL CALLBACK CongratsDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); | |
| BOOL CALLBACK TimesDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); | |
| BOOL CALLBACK AboutDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ); | |
| /* end of header */ |