巩固Java基础时写的小Demo,源码如下:
package javagobang;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Gobang {
private static int BOARD_SIZE = 15;
private String[][] board;
public void initBoard() {
board = new String[BOARD_SIZE][BOARD_SIZE];
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
if (i==0 && j==0) {
board[i][j] = " ┏";
continue;
}
if (i==0 && j==BOARD_SIZE-1) {
board[i][j] = " ┓";
continue;
}
if (i==BOARD_SIZE-1 && j==0) {
board[i][j] = " ┗";
continue;
}
if (i==BOARD_SIZE-1 && j==BOARD_SIZE-1) {
board[i][j] = " ┛";
continue;
}
if (i==0 && j!=0 && j!= BOARD_SIZE-1) {
board[i][j] = " ┳";
continue;
}
if (i==BOARD_SIZE-1 && j!=0 && j!= BOARD_SIZE-1) {
board[i][j] = " ┻";
continue;
}
if (j==0 && i!=0 && i!= BOARD_SIZE-1) {
board[i][j] = " ┣";
continue;
}
if (j==BOARD_SIZE-1 && i!=0 && i!= BOARD_SIZE-1) {
board[i][j] = " ┫";
continue;
}
board[i][j] = " ╋";
}
}
}
public static void main(String[] args) throws Exception {
Gobang fiveson = new Gobang();
boolean isOver = false;
fiveson.initBoard();
fiveson.printBoard();
System.out.println("输入坐标(eg:1,1)开始!");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputStr = null;
int who = 0;
String son = " ◉";
while ((inputStr = br.readLine()) != null) {
if ("".equals(inputStr) || inputStr==null) {
continue;
}
if (isOver==true && "R".equals(inputStr)) {
isOver = false;
fiveson.initBoard();
fiveson.printBoard();
System.out.println("输入坐标(eg:1,1)开始!");
}
String[] posStrArr = inputStr.split(",");
int xPos = 0;
int yPos = 0;
try {
xPos = Integer.parseInt(posStrArr[0]);
yPos = Integer.parseInt(posStrArr[1]);
} catch (Exception e) {
System.out.println("键入无效 重新落子:");
continue;
}
String poString = fiveson.board[xPos][yPos];
if (fiveson.checkPosition(xPos, yPos)) {
System.out.println("坐标已落子 重新落子:");
continue;
}
fiveson.board[xPos][yPos] = son;
fiveson.printBoard();
boolean result = fiveson.think(xPos,yPos);
if (result) {
isOver = true;
System.out.println(son+" 胜! \"R\"重新开始");
continue;
}
who++;
if (who%2==1) {
son = " ◯";
}else {
son = " ◉";
}
System.out.println("交换棋手 输入坐标:");
}
}
private void printBoard() {
for (int i = 0; i < BOARD_SIZE; i++) {
for (int j = 0; j < BOARD_SIZE; j++) {
System.out.print(board[i][j]);
}
System.out.print("\n");
}
}
public boolean think (int xIndex, int yIndex) {
int count = 1;
for(int x=xIndex-1;x>=0;x--){
if (isEqual(x, yIndex, xIndex, yIndex)) {
count++;
} else {
break;
}
}
for(int x=xIndex+1;x<=BOARD_SIZE;x++){
if (isEqual(x, yIndex, xIndex, yIndex)) {
count++;
} else {
break;
}
}
if (count>=5) {
return true;
}else{
count = 1;
}
for(int y=yIndex-1;y>=0;y--){
if (isEqual(xIndex, y, xIndex, yIndex)) {
count++;
} else {
break;
}
}
for(int y=yIndex+1;y<=BOARD_SIZE;y++){
if (isEqual(xIndex, y, xIndex, yIndex)) {
count++;
} else {
break;
}
}
if (count>=5) {
return true;
}else{
count = 1;
}
for(int x=xIndex+1,y=yIndex-1;y>=0&&x<=BOARD_SIZE;x++,y--){
if (isEqual(x, y, xIndex, yIndex)) {
count++;
} else {
break;
}
}
for(int x=xIndex-1,y=yIndex+1;y<=BOARD_SIZE&&x>=0;x--,y++){
if (isEqual(x, y, xIndex, yIndex)) {
count++;
} else {
break;
}
}
if (count>=5) {
return true;
}else{
count = 1;
}
for(int x=xIndex-1,y=yIndex-1;y>=0&&x>=0;x--,y--){
if (isEqual(x, y, xIndex, yIndex)) {
count++;
} else {
break;
}
}
for(int x=xIndex+1,y=yIndex+1;y<=BOARD_SIZE&&x<=BOARD_SIZE;x++,y++){
if (isEqual(x, y, xIndex, yIndex)) {
count++;
} else {
break;
}
}
if (count>=5) {
return true;
}else{
count = 1;
}
return false;
}
public boolean isEqual(int x, int y, int xIndex, int yIndex) {
if (board[x][y].equals(board[xIndex][yIndex])) {
return true;
}else {
return false;
}
}
public boolean checkPosition(int x, int y) {
String poString = board[x][y];
if (poString!=" ╋" && poString!=" ┏" && poString!=" ┓" && poString!=" ┗" && poString!=" ┛" && poString!=" ┳" && poString!=" ┻" && poString!=" ┣" && poString!=" ┫") {
return true;
}
return false;
}
}
效果截图如下: