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

📄 bomb.c~

📁 Linux下扫雷 1.开始游戏----新游戏的开始。 ⒉难度设定——有初级、中级、高级三种难度的选择适合不同的玩家。 ⒊排名---在所有玩过此游戏的玩家进行排名。
💻 C~
📖 第 1 页 / 共 5 页
字号:
            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; 
}
/*定义三个位图数据结构(进行位图输出时使用)* bmpbom地雷位图,bmpface触雷笑脸位图,bmphitfalse显示错误位图,初始值都设为FALSE*/
static BITMAP bmpbom, bmpface, bmphitfalse;  
static BOOL fValidbom = FALSE,fValidface = FALSE, fValidhitfalse = FALSE;
/***********************************************************名    称:BombOut()*功    能: 显示地雷*入口参数: hWnd  窗口(或控件)句柄*出口参数:无**********************************************************/void BombOut(HWND hWnd)
{ 
  int i,j;
  HDC hdc;
  
  hdc=GetClientDC(hWnd);   //获取窗口客户区窗口句柄
    /*用for循环逐个判断*/
  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);
            	    /*绘制地雷:fValidbom=TRUE,显示地雷位图,否则为NULL*/        
            DrawMyBitmap(hdc, fValidbom?&bmpbom:NULL,
                        i*WIDTH_BOX+offsetx+1,
                        j*HEIGHT_BOX+1+HEIGHT_FACE, 0, 0);
            bom[i][j].bombout = TRUE;  //方格中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);
            /*绘制判断地雷错误:fValidhitfalse=TRUE,显示错误位图,否则为NULL*/         
            DrawMyBitmap(hdc, fValidhitfalse?&bmphitfalse:NULL,
                        i*WIDTH_BOX+offsetx+1,
                        j*HEIGHT_BOX+1+HEIGHT_FACE, 0, 0);
            bom[i][j].error = TRUE;  //方格中error为TRUE          
                        
          }   
       }
   }
  /*判断触雷笑脸:fValidface=TRUE在x_face处显示触雷笑脸位图,否则为显示NULL*/
   DrawMyBitmap (hdc, fValidface?&bmpface:NULL, x_face, 0, 0, 0);
   flag_bombout = 1; //显示全部地雷标识
   bTimer = FALSE; //时间停止
   ReleaseDC(hdc);   //释放当前窗口
}

