阶段项目---五子棋详细随笔
阶段项目---五子棋
目的
串联知识点,检测不足,弥补不足
需求说明
棋盘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 = 8
int 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 = 8
int 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 = 8
int 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 = 8
int 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) {}
}
}

浙公网安备 33010602011771号