要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示。如某位置为地雷,则该位置用数字-1表示,
如该位置不是地雷,则暂时用数字0表示。
编写程序完成在该二维数组中随机布雷的操作,程序读入3个参数:布雷面板的行数(r),列数(c),布置的地雷个数(n),
且要满足0<n<r*c*0.75(即布置地雷的最大密度为75%),程序运行后将n个地雷随机地布置在r*c的二维数组,布置完成后进行扫雷游戏。
import java.util.*; public class Minesweeper { public static void main(String[] args) { Scanner scn = new Scanner(System.in); //输入行和列 int r = Integer.parseInt(scn.nextLine()); int c = Integer.parseInt(scn.nextLine()); if(r<2 || c<2) { System.out.println("输入的行列无效。"); return; } //定义一个二维数组来布雷 int[][] a = new int[r][c]; Random rnd = new Random(); //随机给出雷的个数 int n = rnd.nextInt((int)(r*c*0.75)); System.out.println("雷的个数:"+n); while(n>0) { //随机的布雷,随机产生雷所在行和列 int rr = rnd.nextInt(r); int cc = rnd.nextInt(c); if(a[rr][cc]!=-1) { a[rr][cc]=-1; n--; } } //扫雷 for(int i=0;i<r;i++) { for(int j=0;j<c;j++) { int lei=0; if(a[i][j] == 0) { if(i-1>=0 && j-1>=0 && a[i-1][j-1]==-1) lei++; if(i-1>=0 && a[i-1][j]==-1) lei++; if(j<c-1) { if(i-1>=0 && a[i-1][j+1]==-1) lei++; if(a[i][j+1]==-1) lei++; } if(j-1>=0 && a[i][j-1]==-1) lei++; if(i<r-1) { if(j-1>=0 && a[i+1][j-1]==-1) lei++; if(a[i+1][j]==-1) lei++; } if(i<r-1 && j<c-1) { if(i+1>=1 && j+1>=1 && a[i+1][j+1]==-1) lei++; } a[i][j]=lei; } } } //输出 for(int i=0;i<r;i++) { for(int j=0;j<c;j++) { System.out.print(a[i][j]+"\t"); } System.out.println(); } } }
原文地址:https://www.cnblogs.com/roadlandscape/p/8799261.html
时间: 2024-11-06 19:57:38