package com.itheima.chessdemo;
import java.util.Scanner;
public class ChessUtil {
//棋盘数组赋值"+",并在第一行第一列打印行数
public void Board(String[][] board){
for (int i = 1; i <=20 ; i++) {
for (int j = 1; j <=20 ; j++) {
board[i][j] ="+";
}
for (int j = 0; j <=20 ; j++) {
board[0][j] =j+"";
board[j][0] = j+"";
}
}
}
//打印棋盘
public void PrintBoard(String[][] board){
for (int i = 0; i <=20 ; i++) {
for (int j = 0; j <=20 ; j++) {
System.out.print(board[i][j]+"\t");
}
System.out.println();
}
}
//黑方下棋
public void Black(String[][] board){
Scanner scan = new Scanner(System.in);
while (true){
System.out.println("输入黑方棋子横坐标:");
int bx = scan.nextInt();
System.out.println("输入黑方棋子纵坐标:");
int by = scan.nextInt();
if(bx <= 20 && bx >=1 && by <=20 && by >=1){
String temp = board[by][bx];
if (temp.equals("*") || temp.equals("o")){
System.out.println("该坐标已有棋子");
continue;
}
board[by][bx] = "*";
PrintBoard(board);
break;
}else{
System.out.println("坐标输入错误,请重新输入:");
}
}
}
//白方下棋
public void White(String[][] board){
Scanner scan = new Scanner(System.in);
while (true){
System.out.println("输入白方棋子横坐标:");
int wx = scan.nextInt();
System.out.println("输入白方棋子纵坐标:");
int wy = scan.nextInt();
if(wx <= 20 && wx >= 1 && wy <=20 && wy >= 1){
String temp = board[wy][wx];
if (temp.equals("*") || temp.equals("o")){
System.out.println("该坐标已有棋子");
continue;
}
board[wy][wx] = "o";
PrintBoard(board);
break;
}else{
System.out.println("坐标输入错误,请重新输入:");
}
}
}
//判断黑棋五连
public boolean blackIsWin(String[][] board) {
boolean flag = false;
StringBuilder stringBuilder = new StringBuilder();
//横向 -----
loop1:
for (int i = 1; i <= 20; i++) {
for (int j = 1; j <= 20; j++) {
if (board[i][j].equals("*")) {
stringBuilder.append(board[i][j]);
String strTemp = stringBuilder.toString();
if (strTemp.equals("*****")) {
System.out.println("黑棋胜");
flag = true;
break loop1;
}
} else {
stringBuilder.setLength(0);
}
}
}
/*
纵向 |||
*/
// StringBuilder stringBuilder2 = new StringBuilder();
loop2:
for (int i = 1; i <= 20; i++) {
for (int j = 1; j <= 20; j++) {
if (board[j][i].equals("*")) {
stringBuilder.append(board[j][i]);
String strTemp = stringBuilder.toString();
if (strTemp.equals("*****")) {
System.out.println("黑棋胜");
flag = true;
break loop2;
}
} else {
stringBuilder.setLength(0);
}
}
}
//右斜 \\\\
// StringBuilder stringBuilder3 = new StringBuilder();
loop3:
for (int i = 1; i <= 20; i++) {
int num = 0;
for (int j = 1; j <= 20; j++) {
if (board[i+num][j].equals("*")) {
stringBuilder.append(board[i+num][j]);
String strTemp = stringBuilder.toString();
if (strTemp.equals("*****")) {
System.out.println("黑棋胜");
flag = true;
break loop3;
}
num++;
} else {
stringBuilder.setLength(0);
num = 0;
}
}
}
// 左斜 ///
// StringBuilder stringBuilder4 = new StringBuilder();
loop4:
for (int i = 1; i <= 20; i++) {
int num = 0;
for (int j = 20; j >= 1; j--) {
if (board[i+num][j].equals("*")) {
stringBuilder.append(board[i+num][j]);
String strTemp = stringBuilder.toString();
if (strTemp.equals("*****")) {
System.out.println("黑棋胜");
flag = true;
break loop4;
}
num++;
} else {
stringBuilder.setLength(0);
num = 0;
}
}
}
if (flag == true){
return true;
}else {
return false;
}
}
//判断白棋五连
public boolean whiteIsWin(String[][] board){
boolean flag = false;
StringBuilder stringBuilder = new StringBuilder();
//横向 -----
loop1:
for (int i = 1; i <= 20; i++) {
for (int j = 1; j <= 20; j++) {
if (board[i][j].equals("o")) {
stringBuilder.append(board[i][j]);
String strTemp = stringBuilder.toString();
if (strTemp.equals("ooooo")) {
System.out.println("白棋胜");
flag = true;
break loop1;
}
} else {
stringBuilder.setLength(0);
}
}
}
/*
纵向 ||||
*/
// StringBuilder stringBuilder2 = new StringBuilder();
loop2:
for (int i = 1; i <= 20; i++) {
for (int j = 1; j <= 20; j++) {
if (board[j][i].equals("o")) {
stringBuilder.append(board[j][i]);
String strTemp = stringBuilder.toString();
if (strTemp.equals("ooooo")) {
System.out.println("白棋胜");
flag = true;
break loop2;
}
} else {
stringBuilder.setLength(0);
}
}
}
//右斜 \\\\
// StringBuilder stringBuilder3 = new StringBuilder();
loop3:
for (int i = 1; i <= 20; i++) {
int num = 0;
for (int j = 1; j <= 20; j++) {
if (board[i+num][j].equals("o")) {
stringBuilder.append(board[i+num][j]);
String strTemp = stringBuilder.toString();
if (strTemp.equals("ooooo")) {
System.out.println("白棋胜");
flag = true;
break loop3;
}
num++;
} else {
stringBuilder.setLength(0);
num = 0;
}
}
}
// 左斜 ///
// StringBuilder stringBuilder4 = new StringBuilder();
loop4:
for (int i = 1; i <= 20; i++) {
int num = 0;
for (int j = 20; j >= 1; j--) {
if (board[i+num][j].equals("o")) {
stringBuilder.append(board[i+num][j]);
String strTemp = stringBuilder.toString();
if (strTemp.equals("ooooo")) {
System.out.println("白棋胜");
flag = true;
break loop4;
}
num++;
} else {
stringBuilder.setLength(0);
num = 0;
}
}
}
if (flag == true){
return true;
}else {
return false;
}
}
}
测试类
package com.itheima.chessdemo;
public class Chess {
public static void main(String[] args) {
String[][] board = new String[21][21];
ChessUtil chess = new ChessUtil();
chess.Board(board);
chess.PrintBoard(board);
while (true){
chess.Black(board);
boolean bf = chess.blackIsWin(board);
if (bf == true){
break;
}
chess.White(board);
boolean wf = chess.whiteIsWin(board);
if (wf == true){
break;
}
}
}
}