mirror of
https://github.com/reactos/wine.git
synced 2024-11-25 12:49:45 +00:00
winemine: Reorder some functions to avoid forward declarations.
This commit is contained in:
parent
165650d89b
commit
eec04aeb62
@ -36,240 +36,25 @@ static const DWORD wnd_style = WS_OVERLAPPEDWINDOW & ~WS_THICKFRAME & ~WS_MAXIMI
|
|||||||
static const char* registry_key = "Software\\Microsoft\\WinMine";
|
static const char* registry_key = "Software\\Microsoft\\WinMine";
|
||||||
|
|
||||||
|
|
||||||
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int cmdshow )
|
void CheckLevel( BOARD *p_board )
|
||||||
{
|
{
|
||||||
MSG msg;
|
if( p_board->rows < BEGINNER_ROWS )
|
||||||
WNDCLASS wc;
|
p_board->rows = BEGINNER_ROWS;
|
||||||
HWND hWnd;
|
|
||||||
HACCEL haccel;
|
|
||||||
char appname[20];
|
|
||||||
|
|
||||||
LoadString( hInst, IDS_APPNAME, appname, sizeof(appname));
|
if( p_board->rows > MAX_ROWS )
|
||||||
|
p_board->rows = MAX_ROWS;
|
||||||
|
|
||||||
wc.style = 0;
|
if( p_board->cols < BEGINNER_COLS )
|
||||||
wc.lpfnWndProc = MainProc;
|
p_board->cols = BEGINNER_COLS;
|
||||||
wc.cbClsExtra = 0;
|
|
||||||
wc.cbWndExtra = 0;
|
|
||||||
wc.hInstance = hInst;
|
|
||||||
wc.hIcon = LoadIcon( hInst, "WINEMINE" );
|
|
||||||
wc.hCursor = LoadCursor( 0, IDI_APPLICATION );
|
|
||||||
wc.hbrBackground = (HBRUSH) GetStockObject( BLACK_BRUSH );
|
|
||||||
wc.lpszMenuName = "MENU_WINEMINE";
|
|
||||||
wc.lpszClassName = appname;
|
|
||||||
|
|
||||||
if (!RegisterClass(&wc)) ExitProcess(1);
|
if( p_board->cols > MAX_COLS )
|
||||||
hWnd = CreateWindow( appname, appname,
|
p_board->cols = MAX_COLS;
|
||||||
wnd_style,
|
|
||||||
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
|
||||||
0, 0, hInst, NULL );
|
|
||||||
|
|
||||||
if (!hWnd) ExitProcess(1);
|
if( p_board->mines < BEGINNER_MINES )
|
||||||
|
p_board->mines = BEGINNER_MINES;
|
||||||
|
|
||||||
ShowWindow( hWnd, cmdshow );
|
if( p_board->mines > p_board->cols * p_board->rows - 2 )
|
||||||
UpdateWindow( hWnd );
|
p_board->mines = p_board->cols * p_board->rows - 2;
|
||||||
|
|
||||||
haccel = LoadAccelerators( hInst, MAKEINTRESOURCE(IDA_WINEMINE) );
|
|
||||||
SetTimer( hWnd, ID_TIMER, 1000, NULL );
|
|
||||||
|
|
||||||
while( GetMessage(&msg, 0, 0, 0) ) {
|
|
||||||
if (!TranslateAccelerator( hWnd, haccel, &msg ))
|
|
||||||
TranslateMessage( &msg );
|
|
||||||
|
|
||||||
DispatchMessage( &msg );
|
|
||||||
}
|
|
||||||
return msg.wParam;
|
|
||||||
}
|
|
||||||
|
|
||||||
LRESULT WINAPI MainProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
HDC hdc;
|
|
||||||
PAINTSTRUCT ps;
|
|
||||||
HMENU hMenu;
|
|
||||||
static BOARD board;
|
|
||||||
|
|
||||||
switch( msg ) {
|
|
||||||
case WM_CREATE:
|
|
||||||
board.hInst = ((LPCREATESTRUCT) lParam)->hInstance;
|
|
||||||
board.hWnd = hWnd;
|
|
||||||
InitBoard( &board );
|
|
||||||
CreateBoard( &board );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_PAINT:
|
|
||||||
{
|
|
||||||
HDC hMemDC;
|
|
||||||
|
|
||||||
WINE_TRACE("WM_PAINT\n");
|
|
||||||
hdc = BeginPaint( hWnd, &ps );
|
|
||||||
hMemDC = CreateCompatibleDC( hdc );
|
|
||||||
|
|
||||||
DrawBoard( hdc, hMemDC, &ps, &board );
|
|
||||||
|
|
||||||
DeleteDC( hMemDC );
|
|
||||||
EndPaint( hWnd, &ps );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WM_MOVE:
|
|
||||||
WINE_TRACE("WM_MOVE\n");
|
|
||||||
board.pos.x = (short)LOWORD(lParam);
|
|
||||||
board.pos.y = (short)HIWORD(lParam);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_DESTROY:
|
|
||||||
SaveBoard( &board );
|
|
||||||
DestroyBoard( &board );
|
|
||||||
PostQuitMessage( 0 );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_TIMER:
|
|
||||||
if( board.status == PLAYING ) {
|
|
||||||
board.time++;
|
|
||||||
RedrawWindow( hWnd, &board.timer_rect, 0,
|
|
||||||
RDW_INVALIDATE | RDW_UPDATENOW );
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_LBUTTONDOWN:
|
|
||||||
WINE_TRACE("WM_LBUTTONDOWN\n");
|
|
||||||
if( wParam & MK_RBUTTON )
|
|
||||||
msg = WM_MBUTTONDOWN;
|
|
||||||
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
|
||||||
SetCapture( hWnd );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_LBUTTONUP:
|
|
||||||
WINE_TRACE("WM_LBUTTONUP\n");
|
|
||||||
if( wParam & MK_RBUTTON )
|
|
||||||
msg = WM_MBUTTONUP;
|
|
||||||
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
|
||||||
ReleaseCapture();
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_RBUTTONDOWN:
|
|
||||||
WINE_TRACE("WM_RBUTTONDOWN\n");
|
|
||||||
if( wParam & MK_LBUTTON ) {
|
|
||||||
board.press.x = 0;
|
|
||||||
board.press.y = 0;
|
|
||||||
msg = WM_MBUTTONDOWN;
|
|
||||||
}
|
|
||||||
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_RBUTTONUP:
|
|
||||||
WINE_TRACE("WM_RBUTTONUP\n");
|
|
||||||
if( wParam & MK_LBUTTON )
|
|
||||||
msg = WM_MBUTTONUP;
|
|
||||||
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_MBUTTONDOWN:
|
|
||||||
WINE_TRACE("WM_MBUTTONDOWN\n");
|
|
||||||
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_MBUTTONUP:
|
|
||||||
WINE_TRACE("WM_MBUTTONUP\n");
|
|
||||||
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
|
||||||
{
|
|
||||||
if( wParam & MK_MBUTTON ) {
|
|
||||||
msg = WM_MBUTTONDOWN;
|
|
||||||
}
|
|
||||||
else if( wParam & MK_LBUTTON ) {
|
|
||||||
msg = WM_LBUTTONDOWN;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
case WM_COMMAND:
|
|
||||||
switch(LOWORD(wParam)) {
|
|
||||||
case IDM_NEW:
|
|
||||||
CreateBoard( &board );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case IDM_MARKQ:
|
|
||||||
hMenu = GetMenu( hWnd );
|
|
||||||
board.IsMarkQ = !board.IsMarkQ;
|
|
||||||
if( board.IsMarkQ )
|
|
||||||
CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED );
|
|
||||||
else
|
|
||||||
CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case IDM_BEGINNER:
|
|
||||||
SetDifficulty( &board, BEGINNER );
|
|
||||||
CreateBoard( &board );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case IDM_ADVANCED:
|
|
||||||
SetDifficulty( &board, ADVANCED );
|
|
||||||
CreateBoard( &board );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case IDM_EXPERT:
|
|
||||||
SetDifficulty( &board, EXPERT );
|
|
||||||
CreateBoard( &board );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case IDM_CUSTOM:
|
|
||||||
SetDifficulty( &board, CUSTOM );
|
|
||||||
CreateBoard( &board );
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case IDM_EXIT:
|
|
||||||
SendMessage( hWnd, WM_CLOSE, 0, 0);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case IDM_TIMES:
|
|
||||||
DialogBoxParam( board.hInst, "DLG_TIMES", hWnd,
|
|
||||||
TimesDlgProc, (LPARAM) &board);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case IDM_ABOUT:
|
|
||||||
{
|
|
||||||
WCHAR appname[256], other[256];
|
|
||||||
LoadStringW( board.hInst, IDS_APPNAME, appname, sizeof(appname)/sizeof(WCHAR) );
|
|
||||||
LoadStringW( board.hInst, IDS_ABOUT, other, sizeof(other)/sizeof(WCHAR) );
|
|
||||||
ShellAboutW( hWnd, appname, other,
|
|
||||||
LoadImageA( board.hInst, "WINEMINE", IMAGE_ICON, 48, 48, LR_SHARED ));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
WINE_TRACE("Unknown WM_COMMAND command message received\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return( DefWindowProc( hWnd, msg, wParam, lParam ));
|
|
||||||
}
|
|
||||||
|
|
||||||
void InitBoard( BOARD *p_board )
|
|
||||||
{
|
|
||||||
HMENU hMenu;
|
|
||||||
|
|
||||||
p_board->hMinesBMP = LoadBitmap( p_board->hInst, "mines");
|
|
||||||
p_board->hFacesBMP = LoadBitmap( p_board->hInst, "faces");
|
|
||||||
p_board->hLedsBMP = LoadBitmap( p_board->hInst, "leds");
|
|
||||||
|
|
||||||
LoadBoard( p_board );
|
|
||||||
|
|
||||||
hMenu = GetMenu( p_board->hWnd );
|
|
||||||
CheckMenuItem( hMenu, IDM_BEGINNER + (unsigned) p_board->difficulty,
|
|
||||||
MF_CHECKED );
|
|
||||||
if( p_board->IsMarkQ )
|
|
||||||
CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED );
|
|
||||||
else
|
|
||||||
CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED );
|
|
||||||
CheckLevel( p_board );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadBoard( BOARD *p_board )
|
void LoadBoard( BOARD *p_board )
|
||||||
@ -341,6 +126,26 @@ void LoadBoard( BOARD *p_board )
|
|||||||
RegCloseKey( hkey );
|
RegCloseKey( hkey );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InitBoard( BOARD *p_board )
|
||||||
|
{
|
||||||
|
HMENU hMenu;
|
||||||
|
|
||||||
|
p_board->hMinesBMP = LoadBitmap( p_board->hInst, "mines");
|
||||||
|
p_board->hFacesBMP = LoadBitmap( p_board->hInst, "faces");
|
||||||
|
p_board->hLedsBMP = LoadBitmap( p_board->hInst, "leds");
|
||||||
|
|
||||||
|
LoadBoard( p_board );
|
||||||
|
|
||||||
|
hMenu = GetMenu( p_board->hWnd );
|
||||||
|
CheckMenuItem( hMenu, IDM_BEGINNER + (unsigned) p_board->difficulty,
|
||||||
|
MF_CHECKED );
|
||||||
|
if( p_board->IsMarkQ )
|
||||||
|
CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED );
|
||||||
|
else
|
||||||
|
CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED );
|
||||||
|
CheckLevel( p_board );
|
||||||
|
}
|
||||||
|
|
||||||
void SaveBoard( BOARD *p_board )
|
void SaveBoard( BOARD *p_board )
|
||||||
{
|
{
|
||||||
HKEY hkey;
|
HKEY hkey;
|
||||||
@ -525,27 +330,6 @@ void CreateBoard( BOARD *p_board )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CheckLevel( BOARD *p_board )
|
|
||||||
{
|
|
||||||
if( p_board->rows < BEGINNER_ROWS )
|
|
||||||
p_board->rows = BEGINNER_ROWS;
|
|
||||||
|
|
||||||
if( p_board->rows > MAX_ROWS )
|
|
||||||
p_board->rows = MAX_ROWS;
|
|
||||||
|
|
||||||
if( p_board->cols < BEGINNER_COLS )
|
|
||||||
p_board->cols = BEGINNER_COLS;
|
|
||||||
|
|
||||||
if( p_board->cols > MAX_COLS )
|
|
||||||
p_board->cols = MAX_COLS;
|
|
||||||
|
|
||||||
if( p_board->mines < BEGINNER_MINES )
|
|
||||||
p_board->mines = BEGINNER_MINES;
|
|
||||||
|
|
||||||
if( p_board->mines > p_board->cols * p_board->rows - 2 )
|
|
||||||
p_board->mines = p_board->cols * p_board->rows - 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Randomly places mines everywhere except the selected box. */
|
/* Randomly places mines everywhere except the selected box. */
|
||||||
void PlaceMines ( BOARD *p_board, int selected_col, int selected_row )
|
void PlaceMines ( BOARD *p_board, int selected_col, int selected_row )
|
||||||
{
|
{
|
||||||
@ -588,20 +372,6 @@ void PlaceMines ( BOARD *p_board, int selected_col, int selected_row )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DrawMines ( HDC hdc, HDC hMemDC, BOARD *p_board )
|
|
||||||
{
|
|
||||||
HGDIOBJ hOldObj;
|
|
||||||
unsigned col, row;
|
|
||||||
hOldObj = SelectObject (hMemDC, p_board->hMinesBMP);
|
|
||||||
|
|
||||||
for( row = 1; row <= p_board->rows; row++ ) {
|
|
||||||
for( col = 1; col <= p_board->cols; col++ ) {
|
|
||||||
DrawMine( hdc, hMemDC, p_board, col, row, FALSE );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SelectObject( hMemDC, hOldObj );
|
|
||||||
}
|
|
||||||
|
|
||||||
void DrawMine( HDC hdc, HDC hMemDC, BOARD *p_board, unsigned col, unsigned row, BOOL IsPressed )
|
void DrawMine( HDC hdc, HDC hMemDC, BOARD *p_board, unsigned col, unsigned row, BOOL IsPressed )
|
||||||
{
|
{
|
||||||
MINEBMP_OFFSET offset = BOX_BMP;
|
MINEBMP_OFFSET offset = BOX_BMP;
|
||||||
@ -679,6 +449,20 @@ void DrawMine( HDC hdc, HDC hMemDC, BOARD *p_board, unsigned col, unsigned row,
|
|||||||
hMemDC, 0, offset * MINE_HEIGHT, SRCCOPY );
|
hMemDC, 0, offset * MINE_HEIGHT, SRCCOPY );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DrawMines ( HDC hdc, HDC hMemDC, BOARD *p_board )
|
||||||
|
{
|
||||||
|
HGDIOBJ hOldObj;
|
||||||
|
unsigned col, row;
|
||||||
|
hOldObj = SelectObject (hMemDC, p_board->hMinesBMP);
|
||||||
|
|
||||||
|
for( row = 1; row <= p_board->rows; row++ ) {
|
||||||
|
for( col = 1; col <= p_board->cols; col++ ) {
|
||||||
|
DrawMine( hdc, hMemDC, p_board, col, row, FALSE );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
SelectObject( hMemDC, hOldObj );
|
||||||
|
}
|
||||||
|
|
||||||
void DrawLeds( HDC hdc, HDC hMemDC, BOARD *p_board, int number, int x, int y )
|
void DrawLeds( HDC hdc, HDC hMemDC, BOARD *p_board, int number, int x, int y )
|
||||||
{
|
{
|
||||||
HGDIOBJ hOldObj;
|
HGDIOBJ hOldObj;
|
||||||
@ -761,56 +545,154 @@ void DrawBoard( HDC hdc, HDC hMemDC, PAINTSTRUCT *ps, BOARD *p_board )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void TestBoard( HWND hWnd, BOARD *p_board, int x, int y, int msg )
|
void AddFlag( BOARD *p_board, unsigned col, unsigned row )
|
||||||
{
|
{
|
||||||
POINT pt;
|
if( p_board->box[col][row].FlagType != COMPLETE ) {
|
||||||
unsigned col,row;
|
switch( p_board->box[col][row].FlagType ) {
|
||||||
|
case FLAG:
|
||||||
|
if( p_board->IsMarkQ )
|
||||||
|
p_board->box[col][row].FlagType = QUESTION;
|
||||||
|
else
|
||||||
|
p_board->box[col][row].FlagType = NORMAL;
|
||||||
|
p_board->num_flags--;
|
||||||
|
break;
|
||||||
|
|
||||||
pt.x = x;
|
case QUESTION:
|
||||||
pt.y = y;
|
p_board->box[col][row].FlagType = NORMAL;
|
||||||
|
break;
|
||||||
|
|
||||||
if( PtInRect( &p_board->mines_rect, pt ) && p_board->status != GAMEOVER
|
default:
|
||||||
&& p_board->status != WON )
|
p_board->box[col][row].FlagType = FLAG;
|
||||||
TestMines( p_board, pt, msg );
|
p_board->num_flags++;
|
||||||
else {
|
|
||||||
UnpressBoxes( p_board,
|
|
||||||
p_board->press.x,
|
|
||||||
p_board->press.y );
|
|
||||||
p_board->press.x = 0;
|
|
||||||
p_board->press.y = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( p_board->boxes_left == 0 ) {
|
|
||||||
p_board->status = WON;
|
|
||||||
|
|
||||||
if (p_board->num_flags < p_board->mines) {
|
|
||||||
for( row = 1; row <= p_board->rows; row++ ) {
|
|
||||||
for( col = 1; col <= p_board->cols; col++ ) {
|
|
||||||
if (p_board->box[col][row].IsMine && p_board->box[col][row].FlagType != FLAG)
|
|
||||||
p_board->box[col][row].FlagType = FLAG;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
p_board->num_flags = p_board->mines;
|
|
||||||
|
|
||||||
RedrawWindow( p_board->hWnd, NULL, 0,
|
|
||||||
RDW_INVALIDATE | RDW_UPDATENOW );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( p_board->difficulty != CUSTOM &&
|
|
||||||
p_board->time < p_board->best_time[p_board->difficulty] ) {
|
|
||||||
p_board->best_time[p_board->difficulty] = p_board->time;
|
|
||||||
|
|
||||||
DialogBoxParam( p_board->hInst, "DLG_CONGRATS", hWnd,
|
|
||||||
CongratsDlgProc, (LPARAM) p_board);
|
|
||||||
|
|
||||||
DialogBoxParam( p_board->hInst, "DLG_TIMES", hWnd,
|
|
||||||
TimesDlgProc, (LPARAM) p_board);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TestFace( p_board, pt, msg );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UnpressBox( BOARD *p_board, unsigned col, unsigned row )
|
||||||
|
{
|
||||||
|
HDC hdc;
|
||||||
|
HGDIOBJ hOldObj;
|
||||||
|
HDC hMemDC;
|
||||||
|
|
||||||
|
hdc = GetDC( p_board->hWnd );
|
||||||
|
hMemDC = CreateCompatibleDC( hdc );
|
||||||
|
hOldObj = SelectObject( hMemDC, p_board->hMinesBMP );
|
||||||
|
|
||||||
|
DrawMine( hdc, hMemDC, p_board, col, row, FALSE );
|
||||||
|
|
||||||
|
SelectObject( hMemDC, hOldObj );
|
||||||
|
DeleteDC( hMemDC );
|
||||||
|
ReleaseDC( p_board->hWnd, hdc );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void UnpressBoxes( BOARD *p_board, unsigned col, unsigned row )
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
for( i = -1; i <= 1; i++ )
|
||||||
|
for( j = -1; j <= 1; j++ ) {
|
||||||
|
UnpressBox( p_board, col + i, row + j );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PressBox( BOARD *p_board, unsigned col, unsigned row )
|
||||||
|
{
|
||||||
|
HDC hdc;
|
||||||
|
HGDIOBJ hOldObj;
|
||||||
|
HDC hMemDC;
|
||||||
|
|
||||||
|
hdc = GetDC( p_board->hWnd );
|
||||||
|
hMemDC = CreateCompatibleDC( hdc );
|
||||||
|
hOldObj = SelectObject (hMemDC, p_board->hMinesBMP);
|
||||||
|
|
||||||
|
DrawMine( hdc, hMemDC, p_board, col, row, TRUE );
|
||||||
|
|
||||||
|
SelectObject( hMemDC, hOldObj );
|
||||||
|
DeleteDC( hMemDC );
|
||||||
|
ReleaseDC( p_board->hWnd, hdc );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PressBoxes( BOARD *p_board, unsigned col, unsigned row )
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
for( i = -1; i <= 1; i++ )
|
||||||
|
for( j = -1; j <= 1; j++ ) {
|
||||||
|
p_board->box[col + i][row + j].IsPressed = TRUE;
|
||||||
|
PressBox( p_board, col + i, row + j );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i = -1; i <= 1; i++ )
|
||||||
|
for( j = -1; j <= 1; j++ ) {
|
||||||
|
if( !p_board->box[p_board->press.x + i][p_board->press.y + j].IsPressed )
|
||||||
|
UnpressBox( p_board, p_board->press.x + i, p_board->press.y + j );
|
||||||
|
}
|
||||||
|
|
||||||
|
for( i = -1; i <= 1; i++ )
|
||||||
|
for( j = -1; j <= 1; j++ ) {
|
||||||
|
p_board->box[col + i][row + j].IsPressed = FALSE;
|
||||||
|
PressBox( p_board, col + i, row + j );
|
||||||
|
}
|
||||||
|
|
||||||
|
p_board->press.x = col;
|
||||||
|
p_board->press.y = row;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CompleteBox( BOARD *p_board, unsigned col, unsigned row )
|
||||||
|
{
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
if( p_board->box[col][row].FlagType != COMPLETE &&
|
||||||
|
p_board->box[col][row].FlagType != FLAG &&
|
||||||
|
col > 0 && col < p_board->cols + 1 &&
|
||||||
|
row > 0 && row < p_board->rows + 1 ) {
|
||||||
|
p_board->box[col][row].FlagType = COMPLETE;
|
||||||
|
|
||||||
|
if( p_board->box[col][row].IsMine ) {
|
||||||
|
p_board->face_bmp = DEAD_BMP;
|
||||||
|
p_board->status = GAMEOVER;
|
||||||
|
}
|
||||||
|
else if( p_board->status != GAMEOVER )
|
||||||
|
p_board->boxes_left--;
|
||||||
|
|
||||||
|
if( p_board->box[col][row].NumMines == 0 )
|
||||||
|
{
|
||||||
|
for( i = -1; i <= 1; i++ )
|
||||||
|
for( j = -1; j <= 1; j++ )
|
||||||
|
CompleteBox( p_board, col + i, row + j );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void CompleteBoxes( BOARD *p_board, unsigned col, unsigned row )
|
||||||
|
{
|
||||||
|
unsigned numFlags = 0;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
if( p_board->box[col][row].FlagType == COMPLETE ) {
|
||||||
|
for( i = -1; i <= 1; i++ )
|
||||||
|
for( j = -1; j <= 1; j++ ) {
|
||||||
|
if( p_board->box[col+i][row+j].FlagType == FLAG )
|
||||||
|
numFlags++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( numFlags == p_board->box[col][row].NumMines ) {
|
||||||
|
for( i = -1; i <= 1; i++ )
|
||||||
|
for( j = -1; j <= 1; j++ ) {
|
||||||
|
if( p_board->box[col+i][row+j].FlagType != FLAG )
|
||||||
|
CompleteBox( p_board, col+i, row+j );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TestMines( BOARD *p_board, POINT pt, int msg )
|
void TestMines( BOARD *p_board, POINT pt, int msg )
|
||||||
{
|
{
|
||||||
BOOL draw = TRUE;
|
BOOL draw = TRUE;
|
||||||
@ -901,149 +783,269 @@ void TestFace( BOARD *p_board, POINT pt, int msg )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CompleteBox( BOARD *p_board, unsigned col, unsigned row )
|
void TestBoard( HWND hWnd, BOARD *p_board, int x, int y, int msg )
|
||||||
{
|
{
|
||||||
int i, j;
|
POINT pt;
|
||||||
|
unsigned col,row;
|
||||||
|
|
||||||
if( p_board->box[col][row].FlagType != COMPLETE &&
|
pt.x = x;
|
||||||
p_board->box[col][row].FlagType != FLAG &&
|
pt.y = y;
|
||||||
col > 0 && col < p_board->cols + 1 &&
|
|
||||||
row > 0 && row < p_board->rows + 1 ) {
|
|
||||||
p_board->box[col][row].FlagType = COMPLETE;
|
|
||||||
|
|
||||||
if( p_board->box[col][row].IsMine ) {
|
if( PtInRect( &p_board->mines_rect, pt ) && p_board->status != GAMEOVER
|
||||||
p_board->face_bmp = DEAD_BMP;
|
&& p_board->status != WON )
|
||||||
p_board->status = GAMEOVER;
|
TestMines( p_board, pt, msg );
|
||||||
|
else {
|
||||||
|
UnpressBoxes( p_board,
|
||||||
|
p_board->press.x,
|
||||||
|
p_board->press.y );
|
||||||
|
p_board->press.x = 0;
|
||||||
|
p_board->press.y = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( p_board->boxes_left == 0 ) {
|
||||||
|
p_board->status = WON;
|
||||||
|
|
||||||
|
if (p_board->num_flags < p_board->mines) {
|
||||||
|
for( row = 1; row <= p_board->rows; row++ ) {
|
||||||
|
for( col = 1; col <= p_board->cols; col++ ) {
|
||||||
|
if (p_board->box[col][row].IsMine && p_board->box[col][row].FlagType != FLAG)
|
||||||
|
p_board->box[col][row].FlagType = FLAG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
p_board->num_flags = p_board->mines;
|
||||||
|
|
||||||
|
RedrawWindow( p_board->hWnd, NULL, 0,
|
||||||
|
RDW_INVALIDATE | RDW_UPDATENOW );
|
||||||
}
|
}
|
||||||
else if( p_board->status != GAMEOVER )
|
|
||||||
p_board->boxes_left--;
|
|
||||||
|
|
||||||
if( p_board->box[col][row].NumMines == 0 )
|
if( p_board->difficulty != CUSTOM &&
|
||||||
{
|
p_board->time < p_board->best_time[p_board->difficulty] ) {
|
||||||
for( i = -1; i <= 1; i++ )
|
p_board->best_time[p_board->difficulty] = p_board->time;
|
||||||
for( j = -1; j <= 1; j++ )
|
|
||||||
CompleteBox( p_board, col + i, row + j );
|
DialogBoxParam( p_board->hInst, "DLG_CONGRATS", hWnd,
|
||||||
|
CongratsDlgProc, (LPARAM) p_board);
|
||||||
|
|
||||||
|
DialogBoxParam( p_board->hInst, "DLG_TIMES", hWnd,
|
||||||
|
TimesDlgProc, (LPARAM) p_board);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
TestFace( p_board, pt, msg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void CompleteBoxes( BOARD *p_board, unsigned col, unsigned row )
|
LRESULT WINAPI MainProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
|
||||||
unsigned numFlags = 0;
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
if( p_board->box[col][row].FlagType == COMPLETE ) {
|
|
||||||
for( i = -1; i <= 1; i++ )
|
|
||||||
for( j = -1; j <= 1; j++ ) {
|
|
||||||
if( p_board->box[col+i][row+j].FlagType == FLAG )
|
|
||||||
numFlags++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( numFlags == p_board->box[col][row].NumMines ) {
|
|
||||||
for( i = -1; i <= 1; i++ )
|
|
||||||
for( j = -1; j <= 1; j++ ) {
|
|
||||||
if( p_board->box[col+i][row+j].FlagType != FLAG )
|
|
||||||
CompleteBox( p_board, col+i, row+j );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void AddFlag( BOARD *p_board, unsigned col, unsigned row )
|
|
||||||
{
|
|
||||||
if( p_board->box[col][row].FlagType != COMPLETE ) {
|
|
||||||
switch( p_board->box[col][row].FlagType ) {
|
|
||||||
case FLAG:
|
|
||||||
if( p_board->IsMarkQ )
|
|
||||||
p_board->box[col][row].FlagType = QUESTION;
|
|
||||||
else
|
|
||||||
p_board->box[col][row].FlagType = NORMAL;
|
|
||||||
p_board->num_flags--;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case QUESTION:
|
|
||||||
p_board->box[col][row].FlagType = NORMAL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
p_board->box[col][row].FlagType = FLAG;
|
|
||||||
p_board->num_flags++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void PressBox( BOARD *p_board, unsigned col, unsigned row )
|
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
HGDIOBJ hOldObj;
|
PAINTSTRUCT ps;
|
||||||
HDC hMemDC;
|
HMENU hMenu;
|
||||||
|
static BOARD board;
|
||||||
|
|
||||||
hdc = GetDC( p_board->hWnd );
|
switch( msg ) {
|
||||||
hMemDC = CreateCompatibleDC( hdc );
|
case WM_CREATE:
|
||||||
hOldObj = SelectObject (hMemDC, p_board->hMinesBMP);
|
board.hInst = ((LPCREATESTRUCT) lParam)->hInstance;
|
||||||
|
board.hWnd = hWnd;
|
||||||
|
InitBoard( &board );
|
||||||
|
CreateBoard( &board );
|
||||||
|
return 0;
|
||||||
|
|
||||||
DrawMine( hdc, hMemDC, p_board, col, row, TRUE );
|
case WM_PAINT:
|
||||||
|
{
|
||||||
|
HDC hMemDC;
|
||||||
|
|
||||||
SelectObject( hMemDC, hOldObj );
|
WINE_TRACE("WM_PAINT\n");
|
||||||
DeleteDC( hMemDC );
|
hdc = BeginPaint( hWnd, &ps );
|
||||||
ReleaseDC( p_board->hWnd, hdc );
|
hMemDC = CreateCompatibleDC( hdc );
|
||||||
}
|
|
||||||
|
|
||||||
|
DrawBoard( hdc, hMemDC, &ps, &board );
|
||||||
|
|
||||||
void PressBoxes( BOARD *p_board, unsigned col, unsigned row )
|
DeleteDC( hMemDC );
|
||||||
{
|
EndPaint( hWnd, &ps );
|
||||||
int i, j;
|
|
||||||
|
|
||||||
for( i = -1; i <= 1; i++ )
|
return 0;
|
||||||
for( j = -1; j <= 1; j++ ) {
|
|
||||||
p_board->box[col + i][row + j].IsPressed = TRUE;
|
|
||||||
PressBox( p_board, col + i, row + j );
|
|
||||||
}
|
|
||||||
|
|
||||||
for( i = -1; i <= 1; i++ )
|
|
||||||
for( j = -1; j <= 1; j++ ) {
|
|
||||||
if( !p_board->box[p_board->press.x + i][p_board->press.y + j].IsPressed )
|
|
||||||
UnpressBox( p_board, p_board->press.x + i, p_board->press.y + j );
|
|
||||||
}
|
|
||||||
|
|
||||||
for( i = -1; i <= 1; i++ )
|
|
||||||
for( j = -1; j <= 1; j++ ) {
|
|
||||||
p_board->box[col + i][row + j].IsPressed = FALSE;
|
|
||||||
PressBox( p_board, col + i, row + j );
|
|
||||||
}
|
|
||||||
|
|
||||||
p_board->press.x = col;
|
|
||||||
p_board->press.y = row;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void UnpressBox( BOARD *p_board, unsigned col, unsigned row )
|
|
||||||
{
|
|
||||||
HDC hdc;
|
|
||||||
HGDIOBJ hOldObj;
|
|
||||||
HDC hMemDC;
|
|
||||||
|
|
||||||
hdc = GetDC( p_board->hWnd );
|
|
||||||
hMemDC = CreateCompatibleDC( hdc );
|
|
||||||
hOldObj = SelectObject( hMemDC, p_board->hMinesBMP );
|
|
||||||
|
|
||||||
DrawMine( hdc, hMemDC, p_board, col, row, FALSE );
|
|
||||||
|
|
||||||
SelectObject( hMemDC, hOldObj );
|
|
||||||
DeleteDC( hMemDC );
|
|
||||||
ReleaseDC( p_board->hWnd, hdc );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void UnpressBoxes( BOARD *p_board, unsigned col, unsigned row )
|
|
||||||
{
|
|
||||||
int i, j;
|
|
||||||
|
|
||||||
for( i = -1; i <= 1; i++ )
|
|
||||||
for( j = -1; j <= 1; j++ ) {
|
|
||||||
UnpressBox( p_board, col + i, row + j );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case WM_MOVE:
|
||||||
|
WINE_TRACE("WM_MOVE\n");
|
||||||
|
board.pos.x = (short)LOWORD(lParam);
|
||||||
|
board.pos.y = (short)HIWORD(lParam);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_DESTROY:
|
||||||
|
SaveBoard( &board );
|
||||||
|
DestroyBoard( &board );
|
||||||
|
PostQuitMessage( 0 );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_TIMER:
|
||||||
|
if( board.status == PLAYING ) {
|
||||||
|
board.time++;
|
||||||
|
RedrawWindow( hWnd, &board.timer_rect, 0,
|
||||||
|
RDW_INVALIDATE | RDW_UPDATENOW );
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
WINE_TRACE("WM_LBUTTONDOWN\n");
|
||||||
|
if( wParam & MK_RBUTTON )
|
||||||
|
msg = WM_MBUTTONDOWN;
|
||||||
|
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
||||||
|
SetCapture( hWnd );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_LBUTTONUP:
|
||||||
|
WINE_TRACE("WM_LBUTTONUP\n");
|
||||||
|
if( wParam & MK_RBUTTON )
|
||||||
|
msg = WM_MBUTTONUP;
|
||||||
|
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
||||||
|
ReleaseCapture();
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_RBUTTONDOWN:
|
||||||
|
WINE_TRACE("WM_RBUTTONDOWN\n");
|
||||||
|
if( wParam & MK_LBUTTON ) {
|
||||||
|
board.press.x = 0;
|
||||||
|
board.press.y = 0;
|
||||||
|
msg = WM_MBUTTONDOWN;
|
||||||
|
}
|
||||||
|
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_RBUTTONUP:
|
||||||
|
WINE_TRACE("WM_RBUTTONUP\n");
|
||||||
|
if( wParam & MK_LBUTTON )
|
||||||
|
msg = WM_MBUTTONUP;
|
||||||
|
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
WINE_TRACE("WM_MBUTTONDOWN\n");
|
||||||
|
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_MBUTTONUP:
|
||||||
|
WINE_TRACE("WM_MBUTTONUP\n");
|
||||||
|
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
{
|
||||||
|
if( wParam & MK_MBUTTON ) {
|
||||||
|
msg = WM_MBUTTONDOWN;
|
||||||
|
}
|
||||||
|
else if( wParam & MK_LBUTTON ) {
|
||||||
|
msg = WM_LBUTTONDOWN;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
TestBoard( hWnd, &board, (short)LOWORD(lParam), (short)HIWORD(lParam), msg );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch(LOWORD(wParam)) {
|
||||||
|
case IDM_NEW:
|
||||||
|
CreateBoard( &board );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case IDM_MARKQ:
|
||||||
|
hMenu = GetMenu( hWnd );
|
||||||
|
board.IsMarkQ = !board.IsMarkQ;
|
||||||
|
if( board.IsMarkQ )
|
||||||
|
CheckMenuItem( hMenu, IDM_MARKQ, MF_CHECKED );
|
||||||
|
else
|
||||||
|
CheckMenuItem( hMenu, IDM_MARKQ, MF_UNCHECKED );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case IDM_BEGINNER:
|
||||||
|
SetDifficulty( &board, BEGINNER );
|
||||||
|
CreateBoard( &board );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case IDM_ADVANCED:
|
||||||
|
SetDifficulty( &board, ADVANCED );
|
||||||
|
CreateBoard( &board );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case IDM_EXPERT:
|
||||||
|
SetDifficulty( &board, EXPERT );
|
||||||
|
CreateBoard( &board );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case IDM_CUSTOM:
|
||||||
|
SetDifficulty( &board, CUSTOM );
|
||||||
|
CreateBoard( &board );
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case IDM_EXIT:
|
||||||
|
SendMessage( hWnd, WM_CLOSE, 0, 0);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case IDM_TIMES:
|
||||||
|
DialogBoxParam( board.hInst, "DLG_TIMES", hWnd,
|
||||||
|
TimesDlgProc, (LPARAM) &board);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case IDM_ABOUT:
|
||||||
|
{
|
||||||
|
WCHAR appname[256], other[256];
|
||||||
|
LoadStringW( board.hInst, IDS_APPNAME, appname, sizeof(appname)/sizeof(WCHAR) );
|
||||||
|
LoadStringW( board.hInst, IDS_ABOUT, other, sizeof(other)/sizeof(WCHAR) );
|
||||||
|
ShellAboutW( hWnd, appname, other,
|
||||||
|
LoadImageA( board.hInst, "WINEMINE", IMAGE_ICON, 48, 48, LR_SHARED ));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
WINE_TRACE("Unknown WM_COMMAND command message received\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return( DefWindowProc( hWnd, msg, wParam, lParam ));
|
||||||
|
}
|
||||||
|
|
||||||
|
int WINAPI WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdline, int cmdshow )
|
||||||
|
{
|
||||||
|
MSG msg;
|
||||||
|
WNDCLASS wc;
|
||||||
|
HWND hWnd;
|
||||||
|
HACCEL haccel;
|
||||||
|
char appname[20];
|
||||||
|
|
||||||
|
LoadString( hInst, IDS_APPNAME, appname, sizeof(appname));
|
||||||
|
|
||||||
|
wc.style = 0;
|
||||||
|
wc.lpfnWndProc = MainProc;
|
||||||
|
wc.cbClsExtra = 0;
|
||||||
|
wc.cbWndExtra = 0;
|
||||||
|
wc.hInstance = hInst;
|
||||||
|
wc.hIcon = LoadIcon( hInst, "WINEMINE" );
|
||||||
|
wc.hCursor = LoadCursor( 0, IDI_APPLICATION );
|
||||||
|
wc.hbrBackground = (HBRUSH) GetStockObject( BLACK_BRUSH );
|
||||||
|
wc.lpszMenuName = "MENU_WINEMINE";
|
||||||
|
wc.lpszClassName = appname;
|
||||||
|
|
||||||
|
if (!RegisterClass(&wc)) ExitProcess(1);
|
||||||
|
hWnd = CreateWindow( appname, appname,
|
||||||
|
wnd_style,
|
||||||
|
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
|
||||||
|
0, 0, hInst, NULL );
|
||||||
|
|
||||||
|
if (!hWnd) ExitProcess(1);
|
||||||
|
|
||||||
|
ShowWindow( hWnd, cmdshow );
|
||||||
|
UpdateWindow( hWnd );
|
||||||
|
|
||||||
|
haccel = LoadAccelerators( hInst, MAKEINTRESOURCE(IDA_WINEMINE) );
|
||||||
|
SetTimer( hWnd, ID_TIMER, 1000, NULL );
|
||||||
|
|
||||||
|
while( GetMessage(&msg, 0, 0, 0) ) {
|
||||||
|
if (!TranslateAccelerator( hWnd, haccel, &msg ))
|
||||||
|
TranslateMessage( &msg );
|
||||||
|
|
||||||
|
DispatchMessage( &msg );
|
||||||
|
}
|
||||||
|
return msg.wParam;
|
||||||
}
|
}
|
||||||
|
@ -120,58 +120,8 @@ typedef struct tagBOARD
|
|||||||
|
|
||||||
} BOARD;
|
} 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 CheckLevel( BOARD *p_board );
|
||||||
|
|
||||||
void CreateBoard( BOARD *p_board );
|
|
||||||
|
|
||||||
void PlaceMines ( BOARD *p_board, int selected_col, int selected_row );
|
|
||||||
|
|
||||||
void TestBoard( HWND hWnd, BOARD *p_board, int x, int 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);
|
|
||||||
|
|
||||||
INT_PTR CALLBACK CustomDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
INT_PTR CALLBACK CustomDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||||
|
|
||||||
INT_PTR CALLBACK CongratsDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
INT_PTR CALLBACK CongratsDlgProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam );
|
||||||
|
Loading…
Reference in New Issue
Block a user