请写出java五子棋以数组储存棋子时,如何输出胜利棋子的坐标
时间: 2024-02-22 16:56:42 浏览: 36
假设我们用一个二维数组 `board` 来存储棋盘,其中 `board[i][j]` 表示第 `i` 行第 `j` 列的位置,存储的值为:
- 0:表示该位置没有棋子
- 1:表示该位置为黑子
- 2:表示该位置为白子
现在假设黑方获胜,我们可以遍历整个棋盘,找到所有符合胜利条件的棋子,然后输出它们的坐标。
具体实现代码如下:
```java
// 判断是否存在连续的五个棋子
public boolean checkWin(int[][] board, int x, int y, int color) {
// 水平方向
int count = 0;
for (int j = y; j < y + 5; j++) {
if (j >= board[0].length || board[x][j] != color) {
break;
}
count++;
}
if (count == 5) {
return true;
}
// 垂直方向
count = 0;
for (int i = x; i < x + 5; i++) {
if (i >= board.length || board[i][y] != color) {
break;
}
count++;
}
if (count == 5) {
return true;
}
// 左上到右下对角线方向
count = 0;
for (int i = x, j = y; i < x + 5 && j < y + 5; i++, j++) {
if (i >= board.length || j >= board[0].length || board[i][j] != color) {
break;
}
count++;
}
if (count == 5) {
return true;
}
// 右上到左下对角线方向
count = 0;
for (int i = x, j = y; i < x + 5 && j >= y - 4; i++, j--) {
if (i >= board.length || j < 0 || board[i][j] != color) {
break;
}
count++;
}
if (count == 5) {
return true;
}
return false; // 没有获胜
}
// 输出所有胜利的棋子的坐标
public void printWinningPieces(int[][] board) {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] == 1 && checkWin(board, i, j, 1)) {
System.out.println("黑方胜利,坐标为:" + i + "," + j);
} else if (board[i][j] == 2 && checkWin(board, i, j, 2)) {
System.out.println("白方胜利,坐标为:" + i + "," + j);
}
}
}
}
```
这段代码中,`checkWin` 方法用于判断某个位置是否存在连续的五个棋子,`printWinningPieces` 方法则用于遍历整个棋盘,找到所有符合胜利条件的棋子,并输出它们的坐标。