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