bomblevel.c
来自「minigui PDA系统 可实现手机功能」· C语言 代码 · 共 1,283 行 · 第 1/3 页
C
1,283 行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <pwd.h>
#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>
#include <minigui/control.h>
typedef struct
{
int flag;
int value;
BOOL test;
BOOL hit;
BOOL bombout;
BOOL error;
}BOM;
typedef struct
{
int x;
int y;
BOOL NY;
}NO;
typedef struct
{
int highscore;
char name[20];
}SCORE;
static BOM bom[30][16];
static NO NoAdr[540];
static SCORE score[3];
static int itime, leftbombnum;
static int bombnum = 99;
void SearchGround(HWND hWnd,int x,int y);
int Open(HWND hWnd,int x,int y);
int TestMyWinProc(HWND hWnd,int message,WPARAM wParam,LPARAM lParam);
static void InitMyBombLevelWinCreateInfo(PMAINWINCREATE pCreateInfo);
void InitAbHostedCreateInfo(HWND hHosting, PMAINWINCREATE pCreateInfo);
void InitHighScoreCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo);
void InitCongratulationCreateInfo (HWND hHosting, PMAINWINCREATE pCreateInfo);
void* TestMyWindow(void* data);
void BombGame(HWND hWnd, int x, int y);
void Finished(HWND hWnd);
void Cancel3DFrame(HDC hdc, int l,int t,int r,int b);
void TextValue(HDC hdc, int x,int y,int value);
void BombOut(HWND hWnd);
void BothButtonDownProc(HWND hWnd, int x, int y);
void DrawDigit(HDC hdc, char* buffer, int CLOCK);
#define ID_ABOUT 300
#define ID_NEW 301
#define ID_LARGE 302
#define ID_MIDDLE 303
#define ID_SMALL 304
#define ID_CLOSE 305
#define ID_HIGHSCORE 306
#define ID_CLOCK 400
#define WIDTH_LARGEWIN 544
#define HEIGHT_LARGEWIN 470
#define WIDTH_MIDDLEWIN 292
#define HEIGHT_MIDDLEWIN 430
#define WIDTH_SMALLWIN 178
#define HEIGHT_SMALLWIN 270
#define WIDTH_FACE 30
#define HEIGHT_FACE 30
#define WIDTH_DIGIT 14
#define WIDTH_BOMNUM (2*WIDTH_DIGIT)
#define HEIGHT_BOMNUM 30
#define WIDTH_CLOCK (3*WIDTH_DIGIT)
#define HEIGHT_CLOCK 30
#define FREQ_CLOCK 10
#define WIDTH_BOX 18
#define HEIGHT_BOX 18
static int sg_boxnumx = 30;
static int sg_boxnumy = 16;
static BITMAP sg_bmpDigit[10];
static int oldx, oldy, adrx, adry;
static int flag_bombout, flag_finished, flag_size = 2;
static int second = 0;
static BITMAP bitmap1, bmpflag;
static BOOL fValid1 = FALSE;
static BOOL fValidflag = FALSE;
static BOOL bTimer;
static HWND hHighscore,hCongratuate;
static int winwidth = WIDTH_LARGEWIN;
static int offsetx;
static int x_face, x_bomnum, x_clock;
void DrawMyBitmap(HDC hdc, PBITMAP bmp, int x, int y, int w, int h)
{
if (bmp)
FillBoxWithBitmap(hdc, x, y, w, h, bmp);
else
TextOut (hdc, x, y, "a");
}
void Cancel3DFrame(HDC hdc, int l, int t, int w, int h)
{
SetPenColor (hdc,COLOR_darkgray);
Rectangle(hdc, l, t, l + w, t + h);
SetBrushColor(hdc,COLOR_lightgray);
FillBox(hdc, l+1, t+1, w-1, h-1);
}
void TextValue(HDC hdc, int x, int y, int value)
{
int color = 0;
char va[20];
switch(value)
{
case 1: color=COLOR_blue; break;
case 2: color=COLOR_green; break;
case 3: color=COLOR_red; break;
case 4: color=COLOR_magenta; break;
case 5: color=COLOR_yellow; break;
case 6: color=COLOR_cyan; break;
case 7: color=COLOR_darkred; break;
case 8: color=COLOR_darkgreen; break;
}
SetBkColor(hdc,COLOR_lightgray);
SetTextColor(hdc,color);
sprintf(va,"%d",value);
TextOut(hdc, x + ((WIDTH_BOX - GetSysCharWidth ()) >> 1),
y + ((HEIGHT_BOX - GetSysCharHeight ()) >> 1), va);
}
void SearchGround(HDC hdc,int x,int y)
{
int x1=0,y1=0;
int i=1;
bom[x][y].test=TRUE;
NoAdr[itime].x=x;
NoAdr[itime].y=y;
NoAdr[itime].NY=FALSE;
itime++;
Cancel3DFrame(hdc,x*WIDTH_BOX+offsetx, y*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX, HEIGHT_BOX);
while( i <= 8 )
{
switch(i)
{
case 1: x1=x-1; y1=y; break;
case 2: x1=x-1; y1=y-1; break;
case 3: x1=x-1; y1=y+1; break;
case 4: x1=x+1; y1=y; break;
case 5: x1=x+1; y1=y-1; break;
case 6: x1=x+1; y1=y+1; break;
case 7: y1=y-1; x1=x; break;
case 8: y1=y+1; x1=x; break;
}
if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy
&&!bom[x1][y1].hit&& !bom[x1][y1].test && !bom[x1][y1].value )
SearchGround(hdc,x1,y1);
if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy
&&!bom[x1][y1].hit
&&!bom[x1][y1].test && bom[x1][y1].value!=0 )
{
bom[x1][y1].test=TRUE;
NoAdr[itime].x=x1;
NoAdr[itime].y=y1;
NoAdr[itime].NY=TRUE;
itime++;
Cancel3DFrame(hdc, x1*WIDTH_BOX+offsetx, y1*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX, HEIGHT_BOX);
TextValue(hdc, x1*WIDTH_BOX+offsetx, y1*HEIGHT_BOX+HEIGHT_FACE,
bom[x1][y1].value);
}
i++;
}
}
BOOL Open(HWND hWnd,int x,int y)
{
int x1=0,y1=0;
int i=1;
HDC hdc;
hdc = GetClientDC(hWnd);
while( i <= 8 )
{
switch( i ) {
case 1: x1=x-1; y1=y; break;
case 2: x1=x-1; y1=y-1; break;
case 3: x1=x-1; y1=y+1; break;
case 4: x1=x+1; y1=y; break;
case 5: x1=x+1; y1=y-1; break;
case 6: x1=x+1; y1=y+1; break;
case 7: y1=y-1; x1=x; break;
case 8: y1=y+1; x1=x; break;
}
if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy
&& !bom[x1][y1].hit && bom[x1][y1].flag) {
ReleaseDC(hdc);
return FALSE;
}
if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy
&& !bom[x1][y1].test && !bom[x1][y1].value
&& !bom[x1][y1].flag ){
SearchGround(hdc,x1,y1);
}
if( x1>=0 && y1>=0 && x1<sg_boxnumx && y1<sg_boxnumy
&& !bom[x1][y1].test && bom[x1][y1].value!=0 )
{
bom[x1][y1].test=TRUE;
NoAdr[itime].x=x1;
NoAdr[itime].y=y1;
NoAdr[itime].NY=TRUE;
itime++;
Cancel3DFrame(hdc, x1*WIDTH_BOX+offsetx, y1*HEIGHT_BOX+HEIGHT_FACE,
WIDTH_BOX, HEIGHT_BOX);
TextValue(hdc, x1*WIDTH_BOX+offsetx, y1*HEIGHT_BOX+HEIGHT_FACE,
bom[x1][y1].value);
}
i++;
}
ReleaseDC(hdc);
return TRUE;
}
static BITMAP bmpbom, bmpface, bmphitfalse;
static BOOL fValidbom = FALSE,fValidface = FALSE, fValidhitfalse = FALSE;
void BombOut(HWND hWnd)
{
int i,j;
HDC hdc;
hdc=GetClientDC(hWnd);
for (i = 0; i < sg_boxnumx; i++) {
for (j = 0; j < sg_boxnumy; j++) {
if (bom[i][j].flag && !bom[i][j].hit) {
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);
bom[i][j].bombout = TRUE;
}
if (!bom[i][j].flag && bom[i][j].hit){
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);
bom[i][j].error = TRUE;
}
}
}
DrawMyBitmap (hdc, fValidface?&bmpface:NULL, x_face, 0, 0, 0);
flag_bombout = 1;
bTimer = FALSE;
ReleaseDC(hdc);
}
static BITMAP bmpfinalface;
static BOOL fValidfinalface = FALSE;
void Finished(HWND hWnd)
{
int i,j;
HDC hdc;
RECT bombnumber;
MAINWINCREATE CreateInfo;
hdc = GetClientDC(hWnd);
for (i = 0; i < sg_boxnumx; i++) {
for (j = 0; j < sg_boxnumy; j++) {
if (bom[i][j].flag && !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);
bom[i][j].hit = TRUE;
}
}
}
DrawMyBitmap (hdc, fValidfinalface?&bmpfinalface:NULL, x_face+1, 1, 0, 0);
flag_finished = 1;
bTimer = FALSE;
ReleaseDC(hdc);
leftbombnum = 0;
SetRect (&bombnumber, x_bomnum, 0,
x_bomnum + WIDTH_BOMNUM, HEIGHT_BOMNUM);
InvalidateRect (hWnd, &bombnumber, FALSE);
if (second < score[flag_size].highscore){
InitCongratulationCreateInfo(hWnd, &CreateInfo);
hCongratuate = CreateMainWindow (&CreateInfo);
}
}
HMENU createpbombmenuabout(void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"About";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = ID_ABOUT;
mii.typedata = (DWORD)"关于";
InsertMenuItem(hmnu, 3, TRUE, &mii);
hmnu = StripPopupHead(hmnu);
return hmnu;
}
HMENU createpmenustart(void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"Start";
hmnu = CreatePopupMenu (&mii);
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = ID_NEW;
mii.typedata = (DWORD)"新游戏";
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = ID_HIGHSCORE;
mii.typedata = (DWORD)"高分榜";
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = ID_CLOSE;
mii.typedata = (DWORD)"退出";
InsertMenuItem(hmnu, 2, TRUE, &mii);
hmnu = StripPopupHead(hmnu);
return hmnu;
}
HMENU createpmenulevel(void)
{
HMENU hmnu;
MENUITEMINFO mii;
memset (&mii, 0, sizeof(MENUITEMINFO));
mii.type = MFT_STRING;
mii.id = 0;
mii.typedata = (DWORD)"Level";
hmnu = CreatePopupMenu (&mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = ID_LARGE;
mii.typedata = (DWORD)"高级";
InsertMenuItem(hmnu, 0, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = ID_MIDDLE;
mii.typedata = (DWORD)"中级";
InsertMenuItem(hmnu, 1, TRUE, &mii);
mii.type = MFT_STRING ;
mii.state = 0;
mii.id = ID_SMALL;
mii.typedata = (DWORD)"初级";
InsertMenuItem(hmnu, 2, TRUE, &mii);
hmnu = StripPopupHead(hmnu);
return hmnu;
}
HMENU createbombmenu1(void)
{
HMENU hmnu;
MENUITEMINFO mii;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?