把下面语言转换为JAVA#include iostream#include cstdlib#include ctimeusing namespace std; 储存棋盘状态的二维数组int chessBoard88 = 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
import java.util.Scanner; import java.util.Random;
public class Gobang { // 储存棋盘状态的二维数组 static int[][] chessBoard = new int[8][8];
// 判断胜负
public 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;
}
// 计算估价函数
public 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;
}
// 人类玩家落子
public static void humanPlayer(int[] coord) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入落子位置(x, y):");
coord[0] = scanner.nextInt();
coord[1] = scanner.nextInt();
while (chessBoard[coord[1]][coord[0]] != 0) {
System.out.print("该位置已有棋子,请重新输入落子位置(x, y):");
coord[0] = scanner.nextInt();
coord[1] = scanner.nextInt();
}
chessBoard[coord[1]][coord[0]] = 1;
}
// 电脑玩家落子
public static void computerPlayer(int[] coord) {
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;
coord[0] = j;
coord[1] = i;
}
}
}
}
chessBoard[coord[1]][coord[0]] = 2;
}
// 打印棋盘
public 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[] coord = new int[2];
int turn = 1; // 1表示人类玩家,2表示电脑玩家
// 初始化棋盘
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
chessBoard[i][j] = 0;
}
}
while (!isWin(1) && !isWin(2)) {
printChessBoard();
if (turn == 1) {
humanPlayer(coord);
} else {
computerPlayer(coord);
}
turn
原文地址: https://www.cveoy.top/t/topic/eDKJ 著作权归作者所有。请勿转载和采集!