-3

我正在用 Java 编写我自己的第一个国际象棋游戏。

我的代码已经适用于两个玩家,从键盘手动播放,我想将它扩展到一个玩家对抗电脑游戏。

我的问题是我从来没有处理过随机动作。在棋盘上移动棋子的方法需要接收 4 个输入:棋子位置的两个整数和棋盘上目的地的两个整数。

选择错误的输入是可以的,因为 movePiece 方法已经检查了整数是否超出棋盘的范围,它们是否真的达到了当前玩家的颜色,坐标中有一个棋子并且它不是空的,等等。

但是我如何随机获得这 4 个整数呢?以及如何使它们尽可能接近“真实”输入(这样我就不会花很多时间取消错误输入的资格)?

4

3 回答 3

2

Java 提供了至少两个选项来生成随机值:

http://docs.oracle.com/javase/6/docs/api/java/util/Random.html http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html #随机的()

例如,获取以 4 为界的随机 int 值:

int x = new Random().nextInt(4);
int y = (int) (Math.random() * 4);

System.out.println(x + " " + y);

>> 2 3
于 2013-02-18T13:07:44.767 回答
1

如果您真的想创建一个随机移动的计算机播放器,我认为最好这样做:

  1. 随机选择棋盘上现有的棋子之一
  2. 计算该棋子可以移动到的所有合法目的地
  3. 如果没有合法的目的地,请在之前未选择的部分中选择一个新的部分
  4. 随机选择一个计算的合法目的地

然而,让电脑玩家随意移动是相当愚蠢的。计算机玩家需要某种形式的逻辑来比较两个动作中哪一个更好。实现这样的逻辑可能相当复杂,您最好使用评论中建议的国际象棋库。

于 2013-02-18T13:23:38.903 回答
0

你不需要 4 个整数。你只需要1。

这样做的一种方法:

  1. 迭代板上的棋子。
  2. 对于每件作品,确定其可用动作并将所有可用动作粘贴在列表中。
  3. 从列表中随机选择一个动作(或非随机,如果你觉得如此倾向)。
于 2013-02-18T13:27:03.937 回答