我正在为 CS 课程编写游戏。
有一个 GUIMyDisplay是扩展KeyListener的,带有一个为实例变量JFrame打包的。JPanel[][]
MyGame有一个私有enum调用GameState,它是MENU, PLAY, QUIT, 或PAUSE. MyGame具有static void main具有以下构造的方法:
MyGame如下:
public class MyGame
{
/* Private instance fields and constructor left out.
Constructor initializes a MyDisplay and state = MENU */
public static void main(String[] args)
{
MyGame g = new MyGame();
while(true)
{
gstate = g.getState();
if(gstate == GameState.PLAY)
g.play();
else if(gstate == GameState.PAUSE)
g.pause();
else if(gstate == GameState.MENU)
g.menu();
}
}
/* implementation of MyGame methods */
}
Where play, pause, 和menu调用各种调用MyDisplay来绘制新的东西。状态可以改变的唯一方法是用户按下回车键。然后,MyDisplay调用一个相应地更改状态的MyGame方法。enterPressed
当我编译这个时,游戏的行为不正常。当我按下回车键(并打印出要检查的状态)时,我注意到,应该是,MENU 更改为 PLAY。但是即使状态处于 PLAY 状态,g.play()也不会被评估(我测试了控制台是否在添加的代码行中打印出测试短语play())。
但真正让我感到困惑的是,当我输入对 的任何调用时System.out,例如System.out.print("");在 的while循环中main,一切正常,并按g.play()应有的方式被调用。