微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Checkers App 无法通过 ontouch 和 ondraw 移动棋子

如何解决Checkers App 无法通过 ontouch 和 ondraw 移动棋子

我正在尝试使用 Java 在 android studio 中制作一个 Checkers 应用程序。到目前为止,我已经能够使用自定义视图并实现 on draw 方法来绘制棋盘和棋子。我的挣扎是试图将我画的棋子移到板上。我有一种方法可以为所选片段可以移动的可用单元格着色,但是我不知道如何在单击它们时将片段移动到这些单元格。在我的 onTouch 方法中,我所做的就是为板设置选定的行和列,以便我可以突出显示该单元格的可用移动。除此之外,我不知道如何为我的下一步获取数据并实际移动我的棋子。我知道我的代码有点草率,我仍然需要添加辅助方法,因为我重用了代码,但代码有效,我只是不知道如何移动我绘制的部分。

public boolean onTouchEvent(MotionEvent event) {
    boolean isValid;

    float x = event.getX();
    float y = event.getY();

    int action = event.getAction();

    if(action == MotionEvent.ACTION_DOWN){
        board.setSelectedRow((int)Math.ceil(y/cellSize));
        board.setSelcectedCol((int)Math.ceil(x/cellSize));
        isValid = true;
    }else{
        isValid = false;
    }

    return isValid;
}

private void colorAvailableCells(Canvas canvas,int row,int col) {
    if (board.getSelectedRow() != -1 && board.getSelcectedCol() != -1) {
        canvas.drawRect(col * cellSize,row * cellSize,(col - 1) * cellSize,(row - 1) * cellSize,selectedSquareColorPaint);
        if (board.getBoard()[board.getSelectedRow() - 1][board.getSelcectedCol() - 1] == null) {
            canvas.drawRect(col * cellSize,selectedSquareColorPaint);
        }else{
            if(playerOneTurn){
                if(board.getBoard()[row-1][col-1].getColor() == playerOnePieceColor){
                    if (board.isLeftCellAvailable(playerOneTurn,board.getSelectedRow() - 1,board.getSelcectedCol() - 1)) {
                        if(board.isJumpable()){
                            canvas.drawRect((col - 3) * cellSize,(row + 2) * cellSize,(col - 2) * cellSize,(row+1) * cellSize,selectedSqaureMoveColorPaint);
                        }else{
                            canvas.drawRect((col - 2) * cellSize,(row + 1) * cellSize,selectedSqaureMoveColorPaint);
                        }
                        if (board.isRightCellAvailable(playerOneTurn,board.getSelcectedCol() - 1)) {
                            if(board.isJumpable()){
                                canvas.drawRect((col + 2) * cellSize,(col+1) * cellSize,selectedSqaureMoveColorPaint);
                            }else{
                                canvas.drawRect((col + 1) * cellSize,col * cellSize,selectedSqaureMoveColorPaint);
                            }
                        }
                    }else{
                        if (board.isRightCellAvailable(playerOneTurn,selectedSqaureMoveColorPaint);
                            }
                        }
                    }
                }
            }else{
                if(board.getBoard()[row-1][col-1].getColor() == playerTwoPieceColor){
                    if (board.isLeftCellAvailable(playerOneTurn,(row - 3) * cellSize,(row - 2) * cellSize,selectedSqaureMoveColorPaint);
                        }else{
                            canvas.drawRect((col-2)*cellSize,(row-2)*cellSize,(col-1)*cellSize,(row-1)*cellSize,selectedSqaureMoveColorPaint);
                        }

                        if (board.isRightCellAvailable(playerOneTurn,(row-2) * cellSize,selectedSqaureMoveColorPaint);
                            }else{
                                canvas.drawRect((col+1)*cellSize,col*cellSize,selectedSqaureMoveColorPaint);
                            }
                        }
                    }
                }
            }
        }
    }
    invalidate();
}

checkAvailableCell method in action

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。