C语言简单的键盘玩扫雷小游戏(完结)

1:这次我们会将前面的代码进行整合,和整理,最终使我们的程序可以有效的运行起来。

【1】初始化函数。
void GameInit()
{
    //随机数种子
    srand((unsigned int)time(NULL));
    //数组初始化
    
    for(int i = 0;i < ROW+2;i++)
    {
        for(int j = 0;j < COL+2;j++)
        {
            map[i][j] = 0;
        }    
    }
    //布雷 -1表示雷
    int n = 0; 
    while(n<NUM)
    {
        int r = rand() % ROW + 1;//1--ROW 
        int c = rand() % COL + 1;//1--C0L 
        if(map[r][c] == 0)
        {
            map[r][c] = -1;
            n++;
        }
    }
    //跟据类的分布 填充其他部位雷的数据 
    for(int i = 1;i <= ROW;i++)
    {
        for(int j = 1;j <= COL;j++)
        {//                  遍历二维数组 
            if(map[i][j] != -1)//找到不为雷的元素 
            {
                //遍历九宫格
                for(int m=i-1;m<=i+1;m++)
                {
                    for(int n=j-1;n<=j+1;n++)
                    {
                        if(map[m][n]==-1)
                        {
                            map[i][j]++;
                        }
                    }
                }
            }
        }
    }
}

【2】加密。

void GameDraw()
{
    //加密
    /*
    雷-1-----------19
    空0------------20
    1---------------21
    2---------------22
    3---------------23
    4---------------24
    5---------------25
    6---------------26
    大于等于19的 
    */
    for(int i = 1;i <= ROW;i++)
    {
        for(int j = 1;j <= COL;j++)
        {
            map[i][j]+=20;
        }
    }
    PrintPlay();
}

【3】打印扫雷的界面。

void PrintPlay()
{
    //打印  
    int i,j;
    for(i = 1;i <= ROW;i++)
    {
        for(j = 1;j <= COL;j++)
        {
            if(map[i][j]>=19)
            {
                printf(" *");
            }
            else
            {
                printf("%2d",map[i][j]);
            }
        }
        printf("\n");
    }
}

【4】用户玩输入坐标。

//用户玩输入坐标。
void GameUser()
{
    int z;
    while(z)
    {
        
        int x,y;
        printf("请输入坐标:\n");
        scanf("%d %d",&x,&y);
        if(x<=10&&x>=1&&y<=10&&y>=1)
        {
            //解密
                /*
    雷-1-----------19
    空0------------20
    1---------------21
    2---------------22
    3---------------23
    4---------------24
    5---------------25
    6---------------26
    1 1 1 
    1 1 1
    1 1 1
    大于等于19的 
        
    */
            if(map[x][y]<19)
            {
                printf("已翻开。\n");
            }
            else
            {
                switch(map[x][y])
                {
                    
                    
                    case 19:
                        //    游戏结束
                        map[x][y]-=20;
                        PrintPlay();//打印 
                        printf("你踩到雷了19!\n");
                        z=0;
                        //跳转到结束 
                        break;
                    case 20:
                        //空 
                        //解密 
                        //map[x][y]-=20;
                        //空周围为空的叶打印出来 
                        point(x,y); 
                        PrintPlay();//打印 
                        break;
                    case 21:
                    case 22:
                    case 23:
                    case 24:
                    case 25:
                    case 26:
                    case 27:
                    case 28:
                        //周围有雷
                        //解密输出就可以 
                        map[x][y]-=20;//解密 
                        PrintPlay();//打印 
                        break;
                    default :
                        break;
                }
            }
            
        }
        else
        {
            printf("您输入错误!"); 
        }
    } 
}

【5】:打印周围为空的地方

//打印周周围为空的地方void point(int x,int y)
{
    //遍历九宫格
    for(int m=x-1;m<=x+1;m++)
    {
        for(int n=y-1;n<=y+1;n++)
        {
            if(map[m][n]==20)
            {
                map[m][n]-=20;
                point(m,n);
            }
        }
    }    
}

【6】主函数。

