BroSharon 2023-01-30 21:58 采纳率: 100%
浏览 41
已结题

关于#c语言#的问题:M1版macbook air,使用vs code照着网上的扫雷程序敲完后遇到下面的问题

M1版macbook air,使用vs code照着网上的扫雷程序敲完后遇到下面的问题。琢磨了好久搞不出来,麻烦各位为我答疑解惑,十分感谢!!先附上源代码,后面两张分别是项目
game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"

void InitBoard(char board[ROWS][COLS],int rows,int cols,char set)
{
    int i=0;
    int j=0;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<cols;j++)
        {
            board[i][j]=set;
        }
    }
}
void DisplayBoard(char board[ROWS][COLS],int row,int col)
{
    int i=0;
    int j=0;
    for(i=0;i<=col;i++)
    {
        printf("%d ",i);
    }
    printf("\n");
    for(i=1;i<=row;i++)
    {
        printf("%d ",i);
        for(j=1;j<=col;j++)
        {
            printf("%c ",board[i][j]);
        }
        printf("\n");
    }
}

void setMine(char mine[ROWS][COLS],int row,int col)
{
    int count=EASY_COUNT;
    while (count)
    {
        int x=rand()%row+1;
        int y=rand()%col+1;
        if(mine[x][y]=='0')
        {
            mine[x][y]='0';
            count--;
        }
    }   
}

int get_mine_count(char mine[ROWS][COLS],int x,int y)
{
    return mine[x-1][y-1]+mine[x-1][y]+mine[x-1][y+1]+mine[x][y-1]+mine[x][y+1]+mine[x-1][y-1]+mine[x-1][y]+mine[x-1][y+1]-8*'0';
}

void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
    int x=0;
    int y=0;
    int win=0;
    while(win<row*col-EASY_COUNT)
    {
        printf("输入坐标:>");
        scanf("%d %d",&x,&y);
        if(x>1&&x<=row&&y>=1&&y<=col)
        {
            if(mine[x][y]=='1')
            {
                printf("哈哈哈,你被炸死了!\n");
                DisplayBoard(mine,ROW,COL);
                break;
            }
            else
            {
                int n=get_mine_count(mine,x,y);
                show[x][y]=n+'0';
                DisplayBoard(show,ROW,COL);
                win++;
            }
        }
        else
        {
            printf("输入坐标非法,请重新输入:>");
        }
        if(win==row*col-EASY_COUNT)
        {
            printf("恭喜你,排雷成功!\n");
            DisplayBoard(mine,ROW,COL);
        }
    }
}

game.h

#ifndef game_h
#define game_h

#include <stdio.h>

#endif /* game_h */
#define _CRT_SECURE_NO_WARNING 1
#include<stdlib.h>
#include<time.h>
#define ROW 9  //用于说明本程序的所有“ROW”意思是9
#define COL 9
#define ROWS ROW+2  //代表本程序中所有的ROWS代表9+2=11
#define COLS COL+2
#define EASY_COUNT 10

void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);

void DisplayBoard(char board[ROWS][COLS],int row,int col);

void setMine(char mine[ROWS][COLS],int row,int col);

void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);


test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void game()
{
    char mine[ROWS][COLS]={0};
    char show[ROWS][COLS]={0};

    InitBoard(mine,ROWS,COLS,'0');
    InitBoard(show,ROWS,COLS,'*');
    setMine(mine,ROW,COL);
    DisplayBoard(mine,ROW,COL);
    FindMine(mine,show,ROW,COL);
}

void menu()
{
    printf("********************************\n");
    printf("**********   1、start   ********\n");
    printf("**********   0、exit    ********\n");
    printf("********************************\n");
}

void test()
{
    int input=0;
    srand((unsigned int)time(NULL));
    do
    {
        menu();//已经执行了函数menu
        printf("请输入:");
        scanf("%d",&input);
        switch (input)
        {
        case 1:
            printf("游戏开始\n");
            game();//直到这里才会生成棋盘
            break;
        case 0:
            printf("游戏结束\n");
            break;
        default :
            printf("非法输入,请重新输入\n");
            break;
        }
    } while (input);
}

