阶段项目---五子棋
目的
串联知识点,检测不足,弥补不足
需求说明
棋盘10*10,玩家 *2(A,B),A在棋盘上落子后B落子,依次往复,直到一方胜利或者棋盘空间用完为止,判断胜利的条件是一条直线或者任意斜线上同时存在A或B的连续5颗棋子
技术实现
1.静态变量
public static 数据类型 变量名 = 变量值;
静态变量只能定义类中,不能定义在方法中 ,静态变量可以在static修饰的方法中使用,也可以在非静态的方法中访问,主要解决在静态方法中不能访问非静态的变量
2.静态方法
语法
public static 返回值类型 方法名(){}
解释说明:
静态方法就相当于一个箱子,只是这个箱子中装的是代码,需要使用的时候,就把这个箱子放在指定的位置即可
示例
public class StaticTest {public static String name = "张三";public static void main(String[] args) {
// System.out.println(name);show();show();}public static void show() {System.out.println("张三");System.out.println("男");System.out.println("20");}
}
实现步骤分析
1.制作棋盘
a.使用输入法中的制表符在控制台直接打印出棋盘,然后寻找落子位置的特征
public static char [][] chessboard = {{'┌','┬','┬','┬','┬','┬','┬','┬','┬','┐'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'└','┴','┴','┴','┴','┴','┴','┴','┴','┘'},};
b.利用二维数组重新制作棋盘
public class Gobang {public static char [][] chessboard = {{'┌','┬','┬','┬','┬','┬','┬','┬','┬','┐'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'└','┴','┴','┴','┴','┴','┴','┴','┴','┘'},};public static String separator = "────";public static void main(String[] args) {System.out.println(" 0 1 2 3 4 5 6 7 8 9");for (int i = 0; i < chessboard.length; i++) {//外层循环控制行System.out.print(i+" ");for (int j = 0; j < chessboard[i].length; j++) {//内层循环控制列if (j == chessboard[i].length - 1) {//最后一列System.out.print(chessboard[i][j]);} else {System.out.print(chessboard[i][j] + separator);//使用print打印,不换行}}System.out.println();if (i < chessboard.length - 1) {//排除最后一行System.out.println(" │ │ │ │ │ │ │ │ │ │");}}}
}
c.棋盘在玩家使用过程中会反复展示,需要使用方法来进行优化
public class Gobang {public static char [][] chessboard = {{'┌','┬','┬','┬','┬','┬','┬','┬','┬','┐'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'└','┴','┴','┴','┴','┴','┴','┴','┴','┘'},};public static String separator = "────";public static void main(String[] args) {showChessboard();}public static void showChessboard(){System.out.println(" 0 1 2 3 4 5 6 7 8 9");for (int i = 0; i < chessboard.length; i++) {//外层循环控制行System.out.print(i+" ");for (int j = 0; j < chessboard[i].length; j++) {//内层循环控制列if (j == chessboard[i].length - 1) {//最后一列System.out.print(chessboard[i][j]);} else {System.out.print(chessboard[i][j] + separator);//使用print打印,不换行}}System.out.println();if (i < chessboard.length - 1) {//排除最后一行System.out.println(" │ │ │ │ │ │ │ │ │ │");}}}
}
2.落子
a.玩家A.B会交替落子
package ed1;public class Gobang {public static char [][] chessboard = {{'┌','┬','┬','┬','┬','┬','┬','┬','┬','┐'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'└','┴','┴','┴','┴','┴','┴','┴','┴','┘'},};public static String separator = "────";public static void main(String[] args) {showChessboard();int totalPosition = chessboard.length*chessboard[0].length;for (int times = 0; times < totalPosition; times++) {System.out.println(times % 2 == 0 ? "请玩家A落子:" : "请玩家B落子:");}}public static void showChessboard(){System.out.println(" 0 1 2 3 4 5 6 7 8 9");for (int i = 0; i < chessboard.length; i++) {//外层循环控制行System.out.print(i+" ");for (int j = 0; j < chessboard[i].length; j++) {//内层循环控制列if (j == chessboard[i].length - 1) {//最后一列System.out.print(chessboard[i][j]);} else {System.out.print(chessboard[i][j] + separator);//使用print打印,不换行}}System.out.println();if (i < chessboard.length - 1) {//排除最后一行System.out.println(" │ │ │ │ │ │ │ │ │ │");}}}
}
b.落子位置必须是0~100之间的整数,且不能使用已经存在棋子的位置
package ed1;import java.util.Scanner;public class Gobang {public static char [][] chessboard = {{'┌','┬','┬','┬','┬','┬','┬','┬','┬','┐'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'└','┴','┴','┴','┴','┴','┴','┴','┴','┘'},};public static String separator = "────";public static char pieceA = '○';public static char pieceB = '■';public static void main(String[] args) {showChessboard();int totalPosition = chessboard.length*chessboard[0].length;Scanner sc = new Scanner(System.in);for (int times = 0; times < totalPosition; times++) {System.out.println(times % 2 == 0 ? "请玩家A落子:" : "请玩家B落子:");int position;while (true) {//保证落子成功//检测scanner中是否有输入的数据并且判断数据是否为整数,如果没有数据,就需要从控制台输入if (sc.hasNextInt()) {position = sc.nextInt();if (position >= 0 && position < totalPosition) {char currentPiece = (times % 2 == 0) ? pieceA : pieceB;// position = 21 13*13 21/13 21%13 = 8int row = position / chessboard.length;//位置除以棋盘数组长度得到行号int col = position % chessboard[0].length;//位置取模棋盘数组的总列数得到行号if(chessboard[row][col] == pieceA || chessboard[row][col] == pieceB){System.out.println("非法落子,请重新选择落子位置");times--;//落子次数减去1,因此此次落子未完成,但需要进入下一次循环continue;}else {chessboard[row][col] = currentPiece;break;}} else {System.out.println("非法落子,请重新选择落子位置");}} else{System.out.println("非法落子,请重新选择落子位置");sc.next();//将scanner中储存的数据取出,防止死循环}}//落子完成后,棋盘需要重新展示showChessboard();}}public static void showChessboard(){System.out.println(" 0 1 2 3 4 5 6 7 8 9");for (int i = 0; i < chessboard.length; i++) {//外层循环控制行System.out.print(i+" ");for (int j = 0; j < chessboard[i].length; j++) {//内层循环控制列if (j == chessboard[i].length - 1) {//最后一列System.out.print(chessboard[i][j]);} else {System.out.print(chessboard[i][j] + separator);//使用print打印,不换行}}System.out.println();if (i < chessboard.length - 1) {//排除最后一行System.out.println(" │ │ │ │ │ │ │ │ │ │");}}}
}
c.落子完成后,需要校验是否获胜
package ed1;import java.util.Scanner;public class Gobang {public static char [][] chessboard = {{'┌','┬','┬','┬','┬','┬','┬','┬','┬','┐'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'└','┴','┴','┴','┴','┴','┴','┴','┴','┘'},};public static String separator = "────";public static char pieceA = '○';public static char pieceB = '■';public static void main(String[] args) {showChessboard();int totalPosition = chessboard.length*chessboard[0].length;Scanner sc = new Scanner(System.in);outer:for (int times = 0; times < totalPosition; times++) {System.out.println(times % 2 == 0 ? "请玩家A落子:" : "请玩家B落子:");int position;char currentPiece = (times % 2 == 0) ? pieceA : pieceB;//当前使用的棋子while (true) {//保证落子成功//检测scanner中是否有输入的数据并且判断数据是否为整数,如果没有数据,就需要从控制台输入if (sc.hasNextInt()) {position = sc.nextInt();if (position >= 0 && position < totalPosition) {// position = 21 13*13 21/13 21%13 = 8int row = position / chessboard.length;//位置除以棋盘数组长度得到行号int col = position % chessboard[0].length;//位置取模棋盘数组的总列数得到行号if(chessboard[row][col] == pieceA || chessboard[row][col] == pieceB){System.out.println("非法落子,请重新选择落子位置");times--;//落子次数减去1,因此此次落子未完成,但需要进入下一次循环continue;}else {chessboard[row][col] = currentPiece;break;}} else {System.out.println("非法落子,请重新选择落子位置");}} else{System.out.println("非法落子,请重新选择落子位置");sc.next();//将scanner中储存的数据取出,防止死循环}}//落子完成后,棋盘需要重新展示showChessboard();//判断获胜情况,一共四种for (int i = 0; i < chessboard.length; i++) {for (int j = 0; j < chessboard[i].length; j++) {//第一种:水平方向上存在同一玩家的连续5颗棋子//(i,j) (i,j+1) (i,j+2) (i,j+3) (i,j+4)boolean case1 =(j + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i][j+1] == currentPiece&& chessboard[i][j+2] == currentPiece&& chessboard[i][j+3] == currentPiece&& chessboard[i][j+4] == currentPiece;//第二种:铅锤方向上存在同一玩家的连续5颗棋子//(i,j) (i+1,j) (i+2,j) (i+3,j) (i+4,j)boolean case2 =(i + 4<chessboard.length)&& chessboard[i][j] == currentPiece&& chessboard[i+1][j] == currentPiece&& chessboard[i+2][j] == currentPiece&& chessboard[i+3][j] == currentPiece&& chessboard[j+4][j] == currentPiece;//第三种:135方向上存在同一玩家的连续5颗棋子//(i,j) (i+1,j+1) (i+2,j+2) (i+3,j+3) (i+4,j+4)boolean case3 =(i + 4<chessboard.length)&& (j + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i+1][j+1] == currentPiece&& chessboard[i+2][j+2] == currentPiece&& chessboard[i+3][j+3] == currentPiece&& chessboard[i+4][j+4] == currentPiece;//第四种:45方向上存在同一玩家的连续5颗棋子//(i,j) (i-1,j+1) (i-2,j+2) (i-3,j+3) (i-4,j+4)boolean case4 =(i>4)&&(i + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i-1][j+1] == currentPiece&& chessboard[i-2][j+2] == currentPiece&& chessboard[i-3][j+3] == currentPiece&& chessboard[i-4][j+4] == currentPiece;if (case1 || case2 || case3 || case4) {System.out.println(times %2 == 0 ? "玩家A获得胜利":"玩家B获得胜利");break outer;}}}}}public static void showChessboard(){System.out.println(" 0 1 2 3 4 5 6 7 8 9");for (int i = 0; i < chessboard.length; i++) {//外层循环控制行System.out.print(i+" ");for (int j = 0; j < chessboard[i].length; j++) {//内层循环控制列if (j == chessboard[i].length - 1) {//最后一列System.out.print(chessboard[i][j]);} else {System.out.print(chessboard[i][j] + separator);//使用print打印,不换行}}System.out.println();if (i < chessboard.length - 1) {//排除最后一行System.out.println(" │ │ │ │ │ │ │ │ │ │");}}}
}
d.棋盘使用完毕还未分出胜负,需要提示
package ed1;import java.util.Scanner;public class Gobang {public static char [][] chessboard = {{'┌','┬','┬','┬','┬','┬','┬','┬','┬','┐'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'└','┴','┴','┴','┴','┴','┴','┴','┴','┘'},};public static String separator = "────";public static char pieceA = '○';//玩家A的棋子public static char pieceB = '■';//玩家B的棋子public static int times = 0;//记录棋盘使用次数,偶数次玩家A落子,奇数次玩家B落子public static void main(String[] args) {showChessboard();int totalPosition = chessboard.length*chessboard[0].length;Scanner sc = new Scanner(System.in);outer:while (times < totalPosition) {System.out.println(times % 2 == 0 ? "请玩家A落子:" : "请玩家B落子:");int position;char currentPiece = (times % 2 == 0) ? pieceA : pieceB;//当前使用的棋子while (true) {//保证落子成功//检测scanner中是否有输入的数据并且判断数据是否为整数,如果没有数据,就需要从控制台输入if (sc.hasNextInt()) {position = sc.nextInt();if (position >= 0 && position < totalPosition) {// position = 21 13*13 21/13 21%13 = 8int row = position / chessboard.length;//位置除以棋盘数组长度得到行号int col = position % chessboard[0].length;//位置取模棋盘数组的总列数得到行号if(chessboard[row][col] == pieceA || chessboard[row][col] == pieceB){System.out.println("非法落子,请重新选择落子位置");times--;//落子次数减去1,因此此次落子未完成,但需要进入下一次循环continue;}else {chessboard[row][col] = currentPiece;break;}} else {System.out.println("非法落子,请重新选择落子位置");}} else{System.out.println("非法落子,请重新选择落子位置");sc.next();//将scanner中储存的数据取出,防止死循环}}//落子完成后,棋盘需要重新展示showChessboard();//判断获胜情况,一共四种for (int i = 0; i < chessboard.length; i++) {for (int j = 0; j < chessboard[i].length; j++) {//第一种:水平方向上存在同一玩家的连续5颗棋子//(i,j) (i,j+1) (i,j+2) (i,j+3) (i,j+4)boolean case1 =(j + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i][j+1] == currentPiece&& chessboard[i][j+2] == currentPiece&& chessboard[i][j+3] == currentPiece&& chessboard[i][j+4] == currentPiece;//第二种:铅锤方向上存在同一玩家的连续5颗棋子//(i,j) (i+1,j) (i+2,j) (i+3,j) (i+4,j)boolean case2 =(i + 4<chessboard.length)&& chessboard[i][j] == currentPiece&& chessboard[i+1][j] == currentPiece&& chessboard[i+2][j] == currentPiece&& chessboard[i+3][j] == currentPiece&& chessboard[j+4][j] == currentPiece;//第三种:135方向上存在同一玩家的连续5颗棋子//(i,j) (i+1,j+1) (i+2,j+2) (i+3,j+3) (i+4,j+4)boolean case3 =(i + 4<chessboard.length)&& (j + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i+1][j+1] == currentPiece&& chessboard[i+2][j+2] == currentPiece&& chessboard[i+3][j+3] == currentPiece&& chessboard[i+4][j+4] == currentPiece;//第四种:45方向上存在同一玩家的连续5颗棋子//(i,j) (i-1,j+1) (i-2,j+2) (i-3,j+3) (i-4,j+4)boolean case4 =(i>4)&&(i + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i-1][j+1] == currentPiece&& chessboard[i-2][j+2] == currentPiece&& chessboard[i-3][j+3] == currentPiece&& chessboard[i-4][j+4] == currentPiece;if (case1 || case2 || case3 || case4) {System.out.println(times %2 == 0 ? "玩家A获得胜利":"玩家B获得胜利");break outer;}}times++;}if(times == totalPosition){//说明棋盘已经用完还未分出胜负System.out.println("平局");}}}public static void showChessboard(){System.out.println(" 0 1 2 3 4 5 6 7 8 9");for (int i = 0; i < chessboard.length; i++) {//外层循环控制行System.out.print(i+" ");for (int j = 0; j < chessboard[i].length; j++) {//内层循环控制列if (j == chessboard[i].length - 1) {//最后一列System.out.print(chessboard[i][j]);} else {System.out.print(chessboard[i][j] + separator);//使用print打印,不换行}}System.out.println();if (i < chessboard.length - 1) {//排除最后一行System.out.println(" │ │ │ │ │ │ │ │ │ │");}}}
}
3.声音特效
为落子,非法落子及获胜添加音效
拷贝文件
package ed1;import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;
import java.util.Scanner;public class Gobang {public static char [][] chessboard = {{'┌','┬','┬','┬','┬','┬','┬','┬','┬','┐'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'├','┼','┼','┼','┼','┼','┼','┼','┼','┤'},{'└','┴','┴','┴','┴','┴','┴','┴','┴','┘'},};public static String separator = "────";public static char pieceA = '○';//玩家A的棋子public static char pieceB = '■';//玩家B的棋子public static int times = 0;//记录棋盘使用次数,偶数次玩家A落子,奇数次玩家B落子public static void main(String[] args) {showChessboard();int totalPosition = chessboard.length*chessboard[0].length;Scanner sc = new Scanner(System.in);outer:while (times < totalPosition) {System.out.println(times % 2 == 0 ? "请玩家A落子:" : "请玩家B落子:");int position;char currentPiece = (times % 2 == 0) ? pieceA : pieceB;//当前使用的棋子while (true) {//保证落子成功//检测scanner中是否有输入的数据并且判断数据是否为整数,如果没有数据,就需要从控制台输入if (sc.hasNextInt()) {position = sc.nextInt();if (position >= 0 && position < totalPosition) {// position = 21 13*13 21/13 21%13 = 8int row = position / chessboard.length;//位置除以棋盘数组长度得到行号int col = position % chessboard[0].length;//位置取模棋盘数组的总列数得到行号if(chessboard[row][col] == pieceA || chessboard[row][col] == pieceB){System.out.println("非法落子,请重新选择落子位置");playAudio("illegal.wav");continue;}else {chessboard[row][col] = currentPiece;playAudio("fill.wav");break;}} else {System.out.println("非法落子,请重新选择落子位置");playAudio("illegal.wav");}} else{System.out.println("非法落子,请重新选择落子位置");playAudio("illegal.wav");sc.next();//将scanner中储存的数据取出,防止死循环}}//落子完成后,棋盘需要重新展示showChessboard();//判断获胜情况,一共四种for (int i = 0; i < chessboard.length; i++) {for (int j = 0; j < chessboard[i].length; j++) {//第一种:水平方向上存在同一玩家的连续5颗棋子//(i,j) (i,j+1) (i,j+2) (i,j+3) (i,j+4)boolean case1 =(j + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i][j+1] == currentPiece&& chessboard[i][j+2] == currentPiece&& chessboard[i][j+3] == currentPiece&& chessboard[i][j+4] == currentPiece;//第二种:铅锤方向上存在同一玩家的连续5颗棋子//(i,j) (i+1,j) (i+2,j) (i+3,j) (i+4,j)boolean case2 =(i + 4<chessboard.length)&& chessboard[i][j] == currentPiece&& chessboard[i+1][j] == currentPiece&& chessboard[i+2][j] == currentPiece&& chessboard[i+3][j] == currentPiece&& chessboard[j+4][j] == currentPiece;//第三种:135方向上存在同一玩家的连续5颗棋子//(i,j) (i+1,j+1) (i+2,j+2) (i+3,j+3) (i+4,j+4)boolean case3 =(i + 4<chessboard.length)&& (j + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i+1][j+1] == currentPiece&& chessboard[i+2][j+2] == currentPiece&& chessboard[i+3][j+3] == currentPiece&& chessboard[i+4][j+4] == currentPiece;//第四种:45方向上存在同一玩家的连续5颗棋子//(i,j) (i-1,j+1) (i-2,j+2) (i-3,j+3) (i-4,j+4)boolean case4 =(i>4)&&(i + 4<chessboard[i].length)&& chessboard[i][j] == currentPiece&& chessboard[i-1][j+1] == currentPiece&& chessboard[i-2][j+2] == currentPiece&& chessboard[i-3][j+3] == currentPiece&& chessboard[i-4][j+4] == currentPiece;if (case1 || case2 || case3 || case4) {System.out.println(times %2 == 0 ? "玩家A获得胜利":"玩家B获得胜利");playAudio("win.wav");break outer;}}times++;}if(times == totalPosition){//说明棋盘已经用完还未分出胜负System.out.println("平局");}}}public static void showChessboard(){System.out.println(" 0 1 2 3 4 5 6 7 8 9");for (int i = 0; i < chessboard.length; i++) {//外层循环控制行System.out.print(i+" ");for (int j = 0; j < chessboard[i].length; j++) {//内层循环控制列if (j == chessboard[i].length - 1) {//最后一列System.out.print(chessboard[i][j]);} else {System.out.print(chessboard[i][j] + separator);//使用print打印,不换行}}System.out.println();if (i < chessboard.length - 1) {//排除最后一行System.out.println(" │ │ │ │ │ │ │ │ │ │");}}}public static void playAudio(String fileName){URL url = Gobang.class.getClassLoader().getResource(fileName);AudioClip clip = Applet.newAudioClip(url);clip.play();try {Thread.sleep(50L);} catch (InterruptedException e) {}}
}