简单扫雷游戏

2016-02-19 13:12 7 1 收藏

今天给大家分享的是由图老师小编精心为您推荐的简单扫雷游戏,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

【 tulaoshi.com - 扫雷 】

鼠标右键的功能没写进去,这个程序主要是练下鼠标操作的,其中显示空白区域还用了个第归,写得比较简单.望大家多多指教.#include graphics.h
  #include stdlib.h
  #include dos.h
  #define LEFTPRESS 0xff01
  #define LEFTCLICK 0xff10
  #define LEFTDRAG 0xff19
  #define MOUSEMOVE 0xff08
  int num[10][10];/*范围*/
  int p[10][10];/*统计雷的数组*/
  int loop;/*重新来的标志*/
  int again=0;/*是否重来的变量*/
  int scorenum;/*一开始统计有几个雷*/
  char score[3];/*输出一共有几个地雷*/
  int Keystate;
  int MouseExist;
  int MouseButton;
  int MouseX;
  int MouseY;
  /*鼠标光标外形定义*/
  typedef strUCt
    {
     unsigned int shape[32];
     char hotx;
     char hoty;
    }SHAPE;/*箭头型*/
  SHAPE ARROW={
        {
         0x3fff,0x1fff,0x0fff,0x07ff,
         0x03ff,0x01ff,0x00ff,0x007f,
         0x003f,0x00ff,0x01ff,0x10ff,
         0x30ff,0xf87f,0xf87f,0xfc3f,
         0x0000,0x7c00,0x6000,0x7000,
         0x7800,0x7c00,0x7e00,0x7f00,
         0x7f80,0x7e00,0x7c00,0x4600,
         0x0600,0x0300,0x0300,0x0180
        },
        0,0,
       };/*鼠标光标显示*/
  void MouseOn()
    {
     _AX=0x01;
     geninterrupt(0x33);
    }/*鼠标光标掩示*/
  void MouseOff()/*鼠标光标隐藏*/
    {
     _AX=0x02;
     geninterrupt(0x33);
    }
  void MouseSetXY(int x,int y)/*设置当前位置*/
    {
     _CX=x;
     _DX=y;
     _AX=0x04;
     geninterrupt(0x33);
    }
  int LeftPress()/*左键按下*/
    {
     _AX=0x03;
     geninterrupt(0x33);
     return(_BX&1);
    }
  void MouseGetXY()/*得到当前位置*/
    {
     _AX=0x03;
     geninterrupt(0x33);
     MouseX=_CX;
     MouseY=_DX;
    }
   begain()/*游戏开始画面*/
  {
   int i,j;
   loop: cleardevice();
   MouseOn();
   MouseSetXY(180,30);
   MouseX=180;
   MouseY=30;
   scorenum=0;
   setfillstyle(SOLID_FILL,7);
   bar(190,60,390,290);
   setfillstyle(SOLID_FILL,8);
   for(i=100;i300;i+=20)/*画格子*/
    for(j=200;j400;j+=20)
     bar(j-8,i+8,j+8,i-8);
   setcolor(7);
   setfillstyle(SOLID_FILL,YELLOW);/*画脸*/
   fillellipse(290,75,10,10);
   setcolor(YELLOW);
   setfillstyle(SOLID_FILL,0);
    fillellipse(285,75,2,2);
    fillellipse(295,75,2,2);
   setcolor(0);
    bar(287,80,293,81);
   randomize();
   for(i=0;i10;i++)
    for(j=0;j10;j++)
     {
     num[i][j]=random(7)+10;/*用10代表地雷算了*/
     if(num[i][j]==10)
      scorenum++;
     }
   sprintf(score,"%d",scorenum);
   setcolor(1);
   settextstyle(0,0,2);
   outtextxy(210,70,score);
   scorenum=100-scorenum;/*为了后面判定胜利*/
  }
  gameove()/*游戏结束画面*/
  {
   int i,j;
   setcolor(0);
   for(i=0;i10;i++)
    for(j=0;j10;j++)
     if(num[i][j]==10)/*是地雷的就显示出来*/
      {
       setfillstyle(SOLID_FILL,RED);
        bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);
        setfillstyle(SOLID_FILL,0);
        fillellipse(200+j*20,100+i*20,7,7);
      }
  }
  int tongji(int i,int j)/*计算有几个雷*/
  {
   int x=0;/*10代表地雷*/
   if(i==0&&j==0)
    {
    if(num[0][1]==10)
    x++;
    if(num[1][0]==10)
    x++;
    if(num[1][1]==10)
    x++;
    }
   else if(i==0&&j==9)
   {
    if(num[0][8]==10)
    x++;
    if(num[1][9]==10)
    x++;
    if(num[1][8]==10)
    x++;
   }
   else if(i==9&&j==0)
   {
    if(num[8][0]==10)
    x++;
    if(num[9][1]==10)
    x++;
    if(num[8][1]==10)
    x++;
   }
   else if(i==9&&j==9)
   {
    if(num[9][8]==10)
    x++;
    if(num[8][9]==10)
    x++;
    if(num[8][8]==10)
    x++;
   }
   else if(j==0)
   {
    if(num[i][j+1]==10)
    x++;
    if(num[i+1][j]==10)
    x++;
    if(num[i-1][j]==10)
    x++;
    if(num[i-1][j+1]==10)
    x++;
    if(num[i+1][j+1]==10)
    x++;
   }
   else if(j==9)
   {
    if(num[i][j-1]==10)
    x++;
    if(num[i+1][j]==10)
    x++;
    if(num[i-1][j]==10)
    x++;
    if(num[i-1][j-1]==10)
    x++;
    if(num[i+1][j-1]==10)
    x++;
   }
   else if(i==0)
   {
    if(num[i+1][j]==10)
    x++;
    if(num[i][j-1]==10)
    x++;
    if(num[i][j+1]==10)
    x++;
    if(num[i+1][j-1]==10)
    x++;
    if(num[i+1][j+1]==10)
    x++;
   }
   else if(i==9)
   {
    if(num[i-1][j]==10)
    x++;
    if(num[i][j-1]==10)
    x++;
    if(num[i][j+1]==10)
    x++;
    if(num[i-1][j-1]==10)
    x++;
    if(num[i-1][j+1]==10)
    x++;
   }
   else
   {
    if(num[i-1][j]==10)
    x++;
    if(num[i-1][j+1]==10)
    x++;
    if(num[i][j+1]==10)
    x++;
    if(num[i+1][j+1]==10)
    x++;
    if(num[i+1][j]==10)
    x++;
    if(num[i+1][j-1]==10)
    x++;
    if(num[i][j-1]==10)
    x++;
    if(num[i-1][j-1]==10)
    x++;
   }
   return(x);
  }
  funcheck(int i,int j)/*开始找无雷*/
  {
   scorenum--;
   if(p[i][j]==0&&num[i][j]!=10)
     {
      setfillstyle(SOLID_FILL,7);/*显示无雷区*/
       bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);
      num[i][j]=-1;
     }
   else if(p[i][j]!=0)
    {
    sprintf(score,"%d",p[i][j]);/*输出雷数*/
     setcolor(RED);
     outtextxy(195+j*20,95+i*20,score);
     num[i][j]=-1;
     return ;
    }
   if(i!=0&&num[i-1][j]!=-1&&num[i-1][j]!=10)/*第归开始*/
     funcheck(i-1,j);
   if(i!=0&&j!=9&&num[i-1][j+1]!=-1&&num[i-1][j+1]!=10)
     funcheck(i-1,j+1);
   if(j!=9&&num[i][j+1]!=-1&&num[i][j+1]!=10)
     funcheck(i,j+1);
   if(j!=9&&i!=9&&num[i+1][j+1]!=-1&&num[i+1][j+1]!=10)
     funcheck(i+1,j+1);
   if(i!=9&&num[i+1][j]!=-1&&num[i+1][j]!=10)
     funcheck(i+1,j);
   if(i!=9&&j!=0&&num[i+1][j-1]!=-1&&num[i+1][j-1]!=10)
     funcheck(i+1,j-1);
   if(j!=0&&num[i][j-1]!=-1&&num[i][j-1]!=10)
     funcheck(i,j-1);
   if(i!=0&&j!=0&&num[i-1][j-1]!=-1&&num[i-1][j-1]!=10)
     funcheck(i-1,j-1);
  }
     [1] [2] 

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com)

