扫雷小游戏详解

简介: 扫雷小游戏详解

   今天我主要讲的是关于扫雷小游戏的内容,我将代码分为三个文件来写game.h放头文件和函数声明,game.c放函数的定义,test.c放主函数。想要写出扫雷小游戏需要学会二维数组数组的内容。想要全部的代码可以点gitee---扫雷小程序获取。

1.菜单函数

void menu()
{
  printf("********************\n");
  printf("****   1.play   ****\n");
  printf("****   0.exit   ****\n");
  printf("********************\n");
}

这就是简单的打印,这里不做具体解释。

2.初始化数组

void inboard(char arr[ROWS][COLS], int row, int col, char sets)
{
  int i, j;
  for (i = 0; i <= row; i++)
  {
    for (j = 0; j <= col; j++)
      arr[i][j] = sets;
  }
}

       由于扫雷需要用到两个二维数组,一个是为了让用户看到的,一个是为了埋雷的,我们想让用户看到的是*,由于两个数组初始化的过程相似,故我们想到可以使用同一个函数,但是埋雷我们用到的会是1 ,0两个数字,而*却是字符类型,故我们可以用字符类型的‘1’,‘0’代替,由于这是两个数组,初始化的内容不同,但都是字符类型,所以我们可以传入参数sets来代替。

3.打印棋盘

void pboard(char arr[ROWS][COLS], int row, int col)
{
  int i, j;
  for (i = 0; i <= row; i++)
    printf("%d ", i);
  printf("\n");
  for (i = 1; i <= row; i++)
  {
    printf("%d ", i);
    for (j = 1; j <= col; j++)
    {
      printf("%c ", arr[i][j]);
    }
    printf("\n");
  }
}

       这个函数主要用于打印用户看到的棋盘也就是打印******,我们先在第一行打印0 ,1,2,3,4...... 展示行数,最左边打印1,2,3,4.....展示列数,这也方便用户使用时给点坐标,此函数还可以帮助我们确定代码设计的是否争取,只需要改变一下传入的数组内容们就可以看到。

4.埋雷

void flagboard(char arr[ROWS][COLS], int rol, int col)
{
  int x, y;
  int count = 0;
  do
  {
    x = rand() % 9 +1;
    y = rand() % 9 + 1;
    if (arr[x][y] == '0')
    {
      count++;
      arr[x][y] = '1';
    }
  } while (count < flag);
}

     

        这里需要用到我们的随机数rand()的头文件时time.h,而随机数还需要我们在主函数中设立一个种子srand((unsigned int )time(NULL)),这个种子的头文件stdlinb.h,在埋雷的时候我们需要注意需要埋在没有雷的地方,因此需要我们进行一个判断,只有成功埋上雷才进行计数,直到埋够雷。

5.扫雷

void findboard(char arr[ROWS][COLS], char brr[ROWS][COLS], int row, int col)
{
  int x, y;
  int counts = ROW*COL-flag;
  do
  {
    printf("请输入你选择的坐标:");
    scanf("%d%d", &x, &y);
    if ((x >= 1 && x <= 9) && (y >= 1 && y <= 9))
    {
      if (arr[x][y] != '1'&&brr[x][y]=='*')
      {
        brr[x][y] = arr[x - 1][y] + arr[x - 1][y - 1] + arr[x - 1][y + 1] + arr[x][y - 1] + arr[x][y + 1] + arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1] - 7* '0';
        pboard(brr, ROW, COL);
        counts--;
      }
      else
      {
        printf("这是雷,游戏结束\n");
        break;
      }
    }
    else
    {
      printf("输入格式错误,请重新输入\n");
    }
  } while (counts);
  if(counts==0)
    printf("恭喜你,扫雷完成\n");
}

 

    扫雷时候需要用户自己输入坐标,当不是雷的时候会在全是*的数组上进行返回值返回附近有几颗雷,其中包含游戏结束,输入格式的正确性。

       到这里我们的扫雷小游戏就已经结束了,向往各位可以学到一些东西,最后希望大家可以一键三连。

目录
相关文章
|
6月前
|
C语言
扫雷游戏
扫雷游戏
46 0
|
4月前
|
存储
|
11月前
|
C语言
扫雷游戏的实现(上)
扫雷游戏的实现
55 0
|
C语言
C/关于扫雷小游戏的创建
C/关于扫雷小游戏的创建
|
6月前
|
人工智能 C语言
三子棋小游戏
三子棋小游戏
|
6月前
|
算法 C语言
三子棋小游戏(可改棋盘大小)
三子棋小游戏(可改棋盘大小)
75 0
|
11月前
|
存储
扫雷小游戏
扫雷小游戏
80 0
|
11月前
扫雷游戏的实现(详解)
扫雷游戏的实现(详解)
93 0
|
11月前
|
C语言
扫雷游戏的实现(下)
扫雷游戏的实现(下)
54 0