bomblevel.c
来自「minigui PDA系统 可实现手机功能」· C语言 代码 · 共 1,283 行 · 第 1/3 页
C
1,283 行
if (itime == (sg_boxnumx*sg_boxnumy - bombnum))
Finished(hWnd);
break;
case MSG_RBUTTONDOWN:
// SetCapture (hWnd);
oldx = LOWORD (lParam);
oldy = HIWORD (lParam);
adrx = (oldx-offsetx)/WIDTH_BOX;
adry = (oldy-HEIGHT_FACE)/HEIGHT_BOX;
if (!PtInRect (&bombregion, oldx, oldy))
break;
if (flag_bombout)
break;
if (flag_finished)
break;
if (!bTimer)
bTimer = TRUE;
/*****RBUTTONDOWN & LBUTTONDOWN******/
if (wParam & KS_LEFTBUTTON){
BothButtonDownProc(hWnd,adrx,adry);
break;
}
/******* only rbuttondown *******/
if (bom[adrx][adry].test)
break;
if (!bom[adrx][adry].hit )
{
bom[adrx][adry].hit = TRUE;
leftbombnum--;
}
else
{ bom[adrx][adry].hit = FALSE;
leftbombnum++;
}
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);
InvalidateRect (hWnd, &bombnumber, FALSE);
break;
case MSG_RBUTTONUP:
break;
case MSG_LBUTTONUP:
break;
case MSG_PAINT:
hdc = BeginPaint (hWnd);
sprintf(seconds, "%03d", second);
DrawDigit(hdc, seconds, TRUE);
if (leftbombnum >= 0){
sprintf(bomn,"%02d",leftbombnum);
DrawDigit(hdc, bomn, FALSE);
}
if (flag_finished)
DrawMyBitmap (hdc, fValidfinalface?&bmpfinalface:NULL,
x_face+1, 1, 0, 0);
else
if (flag_bombout)
DrawMyBitmap (hdc, fValidface?&bmpface:NULL,
x_face, 0, 0, 0);
else
DrawMyBitmap(hdc, fValid1?&bitmap1:NULL,
x_face, 0, 0, 0);
for (i = 0; i < sg_boxnumx; i++)
for (j = 0; j < sg_boxnumy; j++)
{
if (!bom[i][j].test && !bom[i][j].bombout){
SetPenColor (hdc,COLOR_darkgray);
Rectangle(hdc,
i*WIDTH_BOX+offsetx,
j*HEIGHT_BOX+HEIGHT_FACE,
(i+1)*WIDTH_BOX+offsetx,
(j+1)*HEIGHT_BOX+HEIGHT_FACE);
Draw3DUpThickFrame (hdc,
i*WIDTH_BOX+1+offsetx,
j*HEIGHT_BOX+1+HEIGHT_FACE,
(i+1)*WIDTH_BOX+offsetx,
(j+1)*HEIGHT_BOX+HEIGHT_FACE,
COLOR_lightgray);
}
if ( bom[i][j].hit)
DrawMyBitmap(hdc, fValidflag?&bmpflag:NULL,
i*WIDTH_BOX+offsetx+3,
j*HEIGHT_BOX+3+HEIGHT_FACE,
WIDTH_BOX - 5,
HEIGHT_BOX - 5);
if (bom[i][j].error) {
Cancel3DFrame(hdc,i*WIDTH_BOX+offsetx,
j*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX,HEIGHT_BOX);
DrawMyBitmap(hdc, fValidhitfalse?&bmphitfalse:NULL,
i*WIDTH_BOX+offsetx+1, j*HEIGHT_BOX+1+HEIGHT_FACE, 0, 0);
}
if (bom[i][j].bombout) {
Cancel3DFrame(hdc,i*WIDTH_BOX+offsetx,
j*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX,HEIGHT_BOX);
DrawMyBitmap(hdc, fValidbom?&bmpbom:NULL,
i*WIDTH_BOX+offsetx+1, j*HEIGHT_BOX+1+HEIGHT_FACE, 0, 0);
}
}
for ( i = 0; i < itime; i++ )
{
Cancel3DFrame(hdc,(NoAdr[i].x)*WIDTH_BOX+offsetx,
(NoAdr[i].y)*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX, HEIGHT_BOX);
if(NoAdr[i].NY)
TextValue(hdc,(NoAdr[i].x)*WIDTH_BOX+offsetx,
(NoAdr[i].y)*HEIGHT_BOX+HEIGHT_FACE,
bom[NoAdr[i].x][NoAdr[i].y].value);
}
EndPaint (hWnd, hdc);
return 0;
case MSG_CLOSE:
UnloadBitmap(&bmpbom);
UnloadBitmap(&bmpface);
UnloadBitmap(&bitmap1);
UnloadBitmap(&bmpfinalface);
UnloadBitmap(&bmphitfalse);
UnloadBitmap(&bmpflag);
KillTimer(hWnd, ID_CLOCK);
for (i = 0; i < 10; i++)
UnloadBitmap(sg_bmpDigit + i);
DestroyMainWindow (hWnd);
PostQuitMessage (hWnd);
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
/********** create a hosted about window****/
int AbHostedWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
case MSG_CREATE:
break;
case MSG_PAINT:
{
HDC hdc;
hdc = BeginPaint (hWnd);
SetBkColor(hdc,COLOR_lightgray);
TextOut (hdc, 10, 25, "扫雷游戏 Ver 1.0");
TextOut (hdc, 10, 55,
"Author: David zhao");
EndPaint (hWnd, hdc);
}
return 0;
case MSG_CLOSE:
DestroyMainWindow (hWnd);
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
void InitAbHostedCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_BORDER | WS_CAPTION | WS_VISIBLE;
pCreateInfo->dwExStyle = WS_EX_NONE;
pCreateInfo->spCaption = "The about window" ;
pCreateInfo->hMenu = 0;
pCreateInfo->hCursor = GetSystemCursor(0);
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = AbHostedWinProc;
pCreateInfo->lx = 100;
pCreateInfo->ty = 200;
pCreateInfo->rx = 540;
pCreateInfo->by = 390;
pCreateInfo->iBkColor = COLOR_lightgray;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = hHosting;
}
/*************************** High Scores Window ******************************/
#define IDC_RESET 110
int HighScoreWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
static HWND hRESET, hOK;
switch (message) {
case MSG_CREATE:
hRESET = CreateWindow ("button",
"重置",
WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
IDC_RESET,
100, 145, 60, 26, hWnd, 0);
hOK = CreateWindow ("button",
"确认",
WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
IDOK,
220, 145, 60, 26, hWnd, 0);
break;
case MSG_COMMAND:
{
int id = LOWORD(wParam);
FILE* pHighscore;
int i;
if (id == IDC_RESET && HIWORD(wParam) == BN_CLICKED) {
for (i = 0; i < 3; i++){
score[i].highscore = 999;
strcpy(score[i].name, "unknown");
}
if ((pHighscore = fopen(get_record_file(), "w+"))){
for (i = 0; i < 3; i++)
fprintf(pHighscore, "%d, %s\n",
score[i].highscore,score[i].name);
fclose(pHighscore);
}
InvalidateRect(hWnd, NULL, TRUE);
}
if (id == IDOK && HIWORD(wParam) == BN_CLICKED)
PostMessage(hWnd, MSG_CLOSE, 0, 0);
}
break;
case MSG_PAINT:
{
HDC hdc;
char buffer[50];
int i;
hdc = BeginPaint (hWnd);
SetBkColor(hdc,COLOR_lightgray);
TextOut(hdc, 130, 15, "英雄");
TextOut(hdc, 15, 45, "初级" );
TextOut(hdc, 15, 75, "中级" );
TextOut(hdc, 15, 105, "高级" );
for (i = 0; i < 3; i++){
sprintf(buffer, "%3d %s",
score[i].highscore, score[i].name);
TextOut(hdc, 150, 45+i*30, buffer);
}
EndPaint (hWnd, hdc);
}
return 0;
case MSG_CLOSE:
DestroyWindow (hRESET);
DestroyWindow (hOK);
DestroyMainWindow (hWnd);
hHighscore = HWND_DESKTOP;
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
void InitHighScoreCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_BORDER | WS_CAPTION;
pCreateInfo->dwExStyle = WS_EX_NONE;
pCreateInfo->spCaption = "高分榜" ;
pCreateInfo->hMenu = 0;
pCreateInfo->hCursor = GetSystemCursor(0);
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = HighScoreWinProc;
pCreateInfo->lx = 100;
pCreateInfo->ty = 200;
pCreateInfo->rx = 470;
pCreateInfo->by = 410;
pCreateInfo->iBkColor = COLOR_lightgray;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = hHosting;
}
/************************* Congratulation Window *****************************/
#define IDC_CTRL_NAME 100
int CongratulationWinProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
static HWND hPrompt, hName, hOK;
switch (message) {
case MSG_CREATE:
hPrompt = CreateWindow ("static",
"请输入你的姓名:",
SS_SIMPLE | WS_VISIBLE,
IDC_STATIC,
10, 10, 185, 24, hWnd, 0);
hName = CreateWindow ("edit",
getlogin(),
WS_CHILD | WS_VISIBLE | WS_BORDER,
IDC_CTRL_NAME,
10, 40, 175, 26, hWnd, 0);
hOK = CreateWindow ("button",
"Ok",
WS_CHILD | BS_PUSHBUTTON | WS_VISIBLE,
IDOK,
110, 75, 75, 26, hWnd, 0);
break;
case MSG_COMMAND:
{
int id = LOWORD(wParam);
FILE* pHighscore;
int i;
if (id == IDOK && HIWORD(wParam) == BN_CLICKED) {
score[flag_size].highscore = second;
SendMessage (hName, MSG_GETTEXT,
19, (LPARAM)score[flag_size].name);
if ((pHighscore = fopen(get_record_file(), "w+"))){
for (i = 0; i < 3; i++)
fprintf(pHighscore, "%d, %s\n",
score[i].highscore,score[i].name);
fclose(pHighscore);
}
PostMessage (hWnd, MSG_CLOSE, 0, 0);
}
}
break;
case MSG_CLOSE:
DestroyWindow (hPrompt);
DestroyWindow (hName);
DestroyWindow (hOK);
DestroyMainWindow (hWnd);
hCongratuate = HWND_DESKTOP;
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
void InitCongratulationCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_BORDER | WS_CAPTION | WS_VISIBLE;
pCreateInfo->dwExStyle = WS_EX_IMECOMPOSE;
pCreateInfo->spCaption = "祝贺!" ;
pCreateInfo->hMenu = 0;
pCreateInfo->hCursor = GetSystemCursor(0);
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = CongratulationWinProc;
pCreateInfo->lx = 50;
pCreateInfo->ty = 60;
pCreateInfo->rx = 255;
pCreateInfo->by = 200;
pCreateInfo->iBkColor = COLOR_lightgray;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = hHosting;
}
static void InitMyBombLevelWinCreateInfo(PMAINWINCREATE pCreateInfo)
{
pCreateInfo->dwStyle = WS_CAPTION | WS_BORDER | WS_SYSMENU | WS_VISIBLE;
pCreateInfo->dwExStyle = WS_EX_NONE;
pCreateInfo->spCaption="扫雷";
pCreateInfo->hMenu = createbombmenu1();
pCreateInfo->hCursor = GetSystemCursor(0);
pCreateInfo->hIcon = 0;
pCreateInfo->MainWindowProc = TestMyWinProc;
pCreateInfo->lx = 0;
pCreateInfo->ty = 0;
pCreateInfo->rx = WIDTH_LARGEWIN;
pCreateInfo->by = HEIGHT_LARGEWIN;
pCreateInfo->iBkColor = COLOR_lightgray;
pCreateInfo->dwAddData = 0;
pCreateInfo->hHosting = HWND_DESKTOP;
}
int levelbomb(HWND hWnd)
{
MSG Msg;
MAINWINCREATE CreateInfo;
HWND hMainWnd;
const char* layer = NULL;
RECT max_rect = {0, 0, 0, 0};
InitMyBombLevelWinCreateInfo(&CreateInfo);
hMainWnd = CreateMainWindow(&CreateInfo);
if (hMainWnd == HWND_INVALID)
return 0;
ShowWindow(hMainWnd,SW_SHOWNORMAL);
while( GetMessage(&Msg, hMainWnd) ) {
TranslateMessage (&Msg);
DispatchMessage(&Msg);
}
MainWindowThreadCleanup(hMainWnd);
return 0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?