我在使用Java编程时遇到了一些问题。
我有一个有效的循环,直到游戏结束,当它运行时我需要从玩家移动,我需要程序保持直到玩家点击JFrame
然后移动,我需要一个像键盘Scanner
这样的方法,但对于鼠标。
知道该怎么做吗?
while(!gameOver())
{
if(!rw.board.possibleMoves(rw.board.turn).isEmpty())
{
// needs to wait until the player makes a move
Move m = rw.players[rw.board.turn].move;
rw.board.makeMove(m);
rw.updateNewGame();
}
// switch the turns after the move
rw.players[rw.board.turn].move = null;
rw.board.turn = (rw.board.turn == PLAYER1 ? PLAYER2 : PLAYER1);
}
}
答案 0 :(得分:1)
GUI应用程序事件驱动。这意味着您不会创建这样的while循环。您让程序进入自己的事件循环,然后进行移动并将转弯切换为对用户点击事件的响应。
也就是说,您创建了一个Click事件监听器,并在其actionPerformed()
方法中检查:
if (!gameOver())
{
if(!rw.board.possibleMoves(rw.board.turn).isEmpty())
{
// needs to wait until the player makes a move
Move m = rw.players[rw.board.turn].move;
rw.board.makeMove(m);
rw.updateNewGame();
}
// switch the turns after the move
rw.players[rw.board.turn].move = null;
rw.board.turn = (rw.board.turn == PLAYER1 ? PLAYER2 : PLAYER1);
}
确保这里调用的方法改变了按钮的状态,或者在按下它时将其删除不再有意义(没有可能的移动或游戏等)。
答案 1 :(得分:0)
这可能是异步实现它的一个很好的理由。
假设你是一个线程,这不会是一个很大的问题: 你将添加一段时间(m == null);,等待Move成为一个对象。