用模块化思维方式打出扫雷游戏


改游戏的关键还是模块化的思维方式

先开始还是进行主页面的书写

用menu函数书写主页面

void menu(void){
printf("************************\n");
printf("****  **1,play  ********\n");
printf("********0,exit *********\n");
printf("->");
return 0;}

用这个进行主页面的打印

进行游戏的判断(对与主页面的break也要注意不要省略)

用do {}while();进行实现

int main(void){
int input;
do{
menu(void);
scanf("%d",&input);
switch(input)
   case 1:
   game(void);
   break;
   case 0:
   printf("退出游戏")'
}while(input)
return 0;}

已经进入游戏中,具体步骤

首先进行数组和字符串的出

始化利用两组字符数组进行初始化!用函数简单化初初始化,减少自己的操作量!

void Initboard(char board[ROWS][COLS],int row,int col,char set){
    int i = 0;
    int j = 0;
    for (i = 0; i < row; i++) {
        for (j = 0; j < col; j++) {
            board[i][j] = set ;
        }
    }
}

进行雷的布置(用自建的函数搞定)

坑人注意,小编用数字1代替了字符1!导致调试非常多时间没有搞定!

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] =  '1';
            count--;
        }
    }
}

然后进行主界面的打印


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 FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col){//mine是雷的布局。show是主页面
    int x = 0;
    int y = 0;
    int win = 0;
    while (win < row*col-EASY_COUNT) {
        printf("请输入要排查的坐>>");
        scanf("%d %d",&x,&y);
        if (x  > 0 && x <= row &&y > 0 && 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("坐标错误,请重新输入\n");
        }
          if (EASY_COUNT == win) {
            printf("恭喜你,排雷成功");
            Displayboard(mine, ROW, COL);
        }
    }
}

在这里有自定义一个函数用来计算周围的雷的个数!

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

——————————————————————————————————————
上面是具体内容,不喜欢不要喷!这个不是复制其他人的,是自己做的!
如果喜欢给小编一个赞好吗?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值