2014-04-10 8 views
0

간단한 패들 게임을위한 치트 코드를 구현하려고하는데, 키의 특정 순서 (UP, UP, DOWN, DOWN, LEFT, LEFT, RIGHT, RIGHT)가있을 때만 활성화해야합니다. 나는 노력하고있다. 그러나 나는 그것을 얻을 수 없다!Java - 특정 키 누르기 순서를들을 수 있습니까?

if(up >= 2){ 
     if(down >= 2){ 
      if(left >= 2){ 
       if(right >= 2){ 
        cheat = true; 
        g.setColor(0x00FF0000); 
        g.fillRect(x, y, canvas.getWidth(), 5); 
        g.fillRect(x, y - 5, 5, 5); 
        g.fillRect(canvas.getWidth() - 5, y - 5, 5, 5); 
        x = 0; 
        width = canvas.getWidth(); 
        height = canvas.getHeight(); 
       }else{ 
        g.setColor(0x00FF0000); 
        g.fillRect(x, y, width, height); 
        g.fillRect(x, y - height, height, height); 
        g.fillRect(x + width - height, y - height, height, height); 
        System.out.println(up + " " + down + " " + left + " " + right + "right"); 
       } 
      }else{ 
       g.setColor(0x00FF0000); 
       g.fillRect(x, y, width, height); 
       g.fillRect(x, y - height, height, height); 
       g.fillRect(x + width - height, y - height, height, height); 
       right = 0;System.out.println(up + " " + down + " " + left + " " + right + "left"); 
      } 
     }else{ 
      g.setColor(0x00FF0000); 
      g.fillRect(x, y, width, height); 
      g.fillRect(x, y - height, height, height); 
      g.fillRect(x + width - height, y - height, height, height); 
      left = 0; right = 0;System.out.println(up + " " + down + " " + left + " " + right + "down"); 
     } 
    }else{ 
     g.setColor(0x00FF0000); 
     g.fillRect(x, y, width, height); 
     g.fillRect(x, y - height, height, height); 
     g.fillRect(x + width - height, y - height, height, height); 
     down = 0; left = 0; right = 0;System.out.println(up + " " + down + " " + left + " " + right + "up"); 
    } 

프로그램이 50ms마다 업데이트됩니다. 위쪽, 왼쪽, 아래쪽, 오른쪽은 키 릴스터입니다. 키를 누르면 카운터처럼 추가됩니다. g.fillRect와 g.setColor 및 System.out 전체를 무시하십시오 (작동 방식과 문제를 직접 해결하는 방법을 찾으려했습니다). 사용자가 올바른 키 순서를 입력하지 않으면 카운터가 재설정되어야하지만 업데이트가 매 50ms이므로 카운터를 나사로 고정합니다.

키 누르기의 특정 순서를 감지하는 방법이 있습니까 아니면 그냥 불가능합니다.

+0

키를 누를 때마다 키 코드가 생성됩니다. 자, 주문을 직접 확인하고 활성화하지 않으시겠습니까? – TheLostMind

답변

0

당신은 내가 키 코드로 두 개의 배열을 만들 것이

int cheat = 0; //keeps track of how many were pressed in order 

if (cheat == 0 && upButtonPressed) 
    cheat++; 
elseif (cheat == 1 && upButtonPressed) 
    cheat++; 
elseif(cheat == 2 && downButtonPressed) 
    cheat++; 
//rest of the order 
else 
    cheat = 0; 

if (cheat == 8) //or however many buttons need to be pressed 
    //do whatever you want to happen when the cheat is activated 
+0

분명히이 모든 것은 키 이벤트가 발생할 때마다 호출되는 메서드입니다. – yitzih

+0

아, 정말 고마워요 !! 이것은 훌륭하게 작동했습니다. – user3296002

0

버튼을 클릭 할 때마다 KeyEvent를받는 객체를 만들어야합니다. 개체는 순서대로 누른 키의 현재 목록을 추적하며 목록이 사용자가 제공 한 패턴과 일치하는지 확인하기 위해 추가 될 때마다 스택을 검사합니다. 사용자가 패턴과 일치하지 않는 키를 입력하면 스택을 지우는 것을 잊지 마십시오!

0

처럼 뭔가를 할 수 있습니다. 하나는 게임 액션 코드 용이고 다른 하나는 해당 키 코드 용입니다. (D 패드 나 조이스틱이없는 전화기에서 키 조합을 입력하는 다른 방법을 제공하기를 원할 것입니다.

int[] keys1 = {getKeyCode(UP), getKeyCode(UP), getKeyCode(DOWN), getKeyCode(DOWN), getKeyCode(LEFT), getKeyCode(LEFT), getKeyCode(RIGHT), getKeyCode(RIGHT)}; 
int[] keys2 = {KEY_NUM2, KEY_NUM2, KEY_NUM8, KEY_NUM8, KEY_NUM4, KEY_NUM4, KEY_NUM6, KEY_NUM6}; 
int keyIterator = 0; 

public void keyPressed(int kc) { 
if (kc == keys1[keyIterator] || kc == keys2[keyIterator]) { // Correct key 
    keyIterator++; 
    if (keyIterator > keys1.length) { 
    // keyIterator has reached the length of the array, meaning the secret key combination has been entered successfully. 
    } 
} else { // Wrong key. Start over 
    keyIterator = 0; 
} 
}