#java #android-studio #canvas #ondraw #ontouch
Вопрос:
Я пытаюсь создать приложение для шашек в Android studio с помощью Java. До сих пор мне удавалось рисовать доску и фигуры, используя пользовательский вид и реализуя метод рисования. Моя борьба заключается в том, чтобы попытаться переместить фигуры, которые я нарисовал на доске. У меня есть метод, который окрашивает доступные ячейки, которые может перемещать выбранная фигура, но я точно не знаю, как переместить фигуру в эти ячейки при нажатии на них. В моем методе 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 amp;amp; 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, row * cellSize, (col - 1) * cellSize, (row - 1) * 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, (col - 1) * cellSize, row * cellSize,
selectedSqaureMoveColorPaint);
}
if (board.isRightCellAvailable(playerOneTurn, board.getSelectedRow() - 1, board.getSelcectedCol() - 1)) {
if(board.isJumpable()){
canvas.drawRect((col 2) * cellSize, (row 2) * cellSize, (col 1) * cellSize, (row 1) * cellSize,
selectedSqaureMoveColorPaint);
}else{
canvas.drawRect((col 1) * cellSize, (row 1) * cellSize, col * cellSize, row * cellSize,
selectedSqaureMoveColorPaint);
}
}
}else{
if (board.isRightCellAvailable(playerOneTurn, board.getSelectedRow() - 1, board.getSelcectedCol() - 1)) {
if(board.isJumpable()){
canvas.drawRect((col 2) * cellSize, (row 2) * cellSize, (col 1) * cellSize, (row 1) * cellSize,
selectedSqaureMoveColorPaint);
}else{
canvas.drawRect((col 1) * cellSize, (row 1) * cellSize, col * cellSize, row * cellSize,
selectedSqaureMoveColorPaint);
}
}
}
}
}else{
if(board.getBoard()[row-1][col-1].getColor() == playerTwoPieceColor){
if (board.isLeftCellAvailable(playerOneTurn, board.getSelectedRow() - 1, board.getSelcectedCol() - 1)) {
if(board.isJumpable()){
canvas.drawRect((col - 3) * cellSize, (row - 3) * cellSize, (col - 2) * 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, board.getSelectedRow() - 1, board.getSelcectedCol() - 1)) {
if(board.isJumpable()){
canvas.drawRect((col 2) * cellSize, (row - 3) * cellSize, (col 1) * cellSize, (row-2) * cellSize,
selectedSqaureMoveColorPaint);
}else{
canvas.drawRect((col 1)*cellSize, (row-2)*cellSize, col*cellSize, (row-1)*cellSize,
selectedSqaureMoveColorPaint);
}
}
}else{
if (board.isRightCellAvailable(playerOneTurn, board.getSelectedRow() - 1, board.getSelcectedCol() - 1)) {
if(board.isJumpable()){
canvas.drawRect((col 2) * cellSize, (row - 3) * cellSize, (col 1) * cellSize, (row-2) * cellSize,
selectedSqaureMoveColorPaint);
}else{
canvas.drawRect((col 1)*cellSize, (row-2)*cellSize, col*cellSize, (row-1)*cellSize,
selectedSqaureMoveColorPaint);
}
}
}
}
}
}
}
invalidate();
}