简单扫雷游戏

江南以南___

江南以南___

2016-02-19 13:12

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

鼠标右键的功能没写进去,这个程序主要是练下鼠标操作的,其中显示空白区域还用了个第归,写得比较简单.望大家多多指教.#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] 

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

简单扫雷游戏

编程语言 网络编程
简单扫雷游戏

纯JS扫雷游戏(各浏览器兼容)

Web开发
纯JS扫雷游戏(各浏览器兼容)

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

Windows8无扫雷自带游戏怎么办

windows系统
Windows8无扫雷自带游戏怎么办

扫雷怎么玩

电脑网络
扫雷怎么玩

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Win8无纸牌扫雷自带游戏如何解决

电脑入门
Win8无纸牌扫雷自带游戏如何解决

扫雷技巧有哪些

电脑网络
扫雷技巧有哪些

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

计算机应用基础操作题

计算机应用基础操作题

PDF、ZIP、DOC链接的标注

PDF、ZIP、DOC链接的标注
下拉加载更多内容 ↓