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

📄 bomb.c

📁 MINI GUI1.6X源码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*** $Id: bomb.c,v 1.20 2005/09/01 06:32:21 weiym Exp $**** bomb.c: The MineSweeper game.**** Copyright (C) 1999~ 2002 Zheng Xiang and others.** Copyright (C) 2003 Feynman Software.*//***  This source is free software; you can redistribute it and/or**  modify it under the terms of the GNU General Public**  License as published by the Free Software Foundation; either**  version 2 of the License, or (at your option) any later version.****  This software is distributed in the hope that it will be useful,**  but WITHOUT ANY WARRANTY; without even the implied warranty of**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU**  General Public License for more details.****  You should have received a copy of the GNU General Public**  License along with this library; if not, write to the Free**  Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,**  MA 02111-1307, USA*/#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);void InitMyWinCreateInfo(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      18static 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 createpmenuabout(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)"About Bomb Game";    InsertMenuItem(hmnu, 3, TRUE, &mii);    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)"New Game";    InsertMenuItem(hmnu, 0, TRUE, &mii);        mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_HIGHSCORE;    mii.typedata    = (DWORD)"High Score";    InsertMenuItem(hmnu, 1, TRUE, &mii);        mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_CLOSE;    mii.typedata    = (DWORD)"Quit Game";    InsertMenuItem(hmnu, 2, TRUE, &mii);        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)"Large";    InsertMenuItem(hmnu, 0, TRUE, &mii);         mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_MIDDLE;    mii.typedata    = (DWORD)"Middle";    InsertMenuItem(hmnu, 1, TRUE, &mii);          mii.type        = MFT_STRING ;    mii.state       = 0;    mii.id          = ID_SMALL;    mii.typedata    = (DWORD)"Small";    InsertMenuItem(hmnu, 2, TRUE, &mii);      return hmnu;}HMENU createmenu1(void){    HMENU hmnu;    MENUITEMINFO mii;

⌨️ 快捷键说明

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