我有两个使用 java swing 的游戏板按钮监听器。
最初创建俄罗斯方块网格,然后在每个按钮侦听器中添加功能。
我在我的 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 完美运行,按下一次,根据 AI 代理给出的下一步动作绘制俄罗斯方块。
我希望 btnAuto 播放每个动作,而不需要用户按 btnStart 来生成动作直到结束。然而,我的 btnAuto 并没有在网格上绘制任何东西,而是游戏的最终状态,完成状态。
谁能明白为什么在while循环中生成每次移动后这可能不会重新绘制网格?