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

📄 mine.c

📁 开放源码实时操作系统源码.
💻 C
📖 第 1 页 / 共 3 页
字号:
    mii.hsubmenu    = createpmenustart();

    InsertMenuItem(hmnu, 0, TRUE, &mii);

    mii.type        = MFT_STRING;
    mii.id          = 110;
    mii.typedata    = (DWORD)"Level";
    mii.hsubmenu    = createpmenulevel();
    InsertMenuItem(hmnu, 1, TRUE, &mii);
    
    mii.type        = MFT_STRING;
    mii.id          = 120;
    mii.typedata    = (DWORD)"About";
    mii.hsubmenu    = createpmenuabout();
    InsertMenuItem(hmnu, 2, TRUE, &mii);
                   
    return hmnu;
}
#endif

void BothButtonDownProc(HWND hWnd,int adrx,int adry)
{
    int test_open = 0; 
    int i = 1;
    int adrx1 = 0, adry1 = 0;
    int flag_opened = 1;

    if (!bom[adrx][adry].test)
    return;
    if (!bom[adrx][adry].value)
    return;
    if (bom[adrx][adry].hit)
    return;
    while (i <= 8)
    {
       switch (i)
       {
        case 1:
           adrx1 = adrx-1;
           adry1 = adry;
        break;
                        
        case 2:
           adrx1 = adrx-1;
           adry1 = adry-1;
        break;

        case 3:
           adrx1 = adrx-1;
           adry1 = adry+1;
        break;
        
        case 4:
           adrx1 = adrx;
           adry1 = adry-1;
        break;
        
        case 5:
            adrx1 = adrx;
            adry1 = adry+1;
        break;
        
        case 6:
            adrx1 = adrx+1;
            adry1 = adry; 
        break; 
        
        case 7:
            adrx1 = adrx+1;
            adry1 = adry+1;
        break; 
        
        case 8:
            adrx1 = adrx+1;
            adry1 = adry-1;
        break;
       }
       
       if (adrx1>=0 && adry1>=0 && adrx1<sg_boxnumx && adry1<sg_boxnumy
                            && bom[adrx1][adry1].hit)
           test_open++;
       else
            if(adrx>=0 && adry1>=0 && adrx1<sg_boxnumx && adry1<sg_boxnumy
                            && !bom[adrx1][adry1].test)
                flag_opened = 0;            
       i++;
    }
    if ((test_open == bom[adrx][adry].value) && !flag_opened)
    {
        if (!Open (hWnd, adrx, adry))
            BombOut (hWnd);
        if (itime == (sg_boxnumx*sg_boxnumy-bombnum))
            Finished(hWnd);
             
    }
            
}

void DrawDigit(HDC hdc, char* buffer, int CLOCK)
{
    int x;
    
    if (CLOCK)
        x = x_clock;
    else
        x = x_bomnum;
        
    	SetBkMode(hdc, OPAQUE);
	SetBkColor(hdc, LTGRAY);
	TextOut(hdc, x, 0, buffer, -1);
	return;
}