void main()
{
    printf("欢迎来到Q的编程世界:\n");
    //初始化函数     
    GameInit();
    //绘制函数  打印二维数组中所有的元素 
    
    GameDraw();
    //用户玩输入坐标
    GameUser();
    system("pause");
}

【7】:最后把我们的代码,整合一下就得到如下的,C语言简单的键盘玩扫雷小游戏的完整代码:

/*
Q的编程世界 
*/ 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 10//行 
#define COL 10//列 
#define NUM 10//雷的个数
 
int map[ROW+2][COL+2];

//初始化函数
void GameInit()
{
    //随机数种子
    srand((unsigned int)time(NULL));
    //数组初始化
    
    for(int i = 0;i < ROW+2;i++)
    {
        for(int j = 0;j < COL+2;j++)
        {
            map[i][j] = 0;
        }    
    }
    //布雷 -1表示雷
    int n = 0; 
    while(n<NUM)
    {
        int r = rand() % ROW + 1;//1--ROW 
        int c = rand() % COL + 1;//1--C0L 
        if(map[r][c] == 0)
        {
            map[r][c] = -1;
            n++;
        }
    }
    //跟据类的分布 填充其他部位雷的数据 
    for(int i = 1;i <= ROW;i++)
    {
        for(int j = 1;j <= COL;j++)
        {//                  遍历二维数组 
            if(map[i][j] != -1)//找到不为雷的元素 
            {
                //遍历九宫格
                for(int m=i-1;m<=i+1;m++)
                {
                    for(int n=j-1;n<=j+1;n++)
                    {
                        if(map[m][n]==-1)
                        {
                            map[i][j]++;
                        }
                    }
                }
            }
        }
    }
}

void PrintPlay();
//绘制函数  打印二维数组中所有的元素 
void GameDraw()
{
    //加密
    
    for(int i = 1;i <= ROW;i++)
    {
        for(int j = 1;j <= COL;j++)
        {
            map[i][j]+=20;
        }
    }
    PrintPlay();
}

void PrintPlay()
{
    //打印  
    int i,j;
    for(i = 1;i <= ROW;i++)
    {
        for(j = 1;j <= COL;j++)
        {
            if(map[i][j]>=19)
            {
                printf(" *");
            }
            else
            {
                printf("%2d",map[i][j]);
            }           
        }
        printf("\n");
    }

}

//打印周圍為空的
void point(int x,int y)
{
    //遍历九宫格
    for(int m=x-1;m<=x+1;m++)
    {
        for(int n=y-1;n<=y+1;n++)
        {
            if(map[m][n]==20)
            {
                map[m][n]-=20;
                point(m,n);
            }
        }
    }    
}
//用户玩输入坐标
void GameUser()
{
    int z;
    while(z)
    {
        
        int x,y;
        printf("请输入坐标:\n");
        scanf("%d %d",&x,&y);
        if(x<=10&&x>=1&&y<=10&&y>=1)
        {
            //解密

            if(map[x][y]<19)
            {
                printf("已翻开。\n");
            }
            else
            {
                switch(map[x][y])
                {
                    
              
                    case 19:
                        //    游戏结束
                        map[x][y]-=20;
                        PrintPlay();//打印 
                        printf("你踩到雷了19!\n");
                        z=0;
                        //跳转到结束 
                        break;
                    case 20:
                        //空 
                        //解密 
                        //map[x][y]-=20;
                        //空周围为空的叶打印出来 
                        point(x,y); 
                        PrintPlay();//打印 
                        break;
                    case 21:
                    case 22:
                    case 23:
                    case 24:
                    case 25:
                    case 26:
                    case 27:
                    case 28:
                        //周围有雷
                        //解密输出就可以 
                        map[x][y]-=20;//解密 
                        PrintPlay();//打印 
                        break;
                    default :
                        break;
                }
            }
            
        }
        else
        {
            printf("您输入错误!"); 
        }
    } 
}

void main()
{
    printf("欢迎来到Q的编程世界:\n");
    //初始化函数     
    GameInit();
    //绘制函数  打印二维数组中所有的元素 
    
    GameDraw();
    //用户玩输入坐标
    GameUser();
    system("pause");
}

下面是运行图片:

 

好嘞,键盘玩扫雷到这里就完结了,拜拜,让我们下次再见吧!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值