扫雷

本文深入探讨了扫雷游戏的算法实现,详细介绍了如何通过计算每个单元格周围地雷的数量来更新游戏界面,包括输入输出处理、边界条件判断及核心算法逻辑。适合对算法和游戏开发感兴趣的读者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述 :

扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相邻的单元格。 0<n,m<=100

输入说明 :

输入包含若干个矩阵,对于每个矩阵,第一行包含两个整数n和m(0<n,m<=100),分别表示这个矩阵的行数和列数。接下来n行每行包含m个字符。安全区域用‘.’表示,有地雷区域用’*'表示。当n=m=0时输入结束。

输出说明 :

对于第i个矩阵,首先在单独的一行里打印序号:“Field #i:”,接下来的n行中,读入的’.'应被该位置周围的地雷数所代替。输出的每两个矩阵必须用一个空行隔开。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>
char a[100][100];
int m,n;
void bb(int i,int j)
{
    int sum=0,x=i-1,y=j-1,x1=i+1,y1=j+1,i1,j1;
    if(a[i][j]=='*')
    {
        printf("*");
    }
    else
    {
        if(i==0)
        {
            x=0;
        }
        if(j==0)
        {
            y=0;
        }
        if(i==m-1)
        {
            x1=m-1;
        }
        if(j==n-1)
        {
            y1=n-1;
        }
        for(i1=x;i1<=x1;i1++)
        {
            for(j1=y;j1<=y1;j1++)
            {
                if(a[i1][j1]=='*')
                {
                    sum++;
                }
            }
        }
       printf("%d",sum);
    }
}
int main()
{
   int i,j,count=0;
   char x;
   while(1)
   {
       scanf("%d %d",&m,&n);
       if(m==0&&n==0)
       {
           break;
       }
       count++;
      for(i=0;i<m;i++)
   {
       for(j=0;j<n;j++)
       {
         scanf("%c",&x);
         if(x==10)
         {
            j--;
         }
            if(x!=10)
         {
             a[i][j]=x;
         }
        }
   }
 printf("Field #%d:\n",count);
   for(i=0;i<m;i++)
   {
       for(j=0;j<n;j++)
       {
          bb(i,j);
       }
       printf("\n");
   }
   printf("\n");
   }
   return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值