私はJavaスイングを使用してゲームボード用の2つのボタンリスナーを持っています。
最初にテトリス グリッドが作成され、次に各ボタン リスナー内に機能が追加されます。
Play.java で次のようにボードを設定します。
final TetrisGame g = new TetrisGame(11,1);
final BoardGraphics graphics = new BoardGraphics(TetrisBoard.BOARD_WIDTH, 40, g);
次に、同じ Play.java でボタン リスナーを作成します。
graphics.btnStart.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
Action arc = p.getAction(g);
g.update(arc);
graphics.colours.clear();
graphics.setColor(g.getBoard().getGrid());
while (arc instanceof Store){
arc = p.getAction(g);
g.update(arc);
graphics.colours.clear();
graphics.setColor(g.getBoard().getGrid());
}
graphics.tiles.redraw();
System.out.println();
System.out.println(g.toString());
System.out.println();
}
});
graphics.btnAuto.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
while (!g.gameEnded()){
Action arc = p.getAction(g);
g.update(arc);
graphics.colours.clear();
graphics.setColor(g.getBoard().getGrid());
while (arc instanceof Store){
arc = p.getAction(g);
g.update(arc);
//graphics.colours.clear();
graphics.setColor(g.getBoard().getGrid());
}
graphics.tiles.redraw();
System.out.println();
System.out.println(g.toString());
System.out.println();
/*try {
Thread.sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}*/
}
}
});
btnStart は完全に機能し、1 回押すと、AI エージェントによって与えられた次の動きに従ってテトリスボードがペイントされます。
ユーザーが btnStart を押して最後まで動きを生成することなく、btnAuto が各動きを再生するようにしたいと思います。ただし、私の btnAuto はグリッドに何も描画しませんが、ゲームの最終状態である終了状態を描画します。
各移動が while ループで生成された後、これがグリッドを再描画しない理由を誰にも理解できますか?