2017-04-15 6 views
0

테트리스의 방향을 처리하는 방법을 쓰고 있으며 하드 드롭을 작성하는 논리에 대해 혼란스러워합니다. 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; 
} 
+0

, _는 왜 아주 이해 해달라고 _이 (내가 그의 이름을 잡을 수 있다고 그는 너무 빨리 자신의 게시물을 삭제) 당신은 여기에서 보았다 http://stackoverflow.com/questions/16592898/tetris-hard-drop-logic? – frederick99

+0

그래, 내 코드에서 어떻게 해야할지 모르겠다. – tofokevin

답변

0

DROP 경우에 요구되는 변화가

누군가가 언급 한 바와 같이
case DROP: 
     while(canMove(DOWN)){ 
      row = row + 1; 
     } 
     break; 
+0

이 작동하지만, 이제는 드롭을 사용할 때 충돌과 관련된 문제가 발생합니다. – tofokevin

+0

_collision? _canMove는 블록이 이동할 수있을 때만 'true'를 반환합니다. 권리? – frederick99

+0

여기에서 문제를 이해할 수 없습니다. 'canMove'가 잘 작동하면 문제가 없어야합니다. collision_과 함께 _problem이 무엇을 의미합니까? – frederick99