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

📄 text1.txt

📁 应用win32编写的一个扫雷程序
💻 TXT
字号:
Public   Sub   InputStaticNumber()   
  Dim   Tmp1,   Tmp2   As   Integer   
  Randomize   
  '初始化三维数组   
  For   i   =   1   To   30   
          For   j   =   1   To   16   
          '用于记录地雷的数目和雷的位置   
                  NumLTBob(i,   j,   0)   =   0   
          '用于记录按钮显示的状况   
                  NumLTBob(i,   j,   1)   =   0   
          Next   j   
  Next   i   
  i   =   0   
  '为三维数组添加99颗雷的标记;   
  While   i   <>   NumOfBob   
          Tmp1   =   Int(30   *   Rnd())   +   1   
          Tmp2   =   Int(16   *   Rnd())   +   1   
          If   NumLTBob(Tmp1,   Tmp2,   0)   <>   -1   Then   
                  '标记地雷(随机执行)   
                  NumLTBob(Tmp1,   Tmp2,   0)   =   -1   
                  i   =   i   +   1   
          End   If   
  Wend   
    
  '计算地雷周围的数字   
  For   i   =   1   To   30   
          For   j   =   1   To   16   
                  If   NumLTBob(i,   j,   0)   <>   -1   Then   
                          If   NumLTBob(i   -   1,   j,   0)   =   -1   Then   NumLTBob(i,   j,   0)   =   NumLTBob(i,   j,   0)   +   1   
                          If   NumLTBob(i   +   1,   j,   0)   =   -1   Then   NumLTBob(i,   j,   0)   =   NumLTBob(i,   j,   0)   +   1   
                          If   NumLTBob(i,   j   -   1,   0)   =   -1   Then   NumLTBob(i,   j,   0)   =   NumLTBob(i,   j,   0)   +   1   
                          If   NumLTBob(i,   j   +   1,   0)   =   -1   Then   NumLTBob(i,   j,   0)   =   NumLTBob(i,   j,   0)   +   1   
                          If   NumLTBob(i   -   1,   j   -   1,   0)   =   -1   Then   NumLTBob(i,   j,   0)   =   NumLTBob(i,   j,   0)   +   1   
                          If   NumLTBob(i   +   1,   j   -   1,   0)   =   -1   Then   NumLTBob(i,   j,   0)   =   NumLTBob(i,   j,   0)   +   1   
                          If   NumLTBob(i   -   1,   j   +   1,   0)   =   -1   Then   NumLTBob(i,   j,   0)   =   NumLTBob(i,   j,   0)   +   1   
                          If   NumLTBob(i   +   1,   j   +   1,   0)   =   -1   Then   NumLTBob(i,   j,   0)   =   NumLTBob(i,   j,   0)   +   1   
                  End   If   
          Next   j   
  Next   i   
    
  End   Sub   
    
  Public   Sub   FrmMouseDown(ByVal   x   As   Integer,   ByVal   y   As   Integer,   Optional   Button   As   Integer   =   1)   
  With   FrmClear   
  If   x   >=   1   And   x   <=   30   And   y   >=   1   And   y   <=   16   Then   
          If   Button   =   1   And   NumLTBob(x,   y,   1)   =   0   Then   
                  If   NumLTBob(x,   y,   0)   >=   1   And   NumLTBob(x,   y,   0)   <=   8   Then   
                  '显示数字   
                          BitBlt   .hDC,   (x   -   1)   *   PicV.dx   +   12,   (y   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   0,   (NumLTBob(x,   y,   0)   -   1)   *   PicV.dy,   SRCCOPY   
                          NumLTBob(x,   y,   1)   =   -1   
                  End   If   
                  If   NumLTBob(x,   y,   0)   =   -1   Then   
                  '显示红雷并结束游戏   
                          BitBlt   .hDC,   (x   -   1)   *   PicV.dx   +   12,   (y   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   7   *   PicV.dy,   SRCCOPY   
                          NumLTBob(x,   y,   1)   =   -2   
                          GameOver   
                  End   If   
                  If   NumLTBob(x,   y,   0)   =   0   Then   
                  '显示空白并递归所有相连的空白   
                          BitBlt   .hDC,   (x   -   1)   *   PicV.dx   +   12,   (y   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                          NumLTBob(x,   y,   1)   =   -1   
                          '递归查找   
                          FindBlank   x,   y   
                  End   If   
          End   If   
            
          If   Button   =   2   Then   
                  Select   Case   NumLTBob(x,   y,   1)   
                          Case   0   
                          '插上红旗   
                                  BitBlt   .hDC,   (x   -   1)   *   PicV.dx   +   12,   (y   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   4   *   PicV.dy,   SRCCOPY   
                                  NumLTBob(x,   y,   1)   =   1   
                          Case   1   
                          '打上标记   
                                  BitBlt   .hDC,   (x   -   1)   *   PicV.dx   +   12,   (y   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   5   *   PicV.dy,   SRCCOPY   
                                  NumLTBob(x,   y,   1)   =   2   
                          Case   2   
                          '还原按钮   
                                  BitBlt   .hDC,   (x   -   1)   *   PicV.dx   +   12,   (y   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   0   *   PicV.dy,   SRCCOPY   
                                  NumLTBob(x,   y,   1)   =   0   
                  End   Select   
                    
          End   If   
  End   If   
  End   With   
  End   Sub   
    
  Public   Sub   FindBlank(ByVal   i   As   Integer,   ByVal   j   As   Integer)   
  '递归函数,用于查找空白地   
  If   i   >=   1   And   i   <=   30   And   j   >=   1   And   j   <=   16   Then   
          FrmMouseDown   i   -   1,   j   -   1   
          FrmMouseDown   i   -   1,   j   
          FrmMouseDown   i   -   1,   j   +   1   
          FrmMouseDown   i,   j   +   1   
          FrmMouseDown   i,   j   -   1   
          FrmMouseDown   i   +   1,   j   -   1   
          FrmMouseDown   i   +   1,   j   
          FrmMouseDown   i   +   1,   j   +   1   
  End   If   
  End   Sub   
    
  Public   Sub   RefFrmClear()   
  '窗体刷新时回复原来的战况   
  With   FrmClear   
  For   i   =   1   To   30   
          For   j   =   1   To   16   
                  If   NumLTBob(i,   j,   1)   =   -1   Then   
                          If   NumLTBob(i,   j,   0)   >=   1   And   NumLTBob(i,   j,   0)   <=   8   Then   
                                  BitBlt   .hDC,   (i   -   1)   *   PicV.dx   +   12,   (j   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   0,   (NumLTBob(i,   j,   0)   -   1)   *   PicV.dy,   SRCCOPY   
                          End   If   
                          If   NumLTBob(i,   j,   0)   =   -1   Then   
                                  BitBlt   .hDC,   (i   -   1)   *   PicV.dx   +   12,   (j   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   6   *   PicV.dy,   SRCCOPY   
                          End   If   
                          If   NumLTBob(i,   j,   0)   =   0   Then   
                                  BitBlt   .hDC,   (i   -   1)   *   PicV.dx   +   12,   (j   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                          End   If   
                  End   If   
                    
                  If   NumLTBob(i,   j,   0)   =   -1   And   NumLTBob(i,   j,   1)   =   -2   Then   
                          BitBlt   .hDC,   (i   -   1)   *   PicV.dx   +   12,   (j   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   7   *   PicV.dy,   SRCCOPY   
                  End   If   
          Next   j   
  Next   i   
  End   With   
  End   Sub   
    
  Public   Sub   GameOver()   
  '游戏结束,显示尚未挖掘的地雷   
  With   FrmClear   
  For   i   =   1   To   30   
          For   j   =   1   To   16   
                  If   NumLTBob(i,   j,   1)   =   0   And   NumLTBob(i,   j,   0)   =   -1   Then   
                          BitBlt   .hDC,   (i   -   1)   *   PicV.dx   +   12,   (j   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   6   *   PicV.dy,   SRCCOPY   
                  End   If   
                  NumLTBob(i,   j,   1)   =   -1   
          Next   j   
  Next   i   
  '画上哭泣的脸   
          BitBlt   .hDC,   240,   15,   PicV.FaceDx,   PicV.FaceDy,   .PicFace.hDC,   0,   1   *   PicV.FaceDy,   SRCCOPY   
  End   With   
  End   Sub   
    
  Public   Sub   ShowMeABob(ByVal   i   As   Integer,   ByVal   j   As   Integer)   
  Dim   Num   As   Integer   
  Num   =   0   
  If   NumLTBob(i   -   1,   j   -   1,   1)   =   1   Then   Num   =   Num   +   1   
  If   NumLTBob(i   -   1,   j,   1)   =   1   Then   Num   =   Num   +   1   
  If   NumLTBob(i   -   1,   j   +   1,   1)   =   1   Then   Num   =   Num   +   1   
  If   NumLTBob(i,   j   -   1,   1)   =   1   Then   Num   =   Num   +   1   
  If   NumLTBob(i,   j   +   1,   1)   =   1   Then   Num   =   Num   +   1   
  If   NumLTBob(i   +   1,   j   -   1,   1)   =   1   Then   Num   =   Num   +   1   
  If   NumLTBob(i   +   1,   j,   1)   =   1   Then   Num   =   Num   +   1   
  If   NumLTBob(i   +   1,   j   +   1,   1)   =   1   Then   Num   =   Num   +   1   
    
  If   NumLTBob(i,   j,   0)   <=   Num   Then   
          FrmMouseDown   i   -   1,   j   -   1   
          FrmMouseDown   i   -   1,   j   
          FrmMouseDown   i   -   1,   j   +   1   
          FrmMouseDown   i,   j   +   1   
          FrmMouseDown   i,   j   -   1   
          FrmMouseDown   i   +   1,   j   -   1   
          FrmMouseDown   i   +   1,   j   
          FrmMouseDown   i   +   1,   j   +   1   
  Else   
          With   FrmClear   
                  If   NumLTBob(i   -   1,   j   -   1,   1)   =   0   And   (i   -   1   >=   1   And   i   -   1   <=   30   And   j   -   1   >=   1   And   j   -   1   <=   16)   Then   BitBlt   .hDC,   (i   -   1   -   1)   *   PicV.dx   +   12,   (j   -   1   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                  If   NumLTBob(i   -   1,   j,   1)   =   0   And   (i   -   1   >=   1   And   i   -   1   <=   30   And   j   >=   1   And   j   <=   16)   Then   BitBlt   .hDC,   (i   -   1   -   1)   *   PicV.dx   +   12,   (j   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                  If   NumLTBob(i   -   1,   j   +   1,   1)   =   0   And   (i   -   1   >=   1   And   i   -   1   <=   30   And   j   +   1   >=   1   And   j   +   1   <=   16)   Then   BitBlt   .hDC,   (i   -   1   -   1)   *   PicV.dx   +   12,   (j   +   1   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                  If   NumLTBob(i,   j   -   1,   1)   =   0   And   (i   >=   1   And   i   <=   30   And   j   -   1   >=   1   And   j   -   1   <=   16)   Then   BitBlt   .hDC,   (i   -   1)   *   PicV.dx   +   12,   (j   -   1   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                  If   NumLTBob(i,   j   +   1,   1)   =   0   And   (i   >=   1   And   i   <=   30   And   j   +   1   >=   1   And   j   +   1   <=   16)   Then   BitBlt   .hDC,   (i   -   1)   *   PicV.dx   +   12,   (j   -   1   +   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                  If   NumLTBob(i   +   1,   j   -   1,   1)   =   0   And   (i   +   1   >=   1   And   i   +   1   <=   30   And   j   -   1   >=   1   And   j   -   1   <=   16)   Then   BitBlt   .hDC,   (i   +   1   -   1)   *   PicV.dx   +   12,   (j   -   1   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                  If   NumLTBob(i   +   1,   j,   1)   =   0   And   (i   +   1   >=   1   And   i   +   1   <=   30   And   j   >=   1   And   j   <=   16)   Then   BitBlt   .hDC,   (i   +   1   -   1)   *   PicV.dx   +   12,   (j   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
                  If   NumLTBob(i   +   1,   j   +   1,   1)   =   0   And   (i   +   1   >=   1   And   i   +   1   <=   30   And   j   +   1   >=   1   And   j   +   1   <=   16)   Then   BitBlt   .hDC,   (i   +   1   -   1)   *   PicV.dx   +   12,   (j   +   1   -   1)   *   PicV.dy   +   55,   PicV.dx,   PicV.dy,   .Pic.hDC,   PicV.dx,   1   *   PicV.dy,   SRCCOPY   
          End   With   
  End   If   
  End   Sub   

⌨️ 快捷键说明

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