• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C语言第十课----------------扫雷----------数组的经典练手题

武飞扬头像
老秦包你会
帮助1

作者前言

🎂        ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂

   🎂      作者介绍:                              🎂🎂

       🎂 🎉🎉🎉🎉🎉🎉🎉              🎂

          🎂作者id:老秦包你会,         🎂

简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

             喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨         🎂🎂🎂🎂🎂🎂🎂🎂

                 🎂个人主页::小小页面🎂

                  🎂gitee页面:秦大大🎂

                   🎂🎂🎂🎂🎂🎂🎂🎂
        🎂  一个爱分享的小博主 欢迎小可爱们前来借鉴🎂

_______________________________________________________

______________________________________________________________________

目录

扫雷

        分析

        代码

——————————————————————————————————————

扫雷

学新通

 如上图,玩扫雷的原理就是避开雷找出所有的雷就胜利,废话不多说,我们直接开始扫雷分析

分析

俗话说的好,玩游戏第一步进入游戏,我们就写出一个游戏菜单出来,让玩家选择

  1.  
    void meun()
  2.  
    {
  3.  
    printf("********* 扫雷 ********\n");
  4.  
    printf("************************************\n");
  5.  
    printf("********* 0.exit ********\n");
  6.  
    printf("********* 1.paly ********\n");
  7.  
    printf("************************************\n");
  8.  
     
  9.  
     
  10.  
    }

