把下面代码换成JAVA#includeiostream#includecstdlib#includectimeusingnamespacestd;储存棋盘状态的二维数组intchessBoard88=0000000000000000000000000000000000000000000000000000000000000000;判断胜负boolisWinintcolor判断横向连续五个棋子fori
import java.util.Scanner; import java.util.Random;
public class Gobang { // 储存棋盘状态的二维数组 static int[][] chessBoard = {{0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}};
// 判断胜负
static boolean isWin(int color) {
// 判断横向连续五个棋子
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 4; j++) {
if (chessBoard[i][j] == color && chessBoard[i][j+1] == color && chessBoard[i][j+2] == color && chessBoard[i][j+3] == color && chessBoard[i][j+4] == color) {
return true;
}
}
}
// 判断纵向连续五个棋子
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 8; j++) {
if (chessBoard[i][j] == color && chessBoard[i+1][j] == color && chessBoard[i+2][j] == color && chessBoard[i+3][j] == color && chessBoard[i+4][j] == color) {
return true;
}
}
}
// 判断正斜向连续五个棋子
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (chessBoard[i][j] == color && chessBoard[i+1][j+1] == color && chessBoard[i+2][j+2] == color && chessBoard[i+3][j+3] == color && chessBoard[i+4][j+4] == color) {
return true;
}
}
}
// 判断反斜向连续五个棋子
for (int i = 0; i < 4; i++) {
for (int j = 4; j < 8; j++) {
if (chessBoard[i][j] == color && chessBoard[i+1][j-1] == color && chessBoard[i+2][j-2] == color && chessBoard[i+3][j-3] == color && chessBoard[i+4][j-4] == color) {
return true;
}
}
}
return false;
}
// 计算估价函数
static int evaluate(int color, int x, int y) {
int score = 0;
int count = 0;
// 横向
for (int i = x-1; i >= 0; i--) {
if (chessBoard[y][i] == color) {
count++;
} else {
break;
}
}
for (int i = x+1; i < 8; i++) {
if (chessBoard[y][i] == color) {
count++;
} else {
break;
}
}
switch (count) {
case 1: score += 1; break;
case 2: score += 10; break;
case 3: score += 100; break;
case 4: score += 1000; break;
}
count = 0;
// 纵向
for (int i = y-1; i >= 0; i--) {
if (chessBoard[i][x] == color) {
count++;
} else {
break;
}
}
for (int i = y+1; i < 8; i++) {
if (chessBoard[i][x] == color) {
count++;
} else {
break;
}
}
switch (count) {
case 1: score += 1; break;
case 2: score += 10; break;
case 3: score += 100; break;
case 4: score += 1000; break;
}
count = 0;
// 正斜向
for (int i = x-1, j = y-1; i >= 0 && j >= 0; i--, j--) {
if (chessBoard[j][i] == color) {
count++;
} else {
break;
}
}
for (int i = x+1, j = y+1; i < 8 && j < 8; i++, j++) {
if (chessBoard[j][i] == color) {
count++;
} else {
break;
}
}
switch (count) {
case 1: score += 1; break;
case 2: score += 10; break;
case 3: score += 100; break;
case 4: score += 1000; break;
}
count = 0;
// 反斜向
for (int i = x+1, j = y-1; i < 8 && j >= 0; i++, j--) {
if (chessBoard[j][i] == color) {
count++;
} else {
break;
}
}
for (int i = x-1, j = y+1; i >= 0 && j < 8; i--, j++) {
if (chessBoard[j][i] == color) {
count++;
} else {
break;
}
}
switch (count) {
case 1: score += 1; break;
case 2: score += 10; break;
case 3: score += 100; break;
case 4: score += 1000; break;
}
return score;
}
// 人类玩家落子
static void humanPlayer(int[] pos) {
Scanner scanner = new Scanner(System.in);
System.out.println("请落子(x,y):");
pos[0] = scanner.nextInt();
pos[1] = scanner.nextInt();
while (chessBoard[pos[1]][pos[0]] != 0) {
System.out.println("该位置已有棋子,请重新落子(x,y):");
pos[0] = scanner.nextInt();
pos[1] = scanner.nextInt();
}
chessBoard[pos[1]][pos[0]] = 1;
}
// 电脑玩家落子
static void computerPlayer(int[] pos) {
Random random = new Random();
int maxScore = 0;
// 遍历棋盘,找到最高分数的位置
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (chessBoard[i][j] == 0) {
int score = evaluate(2, j, i);
if (score > maxScore) {
maxScore = score;
pos[0] = j;
pos[1] = i;
}
}
}
}
chessBoard[pos[1]][pos[0]] = 2;
}
// 打印棋盘
static void printChessBoard() {
System.out.print(" ");
for (int i = 0; i < 8; i++) {
System.out.print(i);
}
System.out.println();
for (int i = 0; i < 8; i++) {
System.out.print(i);
for (int j = 0; j < 8; j++) {
if (chessBoard[i][j] == 0) {
System.out.print("+");
} else if (chessBoard[i][j] == 1) {
System.out.print("●");
} else {
System.out.print("○");
}
}
System.out.println();
}
}
public static void main(String[] args) {
int[] pos = new int[2];
int turn = 1; // 1表示人类玩家,2表示电脑玩家
while (!isWin(1) && !isWin(2)) {
printChessBoard();
if (turn == 1) {
humanPlayer(pos);
} else {
computerPlayer(pos);
}
turn = 3 - turn; // 切换玩家
}
printChessBoard();
if (isWin(1)) {
System.out.println("人类玩家获胜!");
} else {
System.out.println("电脑玩家获胜!");
}
}
原文地址: https://www.cveoy.top/t/topic/eDKw 著作权归作者所有。请勿转载和采集!