初学Java,写了一个扫雷代码来锻炼一下自己的代码能力。
一、代码思路
代码思路很重要,如果事先就想好了代码思路,那么写这一个代码肯定是事半功倍,比在哪里瞎打要强不知道多少。
经过思考,觉得可以创建一个二维数组来记录情况
未翻开的牌:(统一显示 █ )
数组的值 代表
-1 雷
0 旁边没有雷
1 旁边有一个雷
以此类推
翻开的牌则:
if(a[x][y] == 9) System.out.print("?");
if(a[x][y] == 10) System.out.print("?");
if(a[x][y] == 11) System.out.print("①");
if(a[x][y] == 12) System.out.print("②");
if(a[x][y] == 13) System.out.print("③");
if(a[x][y] == 14) System.out.print("④");
if(a[x][y] == 15) System.out.print("⑤");
if(a[x][y] == 16) System.out.print("⑥");
if(a[x][y] == 17) System.out.print("⑦");
if(a[x][y] == 18) System.out.print("⑧");
二、代码主题部分
注意不要越界和不要重复打开
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int x,y;
int a[][]=new int[10][20];
produce(a);
show(a);
while(true){
x=scanner.nextInt();y=scanner.nextInt();
if(x<=0||y<=0||x>10||y>20) {System.out.println("越界!!");continue;} //防止越界
if(a[x-1][y-1]>=10) {System.out.println("已开!!!");continue;} //防止打开重复
if(bomb(a,x,y)) break;
draw(a,x,y);
show(a);
if(All(a)){ System.out.println("你避过了所有地雷!!!");break; }
}
}
三、函数部分
1.显示函数
打一个方格
public static void show(int a[][]) {
int lie = 0,x =0,y=0;
System.out.print(" ┃1 ");
for (short i = 2; i <= 20; i++){
if(i<9)System.out.print("┃"+i+" ");
else System.out.print("┃"+i);
}
System.out.println();
System.out.print(" ");
for (short i = 0; i <= 20; i++) { //输出第一行
if (i == 0) System.out.print("┏─");
else if (i == 20) System.out.println("┓");
else System.out.print("┳─");
}
for (short i = 1; i < 2 * 10; i++) {
if (i % 2 == 0) {
System.out.print(" ");
for (short j = 0; j <= 20; j++) {
if (j == 0) System.out.print("┣─");
else if (j == 20) System.out.println("┫");
else System.out.print("╋─");
}
}
if (i % 2 == 1) {
if(lie+1 >= 10) System.out.print(lie+1);else System.out.print(" " + (lie+1));lie++;
for (short j = 0; j <= 2*20; j++) {
if (j % 2 == 0) System.out.print("┃");
else {
if(a[x][y] <= 8) System.out.print("█&