LRESULT TestMyWinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    char  bomn[30], seconds[30];
    int i, j;
    int ran1, ran2;
    static RECT bombregion, face, onerect, bombnumber, clock; 
    static RECT winposition;
    MAINWINCREATE  CreateInfo;

    PAINTSTRUCT ps;
    switch (message) {
      
        case WM_CREATE:
#if 0
    	    FILE* pHighscore;
    	    char  buffer[256];
            if( LoadBitmap(&bmpbom,"res/lei.bmp")<0)
                fprintf(stderr,"bitmap error");
            else
                fValidbom = TRUE;
  
            if( LoadBitmap(&bmpface,"res/face1.bmp")<0)
                fprintf(stderr,"bitmap error");
            else
                fValidface = TRUE;
                
            if( LoadBitmap(&bitmap1,"res/face.bmp")<0)
                fprintf(stderr,"bitmap error");
            else
                fValid1 = TRUE;
                
            if( LoadBitmap(&bmpflag,"res/flag.bmp")<0)
                fprintf(stderr,"bitmap error");
            else
                fValidflag = TRUE;   
                
            if( LoadBitmap(&bmpfinalface,"res/finished.bmp")<0)
                fprintf(stderr,"bitmap error");
            else
                fValidfinalface = TRUE;   
               
            if( LoadBitmap(&bmphitfalse,"res/hitfalse.bmp")<0)
                fprintf(stderr,"bitmap error");
            else
                fValidhitfalse = TRUE;   
                
            for (i = 0; i < 10; i++){
                sprintf(buffer, "res/%d.bmp", i);
                LoadBitmap(sg_bmpDigit + i, buffer);
            }

            if ((pHighscore = fopen("res/.highscore.bomb","r"))){
                for (i = 0; i < 3; i++)
                    fscanf(pHighscore, "%d, %s",
                            &score[i].highscore, score[i].name);
                fclose(pHighscore);
            }
            else
                for (i = 0; i < 3; i++){
                    score[i].highscore = 999;
                    strcpy(score[i].name, "unknown");
                }    
#endif
            SetTimer(hWnd, ID_CLOCK, FREQ_CLOCK, NULL);
            
            PostMessage(hWnd,WM_COMMAND,ID_NEW,0);
        break;

        case WM_COMMAND:
            if (LOWORD(wParam) == ID_ABOUT)
            {
               InitAbHostedCreateInfo(hWnd,&CreateInfo);
               CreateMainWindow(&CreateInfo);  
            }
            
            if (LOWORD(wParam) == ID_CLOSE)
            {
                PostMessage(hWnd, WM_CLOSE, 0, 0);
            }
            
            if (LOWORD(wParam) == ID_HIGHSCORE)
            {
               InitHighScoreCreateInfo(hWnd,&CreateInfo);
               hHighscore =  CreateMainWindow(&CreateInfo);  
               ShowWindow(hHighscore,SW_SHOW); 
            }
            
            if (LOWORD(wParam) == ID_LARGE)
            {
                bombnum = 99;
                sg_boxnumx = 30;
                sg_boxnumy = 18;
                winwidth = WIDTH_LARGEWIN;
                flag_size = 2;
                GetWindowRect(hWnd, &winposition);
                MoveWindow(hWnd, winposition.left, winposition.top, 
                           WIDTH_LARGEWIN, HEIGHT_LARGEWIN, FALSE);
                PostMessage(hWnd, WM_COMMAND, ID_NEW, 0);
            }    
            if (LOWORD(wParam) == ID_MIDDLE)
            {
                bombnum = 40;
                sg_boxnumx = 16;
                sg_boxnumy = 16;
                winwidth = WIDTH_MIDDLEWIN;
                flag_size = 1;
                GetWindowRect(hWnd, &winposition);
                MoveWindow(hWnd, winposition.left, winposition.top, 
                           WIDTH_MIDDLEWIN, HEIGHT_MIDDLEWIN, FALSE);
                PostMessage(hWnd, WM_COMMAND, ID_NEW, 0);
            }
            
            if (LOWORD(wParam) == ID_SMALL)
            {
                bombnum = 10;
                sg_boxnumx = 8;
                sg_boxnumy = 8;
                winwidth = WIDTH_SMALLWIN;
                flag_size = 0;
                GetWindowRect(hWnd, &winposition);
                MoveWindow(hWnd, winposition.left, winposition.top, 
                           WIDTH_SMALLWIN, HEIGHT_SMALLWIN, FALSE);
                PostMessage(hWnd, WM_COMMAND, ID_NEW, 0);
            }    
                
            if (LOWORD(wParam) == ID_NEW)
            {
                bTimer = FALSE;
                second = 0;
                itime = 0;
                leftbombnum = bombnum;
                flag_bombout = 0;
                flag_finished = 0;
                x_bomnum = winwidth / 6;
                x_face = (winwidth*2) / 5;
                x_clock = (winwidth*3) / 5;
                offsetx = (winwidth - WIDTH_BOX*sg_boxnumx)/2-2;
                SetRect (&clock, x_clock, 0, 
                            x_clock + WIDTH_CLOCK, HEIGHT_CLOCK);
                            
                SetRect (&face, x_face, 0,
                            x_face + WIDTH_FACE, HEIGHT_FACE);
                            
                SetRect (&bombregion, offsetx, HEIGHT_FACE,
                           WIDTH_BOX*sg_boxnumx+offsetx,
                           HEIGHT_BOX*sg_boxnumy+HEIGHT_FACE);
                     
                SetRect (&bombnumber, x_bomnum, 0,
                     x_bomnum + WIDTH_BOMNUM, HEIGHT_BOMNUM);
                     
               /**************initial bomb value************** */
               
              for (i = 0; i < sg_boxnumx; i++)
                for (j = 0; j < sg_boxnumy; j++)
                { bom[i][j].flag  = 0;
                  bom[i][j].hit   = FALSE;
                  bom[i][j].value = 0;
                  bom[i][j].test  = FALSE;
                  bom[i][j].bombout = FALSE;
                  bom[i][j].error = FALSE;
                 }; 
              for (i = 0; i < (sg_boxnumx*sg_boxnumy); i++)
                  NoAdr[i].NY = FALSE; 
                   
              srandom( time(NULL));
              i = 0;
              while( i < bombnum )
               {
                  ran1 = random()%sg_boxnumx;
                  ran2 = random()%sg_boxnumy;
                  if(!bom[ran1][ran2].flag)
                     { 
                        bom[ran1][ran2].flag = 1;
			i++;
                     } 
#ifdef __rtems__
		      else i++;		/* bad rtems random function*/
#endif
                }
 
               for (i = 0; i < sg_boxnumx; i++)         
                  for (j = 0; j < sg_boxnumy; j++)
                    {
                if (!bom[i][j].flag) {
                if(i-1>=0&&j-1>=0&&bom[i-1][j-1].flag)
                        bom[i][j].value++;
                        
                if(i-1>=0&&bom[i-1][j].flag)
                        bom[i][j].value++;
                        
                if(i-1>=0&&j+1<sg_boxnumy&&bom[i-1][j+1].flag)
                        bom[i][j].value++;
                        
                if(j-1>=0&&bom[i][j-1].flag)
                        bom[i][j].value++;
                        
                if(j+1<sg_boxnumy&&bom[i][j+1].flag)
                        bom[i][j].value++;
                        
                if(i+1<sg_boxnumx&&j+1<sg_boxnumy&&bom[i+1][j+1].flag)
                        bom[i][j].value++; 
                        
                if(i+1<sg_boxnumx&&bom[i+1][j].flag) 
                        bom[i][j].value++;
                        
                if(i+1<sg_boxnumx&&j-1>=0&&bom[i+1][j-1].flag)
                        bom[i][j].value++;
                } 
                     }    
               InvalidateRect (hWnd, NULL, TRUE);
               }
        break;
        
        case WM_TIMER:
            if (wParam == ID_CLOCK)
                if (bTimer){
                    if (second < 1000){
                        second++;
                        InvalidateRect(hWnd, &clock, FALSE);
                    }
                }
        break;        

        case WM_LBUTTONDOWN:

            oldx = LOWORD (lParam);
            oldy = HIWORD (lParam);

            adrx = (oldx-offsetx)/WIDTH_BOX;
            adry = (oldy-HEIGHT_FACE)/HEIGHT_BOX;
            
            if (hCongratulate || hHighscore)
                break;
                
            if (!PtInRect2 (&bombregion, oldx, oldy)) {
                if (PtInRect2 (&face, oldx, oldy)){
                    PostMessage (hWnd, WM_COMMAND, ID_NEW, 0);
                    break;
                }    
                else
                    break;
            }
            if (flag_bombout)
                break;
            if (flag_finished)
                break;
            if (!bTimer)
                bTimer = TRUE;
                
            if (bom[adrx][adry].hit)
                break;

#if 0
            if (GetShiftKeyStatus() & 0x00000200) {
#endif
	    if(mwCurrentButtons & MWBUTTON_R) {
                BothButtonDownProc(hWnd,adrx,adry);
                break;
            }
            
                
            if (bom[adrx][adry].test)
                break;
                
            if (bom[adrx][adry].flag) {
                BombOut(hWnd);   
                break;
            }    
            if (bom[adrx][adry].value != 0)
            {
                    NoAdr[itime].x  = adrx;
                    NoAdr[itime].y  = adry;
                    NoAdr[itime].NY = TRUE;
                    itime++;
                    bom[adrx][adry].test = TRUE;
                    
                    SetRect (&onerect, adrx*WIDTH_BOX+offsetx,
                           adry*HEIGHT_BOX+HEIGHT_FACE,
                           (adrx+1)*WIDTH_BOX+offsetx,
                           (adry+1)*HEIGHT_BOX+HEIGHT_FACE);
                    InvalidateRect (hWnd, &onerect, FALSE);
             }
             else {
                    hdc = GetDC(hWnd);
                    SearchGround (hdc, adrx, adry);
                    ReleaseDC(hWnd, hdc);
             }
             
             if (itime == (sg_boxnumx*sg_boxnumy - bombnum))
                Finished(hWnd);
             
        break;

        case WM_MBUTTONDOWN:
             oldx = LOWORD (lParam);
             oldy = HIWORD (lParam);
             adrx = (oldx-offsetx)/WIDTH_BOX;
             adry = (oldy-HEIGHT_FACE)/HEIGHT_BOX;  

            if (!PtInRect2 (&bombregion, oldx, oldy))
                break;
            if (flag_bombout)
                break;
            if (flag_finished)
                break;
                
            if (!bTimer)
                bTimer = TRUE;
                
           /*****RBUTTONDOWN & LBUTTONDOWN******/
            
                BothButtonDownProc(hWnd,adrx,adry); 
		break;

        case WM_RBUTTONDOWN:
#if 0
             SetCapture (hWnd);
#endif
             oldx = LOWORD (lParam);
             oldy = HIWORD (lParam);
             adrx = (oldx-offsetx)/WIDTH_BOX;
             adry = (oldy-HEIGHT_FACE)/HEIGHT_BOX;  

            if (!PtInRect2 (&bombregion, oldx, oldy))
                break;
            if (flag_bombout)
                break;
            if (flag_finished)
                break;
                
            if (!bTimer)
                bTimer = TRUE;
                
           /*****RBUTTONDOWN & LBUTTONDOWN******/
            
#if 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -