?? same.c
字號:
static void fill_board (void){ int x, y; for (x = 0; x < STONE_COLS; x++) for (y = 0; y < STONE_LINES; y++){ field [x][y].color = 1 + (rand () % ncolors); field [x][y].tag = 0; field [x][y].frame = sync_stones ? 0 : (rand () % nstones); }}static void new_game (HWND hwnd){ fill_board (); set_score (0); InvalidateRect (hwnd, &rcBoard, FALSE);}static void configure_sync (const char *fname){ if (strstr (fname, "-sync_same.gif")) sync_stones = 1; else sync_stones = 0;}static void load_scenario (const char *fname){ UnloadBitmap (&stones); if (LoadBitmap (HDC_SCREEN, &stones, fname)) { printf ("Loading scenario failed: %s.\n", fname); exit (1); } configure_sync (fname); nstones = stones.bmWidth / STONE_SIZE; ncolors = 3;}static void create_same_board (const char *fname){ load_scenario (fname); fill_board ();}static void sel_scenario (HWND hwnd, int sel){ MENUBUTTONITEM mbi; mbi.which = MB_WHICH_TEXT; if (sel != cur_sel_scen) { SendMessage (hwnd_menu, MBM_GETITEMDATA, sel, (LPARAM)&mbi); load_scenario (mbi.text); new_game (hwnd); cur_sel_scen = sel; }}static int fill_menu (HWND hwnd_menu){ int i = 0; MENUBUTTONITEM mbi; struct dirent *e; //char *dname = "res/"; char *dname = "sameres/"; DIR *dir; char buff [30]; dir = opendir (dname); fprintf(stderr, "fill_menu 1\n"); if (!dir) return -1; fprintf(stderr, "fill_menu 2\n"); while ((e = readdir (dir)) != NULL){ //if (!strstr (e->d_name, "_same.gif")) { if (!strstr (e->d_name, ".gif")) { continue; } //strcpy (buff, "res/"); strcpy (buff, "sameres/"); strcat (buff, e->d_name); mbi.text = buff; mbi.bmp = NULL; mbi.data = 0; SendMessage (hwnd_menu, MBM_ADDITEM, -1, (LPARAM) &mbi); i ++; } closedir (dir); return i;}static HMENU createpmenugame (void){ HMENU hmnu; MENUITEMINFO mii; memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 0; mii.typedata = (DWORD)pgame_menu[0]; hmnu = CreatePopupMenu (&mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_NEW; mii.typedata = (DWORD)pgame_menu[1]; InsertMenuItem(hmnu, 0, TRUE, &mii);#if 0 mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_SCORES; mii.typedata = (DWORD)"Scores..."; InsertMenuItem(hmnu, 1, TRUE, &mii);#endif mii.type = MFT_STRING; mii.state = 0; mii.id = IDM_EXIT; mii.typedata = (DWORD)pgame_menu[2]; InsertMenuItem(hmnu, 1, TRUE, &mii); return hmnu;}#if 0static HMENU createpmenusettings (void){ HMENU hmnu; MENUITEMINFO mii; memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 0; mii.typedata = (DWORD)"Settings"; hmnu = CreatePopupMenu (&mii); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_PREF; mii.typedata = (DWORD)"Preferences..."; InsertMenuItem(hmnu, 0, TRUE, &mii); return hmnu;}#endifstatic HMENU createpmenuabout (void){ HMENU hmnu; MENUITEMINFO mii; memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 0; mii.typedata = (DWORD)pabout_menu[0]; hmnu = CreatePopupMenu (&mii); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING ; mii.state = 0; mii.id = IDM_ABOUT; mii.typedata = (DWORD)pabout_menu[1]; InsertMenuItem(hmnu, 0, TRUE, &mii); return hmnu;}static HMENU createmenu (void){ HMENU hmnu; MENUITEMINFO mii; hmnu = CreateMenu(); memset (&mii, 0, sizeof(MENUITEMINFO)); mii.type = MFT_STRING; mii.id = 100; mii.typedata = (DWORD)pmain_menu[0]; mii.hsubmenu = createpmenugame (); InsertMenuItem(hmnu, 0, TRUE, &mii);#if 0 mii.type = MFT_STRING; mii.id = 110; mii.typedata = (DWORD)"Settings"; mii.hsubmenu = createpmenusettings (); InsertMenuItem(hmnu, 1, TRUE, &mii);#endif mii.type = MFT_STRING; mii.id = 120; mii.typedata = (DWORD)pmain_menu[1]; mii.hsubmenu = createpmenuabout (); InsertMenuItem(hmnu, 1, TRUE, &mii); return hmnu;}int SameGameProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam){ switch (message) { case MSG_CREATE: { RECT rcClient; MENUBUTTONITEM mbi; GetClientRect (hWnd, &rcClient); CreateWindow (CTRL_STATIC, pmessagebox[5], WS_CHILD | WS_VISIBLE | SS_RIGHT, 0, 0, rcClient.bottom - GetSysCharHeight () - 4, 100, GetSysCharHeight () + 4, hWnd, 0); hwnd_menu = CreateWindow ("menubutton", "<scenario>", WS_CHILD | WS_VISIBLE, 100, 100, rcClient.bottom - GetSysCharHeight () - 4, 100, GetSysCharHeight () + 4, hWnd, 0); if (fill_menu (hwnd_menu) <= 0) { fprintf (stderr, "Can not find scenario.\n"); return -1; } SendMessage (hwnd_menu, MBM_SETCURITEM, 0, 0); hwnd_score = CreateWindow (CTRL_STATIC, pmessagebox[6], WS_CHILD | WS_VISIBLE | SS_RIGHT, 0, 200, rcClient.bottom - GetSysCharHeight () - 4, rcClient.right - 200, GetSysCharHeight () + 4, hWnd, 0); mbi.which = MB_WHICH_TEXT; SendMessage (hwnd_menu, MBM_GETITEMDATA, 2, (LPARAM)&mbi); create_same_board (mbi.text); new_game (hWnd); } break; case MSG_COMMAND: if (LOWORD(wParam) == 100 && HIWORD (wParam) == MBN_CHANGED) { int sel = SendMessage (hwnd_menu, MBM_GETCURITEM, 0, 0); if (sel >= 0) sel_scenario (hWnd, sel); break; } switch (wParam) { case IDM_NEW: new_game (hWnd); break; case IDM_SCORES: break; case IDM_EXIT: SendMessage (hWnd, MSG_CLOSE, 0, 0L); break; case IDM_PREF: break; case IDM_ABOUT: MessageBox (hWnd, pmessagebox[7], pmessagebox[1], MB_OK | MB_ICONINFORMATION); break; } break; case MSG_ERASEBKGND: return 0; case MSG_PAINT: { HDC hdc; hdc = BeginPaint (hWnd); paint (hWnd, hdc); EndPaint (hWnd, hdc); return 0; } case MSG_LBUTTONDOWN: { int x = LOWORD (lParam); int y = HIWORD (lParam); kill_balls (hWnd, x / STONE_SIZE, y / STONE_SIZE); old_x = -1; old_y = -1; } break; case MSG_MOUSEMOVE: { int x = LOWORD (lParam); int y = HIWORD (lParam); if (PtInRect (&rcBoard, x, y)) mark_balls (hWnd, x / STONE_SIZE, y / STONE_SIZE); else unmark_balls (hWnd); } break; case MSG_NCMOUSEMOVE: if (wParam != HT_CLIENT) unmark_balls (hWnd); break; case MSG_MOUSEMOVEIN: if (!wParam) unmark_balls (hWnd); break; case MSG_TIMER: if (wParam == ID_TIMER) { HDC hdc = GetClientDC (hWnd); move_tagged_balls (hdc); ReleaseDC (hdc); } break; case MSG_SIZECHANGING: { const RECT* rc = (const RECT*)wParam; RECT* rrc = (RECT*)lParam; rrc->left = rc->left; rrc->top = rc->top; rrc->right = rc->left + ClientWidthToWindowWidth (WS_CAPTION | WS_BORDER, STONE_COLS * STONE_SIZE); rrc->bottom = rc->top + GetSysCharHeight () + 4 + ClientHeightToWindowHeight (WS_CAPTION | WS_BORDER, STONE_LINES * STONE_SIZE, TRUE); } return 0; case MSG_CLOSE: if (MessageBox (hWnd, pmessagebox[0], pmessagebox[1], MB_YESNO | MB_ICONQUESTION | MB_BASEDONPARENT) != IDYES) return 0; DestroyAllControls (hWnd); DestroyMainWindow (hWnd); PostQuitMessage (hWnd); return 0; } return DefaultMainWinProc (hWnd, message, wParam, lParam);}static void InitCreateInfo (PMAINWINCREATE pCreateInfo){ rcBoard.left = 0; rcBoard.top = 0; rcBoard.right = STONE_COLS * STONE_SIZE; rcBoard.bottom = STONE_LINES * STONE_SIZE; pCreateInfo->dwStyle = WS_CAPTION | WS_BORDER| WS_DLGFRAME; pCreateInfo->dwExStyle = WS_EX_NONE; if(strcasecmp(lang,"en")==0){ pCreateInfo->spCaption = "Same"; } else if(strcasecmp(lang,"zh_cn")==0){ pCreateInfo->spCaption = "同色球"; } else if(strcasecmp(lang,"zh_tw")==0){ pCreateInfo->spCaption = "同色球"; } pCreateInfo->hMenu = createmenu (); pCreateInfo->hCursor = GetSystemCursor (IDC_ARROW); pCreateInfo->hIcon = 0; pCreateInfo->MainWindowProc = SameGameProc; pCreateInfo->lx =512 -ClientWidthToWindowWidth (WS_CAPTION | WS_BORDER, STONE_COLS * STONE_SIZE)/2; pCreateInfo->ty = 384 -(ClientHeightToWindowHeight (WS_CAPTION | WS_BORDER, STONE_LINES * STONE_SIZE, TRUE)+GetSysCharHeight () + 4)/2; pCreateInfo->rx = pCreateInfo->lx + \ ClientWidthToWindowWidth (WS_CAPTION | WS_BORDER, STONE_COLS * STONE_SIZE); pCreateInfo->by = pCreateInfo->ty + \ ClientHeightToWindowHeight (WS_CAPTION | WS_BORDER, STONE_LINES * STONE_SIZE, TRUE); pCreateInfo->by += GetSysCharHeight () + 4; pCreateInfo->iBkColor = PIXEL_black; pCreateInfo->dwAddData = 0; pCreateInfo->hHosting = HWND_DESKTOP;}int MiniGUIMain (int argc, const char *argv []){ HWND hMainWnd; MSG Msg; MAINWINCREATE CreateInfo;#if defined(_LITE_VERSION) && !(_STAND_ALONE) int i; const char* layer = NULL; for (i = 1; i < argc; i++) { if (strcmp (argv[i], "-layer") == 0) { layer = argv[i + 1]; //break; } else if( strcmp( argv[i], "-lang") == 0) lang = argv[i+1]; } //GetLayerInfo (layer, NULL, NULL, NULL); if (JoinLayer (layer,argv[0], 0, 0) == INV_LAYER_HANDLE) { printf ("JoinLayer: invalid layer handle.\n"); exit (1); }#endif if(strcasecmp(lang,"zh_cn")==0){ printf("\nlanguage=%s",lang); pmain_menu =main_menu_cn; pgame_menu =game_menu_cn; pabout_menu =about_menu_cn; pmessagebox =messagebox_cn; phelpmessage =main_help_cn; printf("\n2language=%s",lang); } else if(strcasecmp(lang,"zh_tw")==0){ pmain_menu =main_menu_tw; pgame_menu =game_menu_tw; pabout_menu =about_menu_tw; pmessagebox =messagebox_tw; phelpmessage =main_help_tw; } else if(strcasecmp(lang,"en")==0){ pmain_menu =main_menu_en; pgame_menu =game_menu_en; pabout_menu =about_menu_en; phelpmessage =main_help_en; pmessagebox =messagebox_en; } init_same(); InitCreateInfo (&CreateInfo); hMainWnd = CreateMainWindow (&CreateInfo); if (hMainWnd == HWND_INVALID) return -1; srand (time (NULL)); ShowWindow (hMainWnd, SW_SHOWNORMAL); while( GetMessage (&Msg, hMainWnd) ) { TranslateMessage (&Msg); DispatchMessage (&Msg); } release_same(); MainWindowThreadCleanup (hMainWnd); return 0;}#ifndef _LITE_VERSION#include <minigui/dti.c>#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -