操作说明
菜的像个弟弟,大家不要嘲笑
开始之后默认白棋先走,(通过输入坐标的形式来下棋),如果五子连心,游戏结束
package com.jh.test206;
import java.util.Scanner;
public class FiveChessGame206 {
private final int N = 17;
private int score =0 ;
private boolean gameover = false;
private char[][] fiveChess = new char[N+1][N+1];
private Scanner cin = new Scanner(System.in);
private boolean who_am_i = true;
private void init() {
fiveChess[0][0] = ' ';
for (int i = 1; i < N; i++) {
if (i <= 10) {
fiveChess[0][i] = (char) ('0' + i - 1);
} else {
fiveChess[0][i] = (char) ('a' + i - 11);
}
}
for (int j = 1; j < N; j++) {
if (j <= 10) {
fiveChess[j][0] = (char) ('0' + j - 1);
} else {
fiveChess[j][0] = (char) ('a' + j - 11);
}
}
for (int i = 1; i < N; i++) {
for (int j = 1; j < N; j++) {
fiveChess[i][j] = '*';
}
}
}
private void printUI() {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(fiveChess[i][j] + " ");
}
System.out.println();
}
}
private boolean judge(int x, int y, boolean who_am_i) {
if (who_am_i) {
/**
* 横坐标判断
*/
for (int i = y; i >= 0; i--) {
if (fiveChess[x][i] == '#') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("白方胜");
return true;
}
for (int i = y; i < N; i++) {
if (fiveChess[x][i] == '#') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("白方胜");
return true;
}
score = 0;
/**
* 纵坐标判断
*/
for (int i = x; i >= 0; i--) {
if (fiveChess[i][y] == '#') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("白方胜");
return true;
}
for (int i = x; i < N; i++) {
if (fiveChess[i][y] == '#') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("白方胜");
return true;
}
score = 0;
/**
* 反斜杠判断
*/
for (int i = x, j = y; i >= 0 && y >= 0; i--, j--) {
if (fiveChess[i][j] == '#') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("白方胜");
return true;
}
for (int i = x, j = y; i < N && y < N; i++, j++) {
if (fiveChess[i][j] == '#') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("白方胜");
return true;
}
score = 0;
/**
* 斜杠判断
*/
for (int i = x, j = y; i < N && y >= 0; i++, j--) {
if (fiveChess[i][j] == '#') {
score++;
} else
break;
}
if (score > 5) {
gameover = true;
System.out.println("白方胜");
}
for (int i = x, j = y; i >= 0 && y < N; i--, j++) {
if (fiveChess[i][j] == '#') {
score++;
} else
break;
}
if (score > 5) {
gameover = true;
System.out.println("白方胜");
}
return false;
} else {
/**
* 横坐标判断
*/
score = 0;
for (int i = y; i >= 0; i--) {
if (fiveChess[x][i] == '@') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("黑方胜");
return true;
}
for (int i = y; i < N; i++) {
if (fiveChess[x][i] == '@') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("黑方胜");
return true;
}
score = 0;
/**
* 纵坐标判断
*/
for (int i = x; i >= 0; i--) {
if (fiveChess[i][y] == '@') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("黑方胜");
return true;
}
for (int i = x; i < N; i++) {
if (fiveChess[i][y] == '@') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("黑方胜");
return true;
}
score = 0;
/**
* 反斜杠判断
*/
for (int i = x, j = y; i >= 0 && y >= 0; i--, j--) {
if (fiveChess[i][j] == '@') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("黑方胜");
return true;
}
for (int i = x, j = y; i < N && y < N; i++, j++) {
if (fiveChess[i][j] == '@') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("黑方胜");
return true;
}
score = 0;
/**
* 斜杠判断
*/
for (int i = x, j = y; i < N && y >= 0; i++, j--) {
if (fiveChess[i][j] == '@') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("黑方胜");
return true;
}
for (int i = x, j = y; i >= 0 && y < N; i--, j++) {
if (fiveChess[i][j] == '@') {
score++;
} else
break;
}
if (score > 5) {
System.out.println("黑方胜");
return true;
}
return false;
}
}
private int change(char number) {
int numbers = (int) number;
if (numbers >= 48 && numbers <= 57)
return numbers - 48 + 1;
else if (numbers >= 97 && numbers <=102)
return numbers - 97 + 10+1 ;
else
return -1;
}
private boolean noRepeat(int x, int y) {
if (fiveChess[x][y] == '*') {
return true;
} else {
System.out.println("此位置已有棋子,请重新下棋");
return false;
}
}
private void playChess() {
char inputx, inputy;
if (who_am_i == true) {
System.out.println("请白色棋子方下棋,请输入坐标(z,y)");
} else {
System.out.println("请黑色棋子方下棋,请输入坐标(x,y)");
}
inputx = cin.next().charAt(0);
inputy = cin.next().charAt(0);
int x = change(inputx);// change
int y = change(inputy);// change
if (x == -1 || y == -1) {
System.out.println("棋子越界,请重新下棋");
}
if (x != -1 && y != -1 && noRepeat(x, y)) {
if (who_am_i == true) {
fiveChess[x][y] = '#';
} else {
fiveChess[x][y] = '@';
}
if (judge(x, y, who_am_i))
gameover = true;
who_am_i = !who_am_i;
score = 0;
}
}
private void beginner() {
System.out.println("请选择,白方(0),或者黑方(1)下棋(默认白子先行)");
char begin = cin.next().charAt(0);
if (begin == '1') {
who_am_i = false;
}
}
public void run() {
init();
printUI();
beginner();
do {
playChess();
printUI();
} while (gameover == false);
}
public static void main(String[] args) {
FiveChessGame206 demo = new FiveChessGame206();
demo.run();
}
}