javascript - Java中如何追踪前任King是正常跳还是被Capturing跳
问题描述
我使用 Java 设计了跳棋游戏,King 沿着左右、上下的对角线跳到任何空白处。我可以跟踪决定国王是正常移动还是跳跃并杀死对手的棋子,问题是我如何记录之前的移动是普通移动还是跳跃杀戮移动。我有两个布尔函数来决定是正常移动还是跳跃,这有助于我决定是否进行强制跳跃。
这是我的跳跃布尔函数: public boolean canJumpKing(int player, int r1, int c1, int r2, int c2, int r3, int c3) {
if (r3 < 0 || r3 >= 8 || c3 < 0 || c3 >= 8)
return false;
if (board[r3][c3] != EMPTY)
return false;
for (int i = 1; i < r3 - r1 - 1; i++) {
if (((r3 > r2) && (c3 > c2)))
if ((board[r1 + i][c1 + i] != EMPTY) && (board[r1 + i + 1][c1 + i + 1] != EMPTY))
return false; }
for (int i = 1; i < c1 - c3 - 1; i++) {
if (((r3 < r2) && (c3 < c2)))
if ((board[r1 - i][c1 - i] != EMPTY) && (board[r1 - i - 1][c1 - i - 1] != EMPTY))
return false; }
}
这是我将强制跳跃动作添加到 array_list 的代码:
if (board[row][col] == playerKing) {
if (row<col)
for (int i=1; i<(7-col); i++) {
if (canJumpKing(player, row, col, row+i, col+i, row+1+i, col+1+i)) {
moves.add(new CheckersMove(row, col, row+1+i, col+1+i));
for (int j=1; j<8-(col+1+i); j++){
if (col+j+i+1<8)
if ((board[row+1+j+i][col+j+1+i] != EMPTY))
break;
if ((board[row+1+j+i][col+j+1+i] == EMPTY)) {
moves.add(new CheckersMove(row, col, row+1+j+i, col+j+1+i));
}}}}}
上面的代码扩展到几行以涵盖所有选项。如果是普通动作或跳跃和杀戮动作,请帮助我跟踪上一个动作。
解决方案
问题是我让 King-jumping 和普通块在同一个数组上跳跃,我决定将它们分开在不同的 array_list 上,这样在 King 可以移动它之前检查 King_Jumping 数组如果返回 null 然后它移动,通过这种方式,我必须决定检查 King_Jumping Array_List 上是否有任何内容,如果运动是正常跳跃,则返回 null。无论如何感谢您的尝试帮助(如果有的话)!
推荐阅读
- php - 从 Mysql Explode 中选择图像
- swiftui - SwiftUI:Gesture var 是否可能移入 EnvironmentObject?
- nim-lang - nim 相当于 Python 的 `sys.executable` 是什么?
- bash - Bash 补全在 ZSH/Oh-My-ZSH 中不起作用,因为 COMP_WORDS 不是数组
- ios - 当键盘存在时如何管理 UITextField 向上移动 - 如果存在多个文本字段?
- powershell - 如何将 PowerShell 树输出到文本或 Excel 文件
- symfony - Doctrine 2 - GROUP BY 两列,得到不正确的值
- algorithm - 使所有前缀总和 >=0 所需的最小重新分配
- c++ - 是否可以为 MFC 上的静态文本控件添加文本而不是替换整个文本?
- javascript - 从 observable 填充下拉列表