테트리스의 방향을 처리하는 방법을 쓰고 있으며 하드 드롭을 작성하는 논리에 대해 혼란스러워합니다. move 메소드는 키를 누를 때마다 호출됩니다.테트리스 - 하드 드롭 충돌을 수정하십시오.
public void move(Direction direction) {
if (canMove(direction)) {
switch (direction) {
case DOWN:
row = row + 1;
break;
case LEFT:
col = col - 1;
break;
case RIGHT:
col = col + 1;
break;
case DROP:
for(int i = row; i < Grid.HEIGHT; i ++){
if(!grid.isSet(i,col)){
row = row + 1;
}
}
break;
}
}
}
내 생각은 블록이 하드 놓을 수 있습니다 멀리 열린 공간을 발견하고 그것을 열심히 드롭에 그 공간을 돌 때까지 행을 추락 반복합니다.
편집 : 이것은 내 canMove 메서드이며, 대소 문자를 변경했습니다. 즉석 제거는 작동하지만 드롭 키를 사용할 때 충돌 문제가있는 것 같습니다.
public boolean canMove(Direction direction) {
if (!ableToMove)
return false;
boolean move = true;
// if the given direction is blocked, we can't move
// remember to check the edges of the grid
switch (direction) {
case DOWN:
if (row == (Grid.HEIGHT - 1) || grid.isSet(row + 1, col))
move = false;
break;
case DROP:
if (row == (Grid.HEIGHT - 1) || grid.isSet(row + 1, col))
move = false;
break;
// currently doesn't support checking LEFT or RIGHT
// MODIFY so that it correctly returns if it can move left or right
case LEFT:
if (col == (0) || grid.isSet(row, col-1))
move = false;
break;
case RIGHT:
if (row == (Grid.WIDTH - 1) || grid.isSet(row, col+1))
move = false;
break;
}
return move;
}
, _는 왜 아주 이해 해달라고 _이 (내가 그의 이름을 잡을 수 있다고 그는 너무 빨리 자신의 게시물을 삭제) 당신은 여기에서 보았다 http://stackoverflow.com/questions/16592898/tetris-hard-drop-logic? – frederick99
그래, 내 코드에서 어떻게 해야할지 모르겠다. – tofokevin