⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 same.c

📁 minigui 1.6.10 游戏例子 能对编程有很大启发
💻 C
📖 第 1 页 / 共 2 页
字号:
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 + -