int main()
{
    test();
    return 0;
}

img

img


再次向您表达感谢!!

  • 写回答

2条回答 默认 最新

  • CSDN专家-sinJack 2023-01-31 12:46
    关注

    测试了一下没问题,直接放一起测试的。

    #define _CRT_SECURE_NO_WARNING 1
    #include <stdio.h>
    #include<stdlib.h>
    #include<time.h>
    #define ROW 9  //用于说明本程序的所有“ROW”意思是9
    #define COL 9
    #define ROWS ROW+2  //代表本程序中所有的ROWS代表9+2=11
    #define COLS COL+2
    #define EASY_COUNT 10
     
    void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);
     
    void DisplayBoard(char board[ROWS][COLS],int row,int col);
     
    void setMine(char mine[ROWS][COLS],int row,int col);
     
    void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);
     
     
    void InitBoard(char board[ROWS][COLS],int rows,int cols,char set)
    {
        int i=0;
        int j=0;
        for(i=0;i<rows;i++)
        {
            for(j=0;j<cols;j++)
            {
                board[i][j]=set;
            }
        }
    }
    void DisplayBoard(char board[ROWS][COLS],int row,int col)
    {
        int i=0;
        int j=0;
        for(i=0;i<=col;i++)
        {
            printf("%d ",i);
        }
        printf("\n");
        for(i=1;i<=row;i++)
        {
            printf("%d ",i);
            for(j=1;j<=col;j++)
            {
                printf("%c ",board[i][j]);
            }
            printf("\n");
        }
    }
     
    void setMine(char mine[ROWS][COLS],int row,int col)
    {
        int count=EASY_COUNT;
        while (count)
        {
            int x=rand()%row+1;
            int y=rand()%col+1;
            if(mine[x][y]=='0')
            {
                mine[x][y]='0';
                count--;
            }
        }   
    }
     
    int get_mine_count(char mine[ROWS][COLS],int x,int y)
    {
        return mine[x-1][y-1]+mine[x-1][y]+mine[x-1][y+1]+mine[x][y-1]+mine[x][y+1]+mine[x-1][y-1]+mine[x-1][y]+mine[x-1][y+1]-8*'0';
    }
     
    void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
    {
        int x=0;
        int y=0;
        int win=0;
        while(win<row*col-EASY_COUNT)
        {
            printf("输入坐标:>");
            scanf("%d %d",&x,&y);
            if(x>1&&x<=row&&y>=1&&y<=col)
            {
                if(mine[x][y]=='1')
                {
                    printf("哈哈哈,你被炸死了!\n");
                    DisplayBoard(mine,ROW,COL);
                    break;
                }
                else
                {
                    int n=get_mine_count(mine,x,y);
                    show[x][y]=n+'0';
                    DisplayBoard(show,ROW,COL);
                    win++;
                }
            }
            else
            {
                printf("输入坐标非法,请重新输入:>");
            }
            if(win==row*col-EASY_COUNT)
            {
                printf("恭喜你,排雷成功!\n");
                DisplayBoard(mine,ROW,COL);
            }
        }
    }
     
    void game()
    {
        char mine[ROWS][COLS]={0};
        char show[ROWS][COLS]={0};
     
        InitBoard(mine,ROWS,COLS,'0');
        InitBoard(show,ROWS,COLS,'*');
        setMine(mine,ROW,COL);
        DisplayBoard(mine,ROW,COL);
        FindMine(mine,show,ROW,COL);
    }
     
    void menu()
    {
        printf("********************************\n");
        printf("**********   1、start   ********\n");
        printf("**********   0、exit    ********\n");
        printf("********************************\n");
    }
     
    void test()
    {
        int input=0;
        srand((unsigned int)time(NULL));
        do
        {
            menu();//已经执行了函数menu
            printf("请输入:");
            scanf("%d",&input);
            switch (input)
            {
            case 1:
                printf("游戏开始\n");
                game();//直到这里才会生成棋盘
                break;
            case 0:
                printf("游戏结束\n");
                break;
            default :
                printf("非法输入,请重新输入\n");
                break;
            }
        } while (input);
    }
     
    int main()
    {
        test();
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 1月30日

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件