下面我们要写一个框架,选择玩或者不玩,

  1.  
    int input;
  2.  
    srand((unsigned)time(NULL));
  3.  
    do
  4.  
    {
  5.  
    meun();
  6.  
    printf("进入扫雷界面,请选择>");
  7.  
    scanf("%d", &input);
  8.  
    switch (input)
  9.  
    {
  10.  
    case 0:
  11.  
    printf("退出游戏\n");
  12.  
    break;
  13.  
    case 1:
  14.  
    printf("开始游戏\n");
  15.  
    game();
  16.  
    break;
  17.  
    default :
  18.  
    printf("输入不符合规定,请重新输入\n");
  19.  
    break;
  20.  
     
  21.  
    }
学新通

下面我们就要开始写扫雷的内容了,首先扫雷我们要给出扫雷的游戏画面,在这个过程中我们可以创建两个数组,一个用于计算,一个用于显示

学新通

 左边是计算,右边是显示 然后我们就要设计一下输出的界面,要玩家有好的体验

  1.  
    void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
  2.  
    {
  3.  
    int i = 0;
  4.  
    for (i = 0; i < rows; i )
  5.  
    {
  6.  
    int j = 0;
  7.  
    for (j = 0; j < cols; j )
  8.  
    {
  9.  
     
  10.  
    mine[i][j] = str;
  11.  
    }
  12.  
    }
  13.  
     
  14.  
     
  15.  
    }
学新通
  1.  
    void Carving(char mine[ROWS][COLS], int row, int col)
  2.  
    {
  3.  
     
  4.  
    int i = 0;
  5.  
    for (i = 0; i <= row; i )
  6.  
    {
  7.  
    printf("%d ", i);
  8.  
    }
  9.  
    printf("\n");
  10.  
    printf("--------------------\n");
  11.  
    for (i = 1; i <= row; i )
  12.  
    {
  13.  
    printf("%d|", i);
  14.  
    int j = 0;
  15.  
    for (j = 1; j <= col; j )
  16.  
    {
  17.  
     
  18.  
    printf("%c ", mine[i][j]);
  19.  
    }
  20.  
    printf("\n");
  21.  
    }
  22.  
    }
学新通

然后我们就要布置雷了,雷的设计要随机可以使用rand(),记得设计出源点srand((unsigned)time(NULL))

代码如下:

  1.  
    void Production(char mine[ROWS][COLS], int row, int col)
  2.  
    {
  3.  
    int count = Count;
  4.  
    while (count)
  5.  
    {
  6.  
    int x = ((rand() % (row)) 1);
  7.  
    int y = ((rand() % (col)) 1);
  8.  
     
  9.  
    if (mine[x][y] == '0')
  10.  
    {
  11.  
    mine[x][y] = '1';
  12.  
    count--;
  13.  
    }
  14.  
    }
  15.  
    }
学新通

下面我们就要模拟玩家扫雷了,玩家扫雷要输入坐标, 然后判断是否踩到雷或者已经排查过了,如果没有就要统计周边雷的个数,然后反馈给显示数组,最后判断是否排除完全部雷了,

  1.  
    void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
  2.  
    {
  3.  
    int count = 0;
  4.  
    int x = 0;
  5.  
    int y = 0;
  6.  
    while (1)
  7.  
    {
  8.  
    printf("请玩家输入坐标:>");
  9.  
    scanf("%d %d", &x, &y);
  10.  
    if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
  11.  
    {
  12.  
    if (mine[x][y] == '0')
  13.  
    {
  14.  
    mine[x][y] = ' ';
  15.  
    count ;
  16.  
    //统计周边的雷数
  17.  
    int sum = 0;
  18.  
    int i = x - 1;
  19.  
    for (i = x - 1; i <= x 1; i )
  20.  
    {
  21.  
    int j = y - 1;
  22.  
    for (j = y - 1; j <= y 1; j )
  23.  
    {
  24.  
    if (i != x && j != y)
  25.  
    sum = sum (mine[i][j] - '0');
  26.  
    }
  27.  
    }
  28.  
    show_mine[x][y] = '0' sum;
  29.  
    printf("扫雷情况:\n");
  30.  
    Carving(show_mine, ROW, COL);
  31.  
    printf("\n");
  32.  
    if (count == (row * col) - Count)
  33.  
    {
  34.  
    printf("你胜利了\n");
  35.  
    goto aa;
  36.  
     
  37.  
     
  38.  
    }
  39.  
    }
  40.  
    else if (mine[x][y] == '1')
  41.  
    {
  42.  
    printf("你被炸死了,游戏结束\n");
  43.  
    break;
  44.  
    }
  45.  
     
  46.  
    }
  47.  
    else
  48.  
    {
  49.  
    printf("请重新输入,你输入的不符合规定\n");
  50.  
    }
  51.  
    }
  52.  
    aa:
  53.  
    ;
  54.  
     
  55.  
    }
学新通

 下面是全部代码:

扫雷.c

  1.  
    #include"扫雷.h"
  2.  
    void meun()
  3.  
    {
  4.  
    printf("********* 扫雷 ********\n");
  5.  
    printf("************************************\n");
  6.  
    printf("********* 0.exit ********\n");
  7.  
    printf("********* 1.paly ********\n");
  8.  
    printf("************************************\n");
  9.  
     
  10.  
     
  11.  
    }
  12.  
    int main()
  13.  
    {
  14.  
    int input;
  15.  
    srand((unsigned)time(NULL));
  16.  
    do
  17.  
    {
  18.  
    meun();
  19.  
    printf("进入扫雷界面,请选择>");
  20.  
    scanf("%d", &input);
  21.  
    switch (input)
  22.  
    {
  23.  
    case 0:
  24.  
    printf("退出游戏\n");
  25.  
    break;
  26.  
    case 1:
  27.  
    printf("开始游戏\n");
  28.  
    game();
  29.  
    break;
  30.  
    default :
  31.  
    printf("输入不符合规定,请重新输入\n");
  32.  
    break;
  33.  
     
  34.  
    }
  35.  
     
  36.  
     
  37.  
    } while (input);
  38.  
     
  39.  
     
  40.  
     
  41.  
     
  42.  
     
  43.  
    return 0;
  44.  
    }
学新通

扫雷函数.c

  1.  
    #include"扫雷.h"
  2.  
    void game()
  3.  
    {
  4.  
    char mine[ROWS][COLS];
  5.  
    char show_mine[ROWS][COLS];
  6.  
    //数组初始化
  7.  
    initialization(mine, ROWS, COLS, '0');
  8.  
    initialization(show_mine, ROWS, COLS, '*');
  9.  
     
  10.  
    //布置雷
  11.  
    Production(mine, ROW, COL);
  12.  
     
  13.  
    //雕刻扫雷棋盘
  14.  
    Carving(mine, ROW, COL);
  15.  
    printf("\n");
  16.  
    Carving(show_mine, ROW, COL);
  17.  
     
  18.  
    //玩家扫雷
  19.  
    paly_mine(mine, show_mine, ROW, COL);
  20.  
    /*printf("%p", &mine);
  21.  
    printf("%p", &show_mine);*/
  22.  
     
  23.  
    }
  24.  
     
  25.  
    void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
  26.  
    {
  27.  
    int i = 0;
  28.  
    for (i = 0; i < rows; i )
  29.  
    {
  30.  
    int j = 0;
  31.  
    for (j = 0; j < cols; j )
  32.  
    {
  33.  
     
  34.  
    mine[i][j] = str;
  35.  
    }
  36.  
    }
  37.  
     
  38.  
     
  39.  
    }
  40.  
     
  41.  
    void Carving(char mine[ROWS][COLS], int row, int col)
  42.  
    {
  43.  
     
  44.  
    int i = 0;
  45.  
    for (i = 0; i <= row; i )
  46.  
    {
  47.  
    printf("%d ", i);
  48.  
    }
  49.  
    printf("\n");
  50.  
    printf("--------------------\n");
  51.  
    for (i = 1; i <= row; i )
  52.  
    {
  53.  
    printf("%d|", i);
  54.  
    int j = 0;
  55.  
    for (j = 1; j <= col; j )
  56.  
    {
  57.  
     
  58.  
    printf("%c ", mine[i][j]);
  59.  
    }
  60.  
    printf("\n");
  61.  
    }
  62.  
    }
  63.  
    //布置雷
  64.  
    void Production(char mine[ROWS][COLS], int row, int col)
  65.  
    {
  66.  
    int count = Count;
  67.  
    while (count)
  68.  
    {
  69.  
    int x = ((rand() % (row)) 1);
  70.  
    int y = ((rand() % (col)) 1);
  71.  
     
  72.  
    if (mine[x][y] == '0')
  73.  
    {
  74.  
    mine[x][y] = '1';
  75.  
    count--;
  76.  
    }
  77.  
    }
  78.  
    }
  79.  
     
  80.  
    //玩家扫雷
  81.  
    void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
  82.  
    {
  83.  
    int count = 0;
  84.  
    int x = 0;
  85.  
    int y = 0;
  86.  
    while (1)
  87.  
    {
  88.  
    printf("请玩家输入坐标:>");
  89.  
    scanf("%d %d", &x, &y);
  90.  
    if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
  91.  
    {
  92.  
    if (mine[x][y] == '0')
  93.  
    {
  94.  
    mine[x][y] = ' ';
  95.  
    count ;
  96.  
    //统计周边的雷数
  97.  
    int sum = 0;
  98.  
    int i = x - 1;
  99.  
    for (i = x - 1; i <= x 1; i )
  100.  
    {
  101.  
    int j = y - 1;
  102.  
    for (j = y - 1; j <= y 1; j )
  103.  
    {
  104.  
    if (i != x && j != y)
  105.  
    sum = sum (mine[i][j] - '0');
  106.  
    }
  107.  
    }
  108.  
    show_mine[x][y] = '0' sum;
  109.  
    printf("扫雷情况:\n");
  110.  
    Carving(show_mine, ROW, COL);
  111.  
    printf("\n");
  112.  
    if (count == (row * col) - Count)
  113.  
    {
  114.  
    printf("你胜利了\n");
  115.  
    goto aa;
  116.  
     
  117.  
     
  118.  
    }
  119.  
    }
  120.  
    else if (mine[x][y] == '1')
  121.  
    {
  122.  
    printf("你被炸死了,游戏结束\n");
  123.  
    break;
  124.  
    }
  125.  
     
  126.  
    }
  127.  
    else
  128.  
    {
  129.  
    printf("请重新输入,你输入的不符合规定\n");
  130.  
    }
  131.  
    }
  132.  
    aa:
  133.  
    ;
  134.  
     
  135.  
    }
学新通

扫雷.h

  1.  
    #include<stdio.h>
  2.  
    #include<stdlib.h>
  3.  
    #include<time.h>
  4.  
     
  5.  
    #define ROW 9
  6.  
    #define COL 9
  7.  
    #define ROWS ROW 2
  8.  
    #define COLS COL 2
  9.  
    #define Count 10
  10.  
    //
  11.  
    void game(void);
  12.  
    //初始化
  13.  
    void initialization(char mine[ROWS][COLS], int row, int col, char str);
  14.  
    //打印棋盘
  15.  
    void Carving(char mine[ROWS][COLS], int row, int col);
  16.  
    //布置雷
  17.  
    void Production(char mine[ROWS][COLS], int row, int col);
  18.  
    //玩家扫雷
  19.  
    vo
学新通

总结:

扫雷代码就在这里了,这个代码还可以进一步改进,但是由于时间原因,其他功能没写,有不懂的小可啊可以私聊我

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhggfkig
系列文章
更多 icon
同类精品
更多 icon
继续加载