mine 全局变量修改后的代码

#include<stdio.h>
#include<graphics.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9//9行9列的雷区表格
#define COL 9
#define MINE_WID 40
#define MAX_MINE 9
int mine[ROW+2][COL+2];
int openx,openy;
IMAGE img[12];
MOUSEMSG msg;
HWND hwnd=NULL;

void printMap() //数组作为储存数据,把外圈也绘制出来
{
    for(int i=0;i<ROW+2;i++)
    {
        for(int j=0;j<COL+2;j++)
        {
            printf("%3d",mine[i][j]);
        }
        printf("\n");
    }
}
//在二维数组里面随机获取9个下标,赋值为-1
void gameInit()
{
    //随机化给下标为x,y的赋值为-1,标记为雷区,并且要判断不要有 重合的下标
    int x,y;
    srand((unsigned int)time(0));
    for(int m=0;m<MAX_MINE;)//注意m++的操作,不在这里
    {

        x=rand()%9+1;
        y=rand()%9+1;
        //判断是否重复
        
        if(mine[x][y]==0) //没有雷的情况下,就埋雷,有雷就没做了
        {
            mine[x][y]=-1;
            //当布雷成功了,m才++
            m++;//放在判断这里++,才会保证一定布满9个雷
        }
        
    }
    // 遍历数组,对雷九宫格进行+1操作.
for(int a=1;a<ROW+1;a++) // VC6在cpp文件不能重复定义i,j。所以避开一下
    {
        for(int b=1;b<COL+1;b++)
        {
            //首先要找到是雷的i,j
            if(mine[a][b]==-1) //再嵌套一个二层循环
            {
                for(int k=a-1;k<=a+1;k++)
                {
                    for(int q=b-1;q<=b+1;q++)
                    {
                        //周围的遍历,只对非雷区进行操作
                        if(mine[k][q]!=-1)
                        {
                            mine[k][q]++;
                        }
                    }
                }
                
            }
        }
    }

for(int i=1;i<=ROW;i++)
{
    for(int j=1;j<=COL;j++)
    {
        mine[i][j]+=20;
    }
}



    
    
    char temp[20]=" "; 
    for(i=0;i<12;i++)
    {
        sprintf(temp,"%d.jpg",i);//
        loadimage(&img[i],temp,MINE_WID,MINE_WID);
        
    }
}
//绘图是mine数组里面的 1行到9行,1列到9列
void gameDraw()
{
    for(int i=1;i<ROW+1;i++)
    {
        for(int j=1;j<COL+1;j++)
        {
            int x=(j-1)*MINE_WID;//同步更新下标
            int y=(i-1)*MINE_WID;
            if(mine[i][j]>=0&&mine[i][j]<=8) //初始化开始为0的时候,全部填充空白砖块
            {
                 putimage(x,y,&img[mine[i][j]]); //根据mine[i][j]的数字来绘制对应的图片,注意图片的文件名要与自己显示的东西相符合
            }
            else if(mine[i][j]==-1) //当为-1的时候布雷
            {
                putimage(x,y,&img[9]);
            }
            else if(mine[i][j]>=19&&mine[i][j]<=28) //所有的数字在-1到19范围,+20之后在19到28贴掩盖图片
            {
                putimage(x,y,&img[10]);

            }
            else if(mine[i][j]>30)
            {
                putimage(x,y,&img[11]);
            }

        }
    }
}
void openNull(int x,int y) //传递openx,openy进来
{
    if(mine[x][y]==0)//如果是空白(已经解密了,对0进行操作)
    {
        for (int i=x-1;i<=x+1;i++)//二层遍历周围的方格子
        {
            for(int j=y-1;j<=y+1;j++)
            {
                if(mine[i][j]==20)//周围的格子没有点,因为还没有解密,与20进行判断
                {
                    mine[i][j]-=20;//解密为空格0
                    openNull(i,j);//递归调用到周围所有的空格全部一键打开退出
                }
            }
        }
    }
    
    
}
void gameMouse()
{
    if(MouseHit())
    {
        msg=GetMouseMsg(); //注意大小写
        //扫雷有标记功能,判断鼠标左右键。左键确定,右键标记为红旗
        if(msg.uMsg==WM_LBUTTONDOWN)
        {
        
           //加密的格子进行减操作
            mine[msg.y/MINE_WID+1][msg.x/MINE_WID+1]-=20;
            openx=msg.y/MINE_WID+1;
            openy=msg.x/MINE_WID+1;
            openNull(openx,openy);//空白格子递归全展开
            
        }
        else if(msg.uMsg==WM_RBUTTONDOWN)//判断右键点击进行标记
        {
            if( mine[msg.y/MINE_WID+1][msg.x/MINE_WID+1]<30) //简化处理,没有放置标记红旗的都是在小于30
            {
                 mine[msg.y/MINE_WID+1][msg.x/MINE_WID+1]+=20;//直接+20,让数字大于30,给放置红旗做准备(-1到8+了20,从19~28,大于30简化)

            }
            else //否则什么? 否则就是 大于30,有红旗了
            {
                 mine[msg.y/MINE_WID+1][msg.x/MINE_WID+1]-=20; //如果本来就有红旗,就-20,取消红旗标记
                 //注意在 gameDraw ()里面更新  else if(mine[i][j]>30) putimage(x,y,&img[11]);
            

            }
            
        }
            
    }
    
            
}
void gameWinorLose()
{
    //复制一下鼠标消息的代码
  if(MouseHit())
    {
        msg=GetMouseMsg(); //注意大小写
       if( mine[openx][openy]==-1) //注意点击之后的判断进行了解密操作,对-1进行判断,有时候是对加密后的数据进行判断,要自己学会区分
           //include加入对话框弹出结束游戏 #include<Windows.h>
       {
          MessageBox(hwnd,"中雷了!","Game Over",MB_OK); 
           //全局变量区加入 HWND hwnd=NULL;
          exit(0);
       
       }
  }
           
}
 int main()
{
    initgraph(MINE_WID*ROW,MINE_WID*COL,1); //参数 1,是同时绘图与打开控制台
    gameInit(); //资源初始化
    printMap();//控制台作为后台数据帮忙分析
    while(1)
    
    {
        
        
        gameDraw();//绘制
        gameMouse();
        gameWinorLose();
        gameDraw();//绘制
    
    }
    
    system("pause");//记得 #include<stdlib>
    
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容