首页 > 解决方案 > 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));
                        }}}}}

上面的代码扩展到几行以涵盖所有选项。如果是普通动作或跳跃和杀戮动作,请帮助我跟踪上一个动作。

标签: javascriptjavaswingarraylist2d-games

解决方案


问题是我让 King-jumping 和普通块在同一个数组上跳跃,我决定将它们分开在不同的 array_list 上,这样在 King 可以移动它之前检查 King_Jumping 数组如果返回 null 然后它移动,通过这种方式,我必须决定检查 King_Jumping Array_List 上是否有任何内容,如果运动是正常跳跃,则返回 null。无论如何感谢您的尝试帮助(如果有的话)!


推荐阅读