五子棋怎么用Java写
时间: 2023-12-01 19:03:58 浏览: 38
五子棋是一种非常经典的棋类游戏,用Java语言来实现也是非常简单的。下面是一个简单的五子棋实现代码:
```java
import java.util.Scanner;
public class Gobang {
private static char[][] board = new char[15][15];
private static boolean isBlack = true;
public static void main(String[] args) {
initBoard();
printBoard();
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.print(isBlack ? "Black" : "White");
System.out.print(" player input the position (e.g. 1,2): ");
String input = scanner.nextLine();
String[] pos = input.split(",");
int row = Integer.parseInt(pos[0]) - 1;
int col = Integer.parseInt(pos[1]) - 1;
if (row >= 0 && row < 15 && col >= 0 && col < 15 && board[row][col] == '\u0000') {
board[row][col] = isBlack ? 'X' : 'O';
printBoard();
if (checkWin(row, col)) {
System.out.println(isBlack ? "Black" : "White" + " player wins!");
break;
}
isBlack = !isBlack;
} else {
System.out.println("Invalid position, please input again.");
}
}
scanner.close();
}
private static boolean checkWin(int row, int col) {
char c = isBlack ? 'X' : 'O';
int count = 0;
for (int i = row - 4; i <= row + 4; i++) {
if (i >= 0 && i < 15 && board[i][col] == c) {
count++;
if (count == 5) {
return true;
}
} else {
count = 0;
}
}
count = 0;
for (int j = col - 4; j <= col + 4; j++) {
if (j >= 0 && j < 15 && board[row][j] == c) {
count++;
if (count == 5) {
return true;
}
} else {
count = 0;
}
}
count = 0;
for (int i = row - 4, j = col - 4; i <= row + 4; i++, j++) {
if (i >= 0 && i < 15 && j >= 0 && j < 15 && board[i][j] == c) {
count++;
if (count == 5) {
return true;
}
} else {
count = 0;
}
}
count = 0;
for (int i = row - 4, j = col + 4; i <= row + 4; i++, j--) {
if (i >= 0 && i < 15 && j >= 0 && j < 15 && board[i][j] == c) {
count++;
if (count == 5) {
return true;
}
} else {
count = 0;
}
}
return false;
}
private static void printBoard() {
System.out.print(" ");
for (int i = 0; i < 15; i++) {
System.out.print((i + 1) + " ");
}
System.out.println();
for (int i = 0; i < 15; i++) {
System.out.print((i + 1) + " ");
for (int j = 0; j < 15; j++) {
System.out.print(board[i][j] == '\u0000' ? "+ " : (board[i][j] + " "));
}
System.out.println((i + 1));
}
System.out.print(" ");
for (int i = 0; i < 15; i++) {
System.out.print((i + 1) + " ");
}
System.out.println();
}
private static void initBoard() {
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
board[i][j] = '\u0000';
}
}
}
}
```
这个实现中,我们使用一个二维字符数组来表示棋盘,其中空格用`\u0000`表示,黑子用`'X'`表示,白子用`'O'`表示。然后使用一个布尔变量`isBlack`来表示当前轮到黑子还是白子。在主循环中,我们通过`Scanner`来获取用户输入的行和列,然后判断是否合法(即位置在棋盘内并且该位置没有棋子)。如果合法,就在棋盘上放置一个棋子,并检查是否有人胜出。如果有,就输出胜利信息并退出循环,否则轮到下一个玩家。
检查胜利的方法`checkWin`比较简单,就是分别在水平、竖直、左上右下、右上左下四个方向上判断是否有五个同色棋子相连。
最后,我们使用`printBoard`方法来打印当前的棋盘状态,使玩家可以更方便地进行游戏。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)