📄 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;
}
#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 + -