题目 1096: Minesweeper

题目描述
扫雷你玩过扫雷吗?这个可爱的小游戏带有一定的操作系统,我们不记得它的名字。游戏的目标是找到所有地雷在M x N字段中的位置。游戏在一个正方形中显示一个数字,告诉您该正方形附近有多少个地雷。每个方格最多具有八个相邻方格。左侧的4 x 4字段包含两个地雷,每个地雷由一个*''字符表示。如果我们通过上述提示号表示同一字段,那么我们将在右侧显示该字段:* ... ....。* .. .... * 100 2210 1 * 10 1110 输入 输入将包含任意数量的字段。每个字段的第一行包含两个整数n和m(0 <n,m $ \ le $ 100),分别代表该字段的行数和列数。接下来的n行中的每行都包含正好是该字段的m个字符。安全方块以。’‘表示,矿用方块以*''表示,两者均不带引号。n = m = 0的第一条字段行表示输入的结尾,不应进行处理。 输出 对于每个字段,仅在一行上显示消息“字段#x:”,其中x代表从1开始的字段编号。接下来的n行应包含用。’'字符替换为数字的字段。那个广场附近的地雷。字段输出之间必须有一个空行。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
    	int jl=1;
        Scanner sr = new Scanner(System.in);   
       for(;;)
       {
    	   int n=sr.nextInt();
    	   int m=sr.nextInt();
    	   if(n==m&&n==0)
    	   {
    		   break;
    	   }
    	   int sz[][]=new int [n][m];
    	   for(int a=0;a<n;a++)
    	   {
    		   int d=0;
    		   String zf=sr.next();
    		   
    		   for(int e=0;e<zf.length();e++)
    		   {
    			   if(zf.charAt(e)=='*')
    			   {
    			     d=e;
    				   sz[a][d]=1000;
    				   if(a>0&&d>0)
    				   {
    				   sz[a-1][d-1]+=1;
    				   }
    				   if(a>0)
    				   {
    					   sz[a-1][d]+=1;  
    				   }
    				   if(d>0)
    				   {
    					  sz[a][d-1]+=1;
    				   }
    				   if(a<n-1&&d<m-1)
    				   {
    					   sz[a+1][d+1]+=1;
    				   }
    				   if(a<n-1)
    				   {
    					   sz[a+1][d]+=1;  
    				   }
    				   if(d<m-1)
    				   {
    					  sz[a][d+1]+=1;
    				   }
    				   if(a>0&&d<m-1)
    				   {
    					   sz[a-1][d+1]+=1;
    				   }
    				   if(a<n-1&&d>0)
    				   {
    					   sz[a+1][d-1]+=1;
    				   }
    			   }
    		   } 
    		   }
       System.out.println("Field #"+jl+":");
       jl++;
    	   for(int a=0;a<n;a++)
    	   {
    		   for(int d=0;d<m;d++)
    		   {
    			   if(sz[a][d]>=1000)
    			   {
    				   System.out.print("*");
    			   }
    			   else
    			   {
    			   System.out.print(sz[a][d]);
    			   }
    		   }
    		   System.out.println();
    		   }
    	   System.out.println();
       }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值