在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例C/C++游戏开发 → c++ 扫雷游戏 示例源码

c++ 扫雷游戏 示例源码

C/C++游戏开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:6.92KB
  • 下载次数:22
  • 浏览次数:576
  • 发布时间:2019-02-13
  • 实例类别:C/C++游戏开发
  • 发 布 人:Xyj1300
  • 文件格式:.cpp
  • 所需积分:1
 相关标签: 游戏 扫雷

实例介绍

【实例简介】emmm,正常的扫雷游戏
【实例截图】

【核心代码】

1 c扫雷小游戏  
 #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;i<300;i =20)/*画格子*/ 
  for(j=200;j<400;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;i<10;i  ) 
  for(j=0;j<10;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;i<10;i  ) 
  for(j=0;j<10;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); 
} 

playgame()/*游戏过程*/ 
{int i,j,numx; 
 for(i=0;i<10;i  ) 
   for(j=0;j<10;j  ) 
     p[i][j]=tongji(i,j);/*把标记有几个雷的数字都存放起来*/ 
 while(!kbhit()) 
 { 
  if(LeftPress())/*左键盘按下*/ 
   { 
    MouseGetXY(); 
    if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)/*重新来*/ 
    { 
    MouseOff(); 
    again=1; 
    break; 
    } 
    if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*是否在游戏范围内*/ 
    { 
    j=(MouseX-190)/20;/*x坐标*/ 
    i=(MouseY-90)/20;/*y坐标*/ 
      if(num[i][j]!=-1) 
     { 
      if(num[i][j]==10)/*中雷*/ 
      { 
      MouseOff(); 
      gameove();/*失败*/ 
      break; 
      } 
      else/*非中雷*/ 
      { 
      MouseOff(); 
      numx=tongji(i,j); 
      if(numx==0)/*周围没地雷*/ 
         funcheck(i,j);/*开始找无雷*/ 
      else/*有地雷*/ 
        { 
        sprintf(score,"%d",numx);/*输出雷数*/ 
        setcolor(RED); 
 outtextxy(195 j*20,95 i*20,score); 
 scorenum--; 
        } 
      MouseOn(); 
      num[i][j]=-1; 
      if(scorenum<1)/*胜利了*/ 
       { 
       setcolor(11); 
       settextstyle(0,0,2); 
       outtextxy(230,30,"YOU WIN!"); 
       break; 
       } 
      } 
     } 
    } 
   } 
 } 
} 
 main() 
{int gd=DETECT,gr; 
 registerbgidriver(EGAVGA_driver); 
 initgraph(&gd,&gr,"c:\\tc"); 
 loop: begain(); 
 playgame();/*具体游戏*/ 
 if(again)/*游戏中重新开始*/ 
{ 
 again=0; 
 goto loop; 
} 
 MouseOn(); 
 while(!kbhit())/*重新来*/ 
 { 
  if(LeftPress()) 
   { 
   MouseGetXY();/*失败后重新来*/ 
   if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85) 
   goto loop; 
   } 
 } 
 MouseOff(); 
 closegraph(); 
} 
  

标签: 游戏 扫雷

实例下载地址

c++ 扫雷游戏 示例源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警