static BITMAP bmpfinalface; /*定义位图数据结构,(完成笑脸位图)*/
static BOOL fValidfinalface = FALSE; /*完成笑脸位图fValidfinalface,初始值都设为FALSE*/
/***********************************************************名    称:Finished()*功    能: 完成任务*入口参数: hWnd  窗口(或控件)句柄*出口参数:无**********************************************************/
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) {
                		/*如果标识显示正确,则显示标识图片bmpflag,否则显示NULL*/
                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; //方格灰色遮盖                    
            }
        }
    }
    /*如果完成任务(fValidfinalface=TURE),显示bmpfinalface位图(比之前的图稍移一位)*/
    DrawMyBitmap (hdc, fValidfinalface?&bmpfinalface:NULL, x_face+1, 1, 0, 0);
    flag_finished = 1;  //完成任务标识
    bTimer = FALSE;  //时间停止
    ReleaseDC(hdc);   //释放当前窗口句柄
   
    leftbombnum = 0;  //剩余地雷数为0
        /*设置矩形区域*/                 
    SetRect (&bombnumber, x_bomnum, 0,
                         x_bomnum + WIDTH_BOMNUM, HEIGHT_BOMNUM);       /*InvalidateRect:使窗口的指定矩形区域无效    *bombnumber指无矩形区域(RECT指针);FALSE不擦除窗口背景*/
    InvalidateRect (hWnd, &bombnumber, FALSE);
       /*如果完成时间比最高分数小,则更新记录*/
    if (second < score[flag_size].highscore){        /*创建一个Congratulation主窗口*/
        InitCongratulationCreateInfo(hWnd, &CreateInfo);
        hCongratuate = CreateMainWindow (&CreateInfo);
    }    
}    
/***********************************************************名    称:createpmenuabout()*功    能:建立下拉子菜单"About"*入口参数: 无*出口参数:建立成功返回菜单句柄;否则返回0**********************************************************/
HMENU createpmenuabout(void)
{
    HMENU hmnu;	//定义菜单句柄
    MENUITEMINFO mii;  //为了加入菜单项,定义一个MENUITEMINFO结构变量
    memset (&mii, 0, sizeof(MENUITEMINFO));	//初始化mii所有单元为0
    mii.type        = MFT_STRING;
    mii.id          = 0;
    mii.typedata    = (DWORD)"About";
    /*CreatePopupMenu:建立一个下拉菜单或子菜单(建立成功返回菜单句柄;否则返回0)*/    hmnu = CreatePopupMenu (&mii);	
       /*添加子菜单项"About Bomb Game"*/ 
    memset (&mii, 0, sizeof(MENUITEMINFO));
    mii.type        = MFT_STRING ;
    mii.state       = 0;
    mii.id          = ID_ABOUT;
    mii.typedata    = (DWORD)"About Bomb Game";
    /*InsertMenuItem:向菜单添加菜单项     *参数2:item插入位置;参数3:flag指示菜单的基本状态;参数4:mii菜单项数据结构变量指针*/    InsertMenuItem(hmnu, 0, TRUE, &mii);	

    return hmnu;
}
/***********************************************************名    称:createpmenustart()*功    能:建立下拉子菜单"Start"*入口参数: 无*出口参数:建立成功返回菜单句柄;否则返回0**********************************************************/
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);
        /*添加子菜单项"New Game"*/ 
    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);
        /*添加子菜单项"High Score"*/ 
    mii.type        = MFT_STRING ;
    mii.state       = 0;
    mii.id          = ID_HIGHSCORE;
    mii.typedata    = (DWORD)"High Score";
    InsertMenuItem(hmnu, 1, TRUE, &mii);
        /*添加子菜单项"Quit Game"*/ 
    mii.type        = MFT_STRING ;
    mii.state       = 0;
    mii.id          = ID_CLOSE;
    mii.typedata    = (DWORD)"Quit Game";
    InsertMenuItem(hmnu, 2, TRUE, &mii);
    
    return hmnu;
}
/***********************************************************名    称:createpmenulevel()*功    能:建立下拉子菜单"Level"*入口参数: 无*出口参数:建立成功返回菜单句柄;否则返回0**********************************************************/
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);
    /*添加子菜单项"Large"*/     
    mii.type        = MFT_STRING ;
    mii.state       = 0;
    mii.id          = ID_LARGE;
    mii.typedata    = (DWORD)"Large";
    InsertMenuItem(hmnu, 0, TRUE, &mii);
     /*添加子菜单项"Middle"*/     
    mii.type        = MFT_STRING ;
    mii.state       = 0;
    mii.id          = ID_MIDDLE;
    mii.typedata    = (DWORD)"Middle";
    InsertMenuItem(hmnu, 1, TRUE, &mii);  
    /*添加子菜单项"Small"*/     
    mii.type        = MFT_STRING ;
    mii.state       = 0;
    mii.id          = ID_SMALL;
    mii.typedata    = (DWORD)"Small";
    InsertMenuItem(hmnu, 2, TRUE, &mii);  

    return hmnu;
}
/***********************************************************名    称:createpmenu1()*功    能:创建菜单*入口参数: 无*出口参数:建立成功返回菜单句柄;否则返回0**********************************************************/
HMENU createmenu1(void)
{
    HMENU hmnu;
    MENUITEMINFO mii;
    /*CreateMenu:建立一个空菜单(在此空菜单上插入下拉菜单)*/
    hmnu = CreateMenu();

    memset (&mii, 0, sizeof(MENUITEMINFO));
    mii.type        = MFT_STRING;
    mii.id          = 100;
    mii.typedata    = (DWORD)"Start";
    mii.hsubmenu    = createpmenustart();	//mii.hsubmenu用来指向子菜单(菜单句柄)
    InsertMenuItem(hmnu, 0, TRUE, &mii);	//添加"Start"菜单项

    mii.type        = MFT_STRING;
    mii.id          = 110;
    mii.typedata    = (DWORD)"Level";
    mii.hsubmenu    = createpmenulevel();
    InsertMenuItem(hmnu, 1, TRUE, &mii);  //添加"Level"菜单项
    
    mii.type        = MFT_STRING;
    mii.id          = 120;
    mii.typedata    = (DWORD)"About";
    mii.hsubmenu    = createpmenuabout();
    InsertMenuItem(hmnu, 2, TRUE, &mii);    //添加"About"菜单项
                   
    return hmnu;
}
/***********************************************************名    称:BothButtonDownProc()*功    能: 左右键按下方格*入口参数: hWnd  窗口(或控件)句柄*          adrx   左上角横坐标*          adry   左上角纵坐标*出口参数:无**********************************************************/
void BothButtonDownProc(HWND hWnd,int adrx,int adry)     
{
    int test_open = 0; //8个方向已打开的方格个数
    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;    //判断8个方向
    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;

⌨️ 快捷键说明

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