来源:https://www.tulaoshi.com/n/20160219/1603365.html

延伸阅读
如前所述,算法层的实现,不外乎两种操作:1。如果一个方块的数值等于周围未挖开的方块数目,则把周围所有方块标记为雷;2。如果一个方块的数值等于周围已经标记为雷的方块个数,则在该块上同时单击左右键。实际上,这只是最简单的两种判断(简单到甚至不该称之为“判断”,而只是例行公事而已),而比这更复杂的分析判断还可以有很多,但...
  文/jorge 其实我不玩网络游戏的,所以对于外挂类程序也没什么好或坏的感觉,甚至平时基本不会想到这个概念。这个实验项目一开始称为“扫雷助手”,而究其技术含量,与现在真正实用的游戏外挂程序也没有可比性。设计它的意义,无非在于对某些Windows API的的进一步熟悉,使从未涉足过此领域的新手(当初的我自己)能够揭开某些“...
如上述,本程序分为了接口层和算法层。上述全局变量和常量,基本都属于接口层的内容。下面,来看接口层的具体实现。其工作的第一步,是要捕获扫雷窗口并取得其信息。这由函数GetMineWindow来完成: ================================================================= //试图取得可用的扫雷窗口,返回值表示是否成功。若成功,...
不得不说,捕获“扫雷”窗口以及取得它的数据,是本程序的一个难点。现在这个难点已经解决,接下来,完成接口层已经不是问题了。那么,来看接口层的两个核心过程: ================================================================= //取得整个雷区每个方块的状态,填入Cells中供分析。 procedure FetchCells; var ...
标签: 分娩
你只需要做一个智慧的妈咪,去善于发现生活中这些常见又简单的教育元素,并在自然的接触中触摸到那些能够益智的灵感。 玩转简单元素——石头 1、还记得我们小时候玩过的丢石子的游戏吗?在地上画几个圈,把石子平均地分配到每个小圈里,平均数的概念就这样在不经意地玩耍中被轻易掌握了。 2、对于2岁以上的宝贝来说,...

经验教程

430

收藏

59
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部