CSクラス向けのゲームを書いています。
インスタンス変数用にパックされMyDisplayた拡張されKeyListenerたGUI があります。JFrameJPanel[][]
MyGameには、 、、、またはのいずれかのプライベートenumコールがあります。 次の構造を持つメソッドがあります。GameStateMENUPLAYQUITPAUSEMyGamestatic 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 */
}
play、pause、および のmenuさまざまな呼び出しを呼び出して、MyDisplay新しいものを描画します。状態を変更できる唯一の方法は、ユーザーが Enter キーを押した場合です。次に、それに応じて状態を変更するメソッドをMyDisplay呼び出します。MyGameenterPressed
これをコンパイルすると、ゲームが正常に動作しません。Enter キーを押すと (状態を印刷して確認すると)、当然のことながら、MENU が PLAY に変わることに気付きます。しかし、状態が PLAY であっても、g.play()は評価されていません (コンソールが に追加されたコード行でテスト フレーズを出力するかどうかをテストしましたplay())。
しかし、本当に混乱しているのは、 のループSystem.outなどでへの呼び出しを入力すると、すべてが正常に機能し、必要に応じて呼び出されることです。System.out.print("");whilemaing.play()