int main(int argc, char **argv) { // initialise a random number generator - used for // generating "random" data srand((unsigned)time(NULL)); printf("building board\n"); SudokuBoard* myBoard = createGameBoard(); printf("destroying board\n"); DestroyBoard(myBoard); return 0; }
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 DestroyGame(Game* game) { if(game == NULL) return; DestroyBoard(game->board); free(game); }