2017-12-03 9 views
1

Ich mache ein Snake-Spiel in Java und muss Benutzer Tastenanschläge verwenden, um die Richtung der Bewegung zu steuern. Ist dies durch eine switch Erklärung möglich? Ich benutzte ursprünglich eine Scanner s = new Scanner(System.in), um dem Benutzer zu erlauben, 'u', 'd', etc. einzugeben, um die Schlange zu bewegen, aber ich würde stattdessen lieber die Tastaturpfeile verwenden. HierJava Switch mit Benutzereingabe Tastenanschläge

ist, was ich habe jetzt:

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; 
    } 

} 

Ich wollte so etwas legen, aber nicht sicher, wie man:

 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); 

    } 
    }); 

Was wäre der beste Weg, dies zu tun ?

+0

Swing Event Driven, das heißt, dass Sie nicht in der Lage sein System.in' zu verwenden 'Eingang zu bekommen, das ist nicht wie es wrks, stattdessen sollten Sie [Key Bindings] verwenden (https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) – MadProgrammer

Antwort

1

Ich sehe, Sie verwenden Swing. Sie können die KeyListener-Schnittstelle verwenden. Etwas wie das.

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

Seit dem [Key Bindings API] (https: // docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) behebt die Probleme, die mit 'KeyListener' verbunden sind. In der Regel ist es nicht ratsam,' KeyListener' zu verwenden – MadProgrammer

4

Es ist möglich, switch-Anweisung mit String von JDK 7 zu verwenden:

Strings in switch Statements

Und scheint, Sie entwickeln ein Konsolenspiel. Wenn Sie Schaukel verwenden, können Sie stattdessen mit InputMap zusammen mit ActionMap betrachten:

How to Use Key Bindings