I am writing a snake game in java and the turns are controlled by keyboard. everything works fine, but when i by mistake press 2 keys then the whole application freezes (the gui) snake stops moving, but thread keeps running according to my eclipse, i thought it might be the default case that causes problems, but the statement does not get printed.
private class KeyboardListener extends KeyAdapter {
public void keyPressed(KeyEvent e) {
Directions direc = c.getDirectionSnake();
switch (e.getKeyCode()) {
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_NUMPAD6:
// if it's not the opposite direction
if (c.getDirectionSnake() != Directions.LEFT)
c.setDirectionSnake(Directions.RIGHT);
break;
case KeyEvent.VK_UP:
case KeyEvent.VK_NUMPAD8:
if (c.getDirectionSnake() != Directions.BOTTOM)
c.setDirectionSnake(Directions.TOP);
break;
case KeyEvent.VK_LEFT:
case KeyEvent.VK_NUMPAD4:
if (c.getDirectionSnake() != Directions.RIGHT)
c.setDirectionSnake(Directions.LEFT);
break;
case KeyEvent.VK_DOWN:
case KeyEvent.VK_NUMPAD2:
if (c.getDirectionSnake() != Directions.TOP)
c.setDirectionSnake(Directions.BOTTOM);
break;
default:
System.out.println("here");
break;
}
}
}
jframe
public Window() throws FileNotFoundException {
this.setTitle("Snake");
this.setSize(400, 450);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
gamePanel = new GamePanel();
topPanel = new TopPanel();
this.add(new TopPanel(), BorderLayout.NORTH);
this.add(gamePanel, BorderLayout.CENTER);
c = new ThreadsController(gamePanel.getSnakeDepartPosition());
c.start();
this.buttonPanel = new ButtonPanel(this, c);
this.add(buttonPanel, BorderLayout.SOUTH);
this.setVisible(true);
this.addKeyListener(new KeyboardListener());
}