代码之家  ›  专栏  ›  技术社区  ›  user5402685

带有用户输入按键的Java交换机

  •  1
  • user5402685  · 技术社区  · 7 年前

    我正在用Java制作一个蛇游戏,需要使用用户击键来控制移动方向。这可以通过 switch 陈述我最初使用的是 Scanner s = new Scanner(System.in) 允许用户键入“u”、“d”等来移动蛇,但我想用键盘箭头代替。

    以下是我现在拥有的:

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

    实现这一点的最佳方式是什么?

    2 回复  |  直到 7 年前
        1
  •  4
  •   Andrew Thompson    7 年前

    可以将switch语句用于 String 来自JDK 7:

    Strings in switch Statements

    看起来你正在开发一款控制台游戏。如果您使用Swing,可以考虑使用 InputMap 连同 ActionMap 相反:

    How to Use Key Bindings

        2
  •  1
  •   Harsh    7 年前

    我看到你在用秋千。您可以使用KeyListener接口。像这样的。

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