java - 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, 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();
}
解决方案
推荐阅读
- java - MyPayroll3.java:44:错误:找不到符号
- r - 从 str_extract_all 的输出中删除空字符串
- excel - 将 .txt 保存为 .csv 会取消宏在文件中所做的所有更改。如何预防?
- reactjs - 为什么在使用酶的“挂载”功能时,我的玩笑模拟功能不会与模拟对象一起执行?
- python - cx_Freeze 缺少模块
- database - Symfony4 具有相同结构的多个数据库
- python - 获取像素位置
- javascript - 使用扩展运算符的 ES6 对象克隆也在修改输入
- javascript - 使用 mousemove 事件转换 jQuery 眼瞳跟踪器
- node.js - 如何在 Ubuntu 18.10 中安装 Node Js?