C语言二维数组实现扫雷游戏

#include<stdio.h>
//使用二维数组实现 扫雷
int main()
{

   char ui[8][8]={
                  '+','+','+','+','+','+','+','+',
                  '+','+','+','+','+','+','+','+',
                  '+','+','+','+','+','+','+','+',
                  '+','+','+','+','+','+','+','+',
                  '+','+','+','+','+','+','+','+',
                  '+','+','+','+','+','+','+','+',
                  '+','+','+','+','+','+','+','+',
                  '+','+','+','+','+','+','+','+'
                 };
   int map[8][8]={
                     0,0,0,0,0,0,0,0,
                     0,0,1,0,0,1,0,0,
                     0,0,0,0,1,0,0,0,
                     0,0,0,0,0,1,0,0,
                     0,0,1,0,0,0,0,0,
                     0,0,1,0,0,0,0,0,
                     0,1,0,1,1,0,0,0,
                     1,0,0,0,0,0,0,0
                     };
   int p[8][2]={{-1,-1} ,{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
   int i=0,j=0;
   int h=0,l=0;
   int h1=0,l1=0;
   int n=0;//用来保存 雷的数量 计数
   int win=0;
 while(1)
  {
       printf("    扫雷游戏\n");

          for(i=0;i<8;i++)
            {
              for(j=0;j<8;j++)
                {
                  printf("%c ",ui[i][j]);
                }
               printf("\n");
           }

      printf("请输入你要打开的位置 行 列:");
          scanf("%d%d",&h,&l);
         if(map[h-1][l-1]==1)
          {
              printf("踩到雷 游戏结束\n");
                break;
          }
         h=h-1;
         l=l-1; 

         //没有踩到雷的情况  判断周围有几个雷 并把数字显示在 界面上
         //-1 -1    -1, 0   -1,+1   0 ,-1   0 ,+1   +1 ,-1    +1,0   +1 ,+1 

        //n=map[h-1][l-1]+map[h-1][l]+map[h-1][l+1]+map[h][l-1]+map[h][l+1]+map[h+1][l-1]+map[h+1][l+1]+map[h+1][l];
        i=0;

        while(i<8)
         {
             n=0;
             h1=h;
             l1=l;
             h1= h1+p[i][0];
             l1=l1+p[i][1];
             if(h1>=0&&h1<8&&l1>=0&&l1<8)
               {
                    if(map[h1][l1]==1)
                        {
                           n++;
                        }
               }

             i++;
          }

         //把得到的数字显示到 界面上 ui[h][l];
         //把int数字转换成 字符
         switch(n)
           {
                case 0:
                    ui[h][l]='0';
                       break;
                case 1:
                    ui[h][l]='1';
                       break;
                case 2:
                    ui[h][l]='2';
                       break;
                case 3:
                    ui[h][l]='3';
                       break;
                case 4:
                    ui[h][l]='4';
                       break;
                case 5:
                    ui[h][l]='5';
                       break;
                case 6:
                    ui[h][l]='6';
                       break;
                case 7:
                    ui[h][l]='7';
                       break;
                case 8:
                    ui[h][l]='8';
                       break;
           }
           win++;
           if(win==54)
             {
                printf("获胜 游戏结束\n");
                   break;
             }
   }
  return 0;
}
时间: 2024-10-21 18:46:25

C语言二维数组实现扫雷游戏的相关文章

c语言-C语言二维数组下标越界--却能给越界的下标赋值 和输出

问题描述 C语言二维数组下标越界--却能给越界的下标赋值 和输出 编译器:dev-c++ int iArray[3][4]; iArray[3][4]=1000; printf("%d",iArray[3][4]); 改变 iArray[3][4]的值为1000 输出的结果仍然为1000 请问这个是什么原因呢? 我是直接给越界的下标进行了赋值 以前以为只要是下标越界了 输出的都是无意义的数字 其实那是因为没有给越界的下标赋值 对吗 越界的下标为什么还能正常使用呀 解决方案 使用越界的数

二维数组与指针-C语言二维数组中的*(p+1)的确切含义

问题描述 C语言二维数组中的*(p+1)的确切含义 各位大师们,烦请指教一二吧.如果是在一维数组中,*(p+1)表示p+1这个地址空间或空间中的值,那么在二维数组中,p+1是指向a[1]*(p+1)是a1这个地址中的值啊?可是为什么会是地址呢? 解决方案 二维数组其实是一个小戏法,本质上还是一维数组--二维下标连续构成的数组又连续构成第一维下标.你可以像遍历一维数组那样遍历它 解决方案二: 其实a[2][3]的调用可以看成是两个调用,首先是对a进行[2]操作,然后再对a[2]的返回值进行[3]操

数组 指针-c语言二维数组的指针问题

问题描述 c语言二维数组的指针问题 在WinTC下运行如下代码 #include void main() { char a1[][5]={"ab","cd","ef","ghi","sfs"}; printf("%sn",*(a1+3)); //语句1 printf("%cn",**(a1+3)); //语句2 } 运行结果为: ghi g 但如果将上述语句1中的%s

编程c语言-C语言二维数组问题 求解

问题描述 C语言二维数组问题 求解 解决方案 bool foo() { int a[100][100]; int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",a[i][j]); } } int sum = 0; int sum1 = 0; for (i = 0; i < n; i++) sum += a[i][0]; for (j = 0; j < n; j++) { sum1 = 0; for (

C语言二维数组输出段错误

问题描述 C语言二维数组输出段错误 #include #define SIZEWIDTH 10 //分块宽度 #define SIZEHEIGHT 10 //分块高度 void setzero_array(int arr[SIZEWIDTH][SIZEHEIGHT])//数组初始化函数, { int i,j; for(i;i<SIZEWIDTH;i++) for(j=0;j<SIZEHEIGHT;j++) arr[i][j]=0; } void show_array(int arr[SIZEW

c语言-java的二维数组和C语言二维数组的储存结构有什么区别?

问题描述 java的二维数组和C语言二维数组的储存结构有什么区别? java的二维数组和C语言二维数组的储存结构有什么区别?,数据结构有什么区别吗?有人说java的数组在内存中存储不是连续的,, 解决方案 java二维数组的存储在内存中不一定连续.二维数组是一维的一维,也就是树形结构. 解决方案二: 个人认为是连续的,要支持随机访问,当然如果内存真的不是连续的,那就是vm的事情了 解决方案三: C语言是连续的,Java应该也是连续的吧,这个问题还真没深究过.

C语言二维数组指针问题

问题描述 C语言二维数组指针问题 如下两个代码,第一个代码会停止运行,而第二个能得出正确结果...这两个代码的不同之处不应该是等价的吗?为什么会造成这种完全相反的结果? #include<stdio.h> void main() { void ave(float *p,int m); float a[3][4]={{65,66,67,68},{78,79,80,71},{54,78,65,54}}; ave(*a,12); } void ave(float *p,int m) { float

语言二维数组-C语言编程中二维数组以及递归函数问题

问题描述 C语言编程中二维数组以及递归函数问题 有编号分别为0,1,2,3,4的5本书,准备分给5个人A,B,C,D,E,每个人阅读兴趣用一个二维数组加以描述,公式如下: 1 i喜欢j书 Like[i][j] = 0 i不喜欢j书 写一个程序,输出所有分书方案,让人人皆大欢喜.假定5个人对5本书的阅读兴趣如下图所示. 解决方案 答案 a 2 b 0 c 1 d 3 e 4 要程序先采纳 解决方案二: 大半夜的,干嘛递归呢 5个for循环妥妥的 int num=0; struct answer {

[总结]C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: 1 #include <cstdio> 2 void print(int *a[3]) 3 { 4 printf("%d\n",a[0][0]); 5 } 6 7 int main() 8 { 9 int a[2][3] = {1,2,3,4,5,6}; 10 print(a); 11 return 0