你obseravtion事情最有可能慢慢地处理造成 仅仅 是众多的System.out.println()语句。
您没有得到对角线移动的问题是由于您的检查逻辑有些错误-而不是显式检查(例如)是否按下了键A 和 B,而是独立地检查它们-键A在一个方向上移动字符,B在另一个方向上移动字符。总计(例如),通过移动WEST 和 NORTH,您将有效地移动NORTHWEST。
除了使用按键列表之外,您还可以使用java.util.BitSet并为每个当前按下的按键设置位。这也应该大大减少您需要编写的代码量(keyPressed只是设置密钥代码指示的位,keyReleased清除它)。要检查是否按下了按键,请询问BitSet,然后询问当前是否设置了代码位。
编辑:使用BitSet而不是列表的示例
public class BitKeys implements KeyListener { private BitSet keyBits = new BitSet(256); @Override public void keyPressed(final KeyEvent event) { int keyCode = event.getKeyCode(); keyBits.set(keyCode); } @Override public void keyReleased(final KeyEvent event) { int keyCode = event.getKeyCode(); keyBits.clear(keyCode); } @Override public void keyTyped(final KeyEvent event) { // don't care } public boolean isKeyPressed(final int keyCode) { return keyBits.get(keyCode); }}我使示例实现了KeyListener,因此您甚至可以按原样使用它。当您需要知道是否按下某个键时,请使用isKeyPressed()。您需要确定是喜欢原始密钥代码(就像我一样)还是选择关键字符(就像您当前所做的那样)。无论如何,您将看到使用BitSet类将用于记录密钥的代码量减少到几行:)



