我正在为 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()
应有的方式被调用。