📄 mine.c
字号:
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;}#endifvoid 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 + -