要為掃雷游戲佈置地雷,掃雷游戲的掃雷面板可以用二維int數組表示。如某位置為地雷,則該位置用數字-1表示, 如該位置不是地雷,則暫時用數字0表示。 編寫程式完成在該二維數組中隨機佈雷的操作,程式讀入3個參數:佈雷面板的行數(r),列數(c),佈置的地雷個數(n), 且要滿足0<n<r*c*0.75( ...
要為掃雷游戲佈置地雷,掃雷游戲的掃雷面板可以用二維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(); } } }