2017-12-03 7 views
1

Java에서 뱀 게임을 만들고 있으며 사용자 키 입력을 사용하여 이동 방향을 제어해야합니다. 이것은 switch 성명을 통해 가능합니까? 원래 Scanner s = new Scanner(System.in)을 사용하여 사용자가 'u', 'd'등을 입력하여 뱀을 움직일 수있게했지만 대신 키보드 화살표를 사용하고 싶습니다. 여기 사용자 입력 키 입력이있는 Java 스위치

내가 지금 무엇을 가지고 :

public void controlSnake(){ 

Scanner s = new Scanner(System.in); 
String inputString = s.next(); 

    switch (inputString) { 
    case "u": 
    case "U": 
     snake.changeDirection(Point.NORTH); 
     break; 
    case "d": 
    case "D": 
     snake.changeDirection(Point.SOUTH); 
     break; 
    case "r": 
    case "R": 
     snake.changeDirection(Point.EAST); 
     break; 
    case "l": 
    case "L": 
     snake.changeDirection(Point.WEST); 
     break; 
    } 

} 

나는 이런 식으로 뭔가를 삽입하는 것,하지만 확실하지 않은 방법 :

 map1.put(KeyStroke.getKeyStroke("LEFT"), "moveLeft"); 

    getActionMap().put("moveLeft", new AbstractAction() { 
    private static final long serialVersionUID = 1L; 

    public void actionPerformed(ActionEvent e) { 
    snake.changeDirection(Point.WEST); 

    } 
    }); 

이 작업을 수행하는 가장 좋은 방법이 될 것입니다 무엇 ?

+0

스윙 중심의 이벤트, 이것이 당신이 입력을 얻기 위해'System.in'을 사용할 수 없습니다 의미, 즉 아니다 어떻게해야합니까? 대신 [Key Bindings] (https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) – MadProgrammer

답변

1

스윙을 사용하고 있습니다. KeyListener 인터페이스를 사용할 수 있습니다. 이 같은.

Strings in switch Statements

을 그리고 당신은 콘솔 게임을 개발하는 것 같다

yourButton.addKeyListener(new KeyListener(){ 
     @Override 
      public void keyPressed(KeyEvent e) { 
       if(e.getKeyCode() == KeyEvent.VK_UP){ 
        snake.changeDirection(Point.NORTH); 
       } 
       if(e.getKeyCode() == KeyEvent.VK_DOWN){ 
        snake.changeDirection(Point.SOUTH); 
       } 
       //Likewise for left and right arrows 
      } 

      @Override 
      public void keyTyped(KeyEvent e) { 
       throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
      } 

      @Override 
      public void keyReleased(KeyEvent e) { 
       throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
      } 
    }); 
+1

을 사용해야합니다. [Key Bindings API] (https : // docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)는'KeyListener'와 관련된 문제를 해결합니다. 일반적으로'KeyListener'를 사용하는 것이 좋지 않습니다. – MadProgrammer

4

는 JDK 7에서 String와 switch 문을 사용하는 것이 가능하다. 당신이 스윙을 사용하는 경우, 대신 ActionMap과 함께 InputMap 사용을 고려할 수 있습니다

How to Use Key Bindings

관련 문제