请你建议我如何实现计算机在游戏中的移动,而不会在主方法中使用while循环,最终会给线程增加负担?
因为我在两个人类玩家之间进行游戏很容易,因为我可以通过管理actionPerformed()
方法管理其移动。所以我不需要任何循环。
我已经有了计算机在computerPlays()
方法内移动的逻辑。
如果一个玩家是人类,一台计算机,可能会更容易。我可以做一些事情:在每次移动后增加int n
。然后在main()
if(n%2!=0)
{
computerPlays();
}
但是我仍然需要循环以获得完整的游戏流程。
如果两个玩家都是电脑怎么办?
如果您愿意帮助我,请尝试使用更简单的单词,因为我对Java很新。 感谢。
编辑:问题有什么不对?
答案 0 :(得分:2)
使用javax.swing.Timer
来调整模型的串行调用,在游戏结束时停止计时器。在引用的here游戏中,按 A 可在使用鼠标时切换动画。每次释放鼠标时,计算机都会通过计时器handler,首先移动玩家然后推进敌人;它重复这个序列,直到没有有效的移动或游戏获胜。
/** Animate one move; stop when no more moves or game won. */
public void actionPerformed(ActionEvent e) {
if (!game.move(mouseRow, mouseCol) || game.won()) timer.stop();
}
答案 1 :(得分:1)
你的问题似乎含糊不清,但我会尝试尽力而为,提供一般提示。
您不应该使用循环来管理游戏逻辑,这会使您的GUI无响应,或者完全冻结它。
相反,您应该使用事件来运行游戏。您可以编写一个模拟游戏逻辑的类,在“游戏面板”中保留此类的实例。 然后,您注册所需的所有听众,以确定玩家何时尝试移动。每当一个动作被解雇时你都可以:
正如您所看到的,这种编程方式是事件驱动的,当发生某些事情时,您需要更改模型,然后更新视图。
如果计算机和玩家通过交替移动来玩游戏,那么在每个玩家移动后都可以轻松地让你的电脑玩游戏,否则你需要每次都检查一下是谁在移动。
此外,由于计算机播放速度太快,无法让用户了解发生的情况,因此您应该考虑使用计时器(请参阅official tutorial)为每次移动添加一些延迟。
希望这有帮助!