用java实现五子棋三手交换_什么是五子棋三手交换五手两打
时间: 2023-12-03 22:46:50 浏览: 33
五子棋三手交换是指在五子棋比赛中,双方各下三手后可以进行交换,即交换先手后手的顺序。这种规则的目的是为了增加游戏的公平性。
五手两打则是指在五子棋比赛中,双方各下五手后可以进行“两打”,即一方可以一次性下两个棋子。
下面是用 Java 实现五子棋三手交换的示例代码:
```java
import java.util.Scanner;
public class Gobang {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] board = new int[15][15]; // 棋盘
int player = 1; // 玩家,1 表示黑方,2 表示白方
int count = 0; // 步数计数器
while (true) {
System.out.print("请输入您要落子的位置(x,y):");
int x = scanner.nextInt();
int y = scanner.nextInt();
if (x < 0 || x >= 15 || y < 0 || y >= 15) {
System.out.println("输入的位置不合法,请重新输入!");
continue;
}
if (board[x][y] != 0) {
System.out.println("该位置已经有棋子,请重新输入!");
continue;
}
board[x][y] = player; // 落子
count++; // 步数加 1
// 判断胜负
if (checkWin(board, x, y)) {
System.out.println("恭喜" + (player == 1 ? "黑方" : "白方") + "获胜!");
break;
}
// 判断平局
if (count == 225) {
System.out.println("平局!");
break;
}
// 交换先手后手
if (count == 3) {
System.out.println("当前步数为3,是否交换先手后手(y/n)?");
String answer = scanner.next();
if (answer.equalsIgnoreCase("y")) {
player = 3 - player; // 交换先手后手
System.out.println("交换成功!");
}
}
player = 3 - player; // 切换玩家
}
}
/**
* 判断是否胜利
*
* @param board 棋盘
* @param x 最后一个落子的横坐标
* @param y 最后一个落子的纵坐标
* @return 是否胜利
*/
private static boolean checkWin(int[][] board, int x, int y) {
int player = board[x][y];
int count = 1;
// 水平方向
for (int i = x - 1; i >= 0 && board[i][y] == player; i--) {
count++;
}
for (int i = x + 1; i < 15 && board[i][y] == player; i++) {
count++;
}
if (count >= 5) {
return true;
}
// 竖直方向
count = 1;
for (int j = y - 1; j >= 0 && board[x][j] == player; j--) {
count++;
}
for (int j = y + 1; j < 15 && board[x][j] == player; j++) {
count++;
}
if (count >= 5) {
return true;
}
// 左上到右下方向
count = 1;
for (int i = x - 1, j = y - 1; i >= 0 && j >= 0 && board[i][j] == player; i--, j--) {
count++;
}
for (int i = x + 1, j = y + 1; i < 15 && j < 15 && board[i][j] == player; i++, j++) {
count++;
}
if (count >= 5) {
return true;
}
// 右上到左下方向
count = 1;
for (int i = x - 1, j = y + 1; i >= 0 && j < 15 && board[i][j] == player; i--, j++) {
count++;
}
for (int i = x + 1, j = y - 1; i < 15 && j >= 0 && board[i][j] == player; i++, j--) {
count++;
}
if (count >= 5) {
return true;
}
return false;
}
}
```
该程序实现了简单的五子棋对弈,支持交换先手后手。你可以在此基础上进行修改,实现五手两打等其他规则。