0

如何创建一个 for 循环来创建多个可识别的线程。线程Players在游戏中,需要相互通信。我需要能够访问每个玩家的 getter 和 setter。

基本上,每个Player都有一个名称属性并且需要是可识别的。如果我这样做,我看不出它们是如何相互识别的......

for (int i = 0; i < numberOfPlayers; i++)
    {
        Thread t = new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2)));
    }
4

2 回答 2

2

一种选择是创建一个Map玩家,并将其传递Map给每个玩家,Player以便他们可以直接相互交流(或制作地图static,使其对所有Player对象可见,或其他)

Map<String, Player> players = new HashMap<>();
for(int i = 0; i < numberOfPlayers; i++) {
    players.put("Player" + (i + 1), new Player("Player" (i + 1), (i + 1), (i + 2), players));
}
for(Player player : map.values()) {
    new Thread(player).start();
}

另一种选择是创建一个作为消息总线的类,该类可以访问所有玩家的设置器 - 如果玩家想要向另一个玩家发送消息,那么它会将消息发送到消息总线,然后由消息总线处理调用适当的 setter 方法

于 2013-07-11T19:02:01.397 回答
1

如果你知道numberOfPlayers然后创建一个数组Thread,并在循环中填充它:

Thread[] players = new Thread[numberOfPlayers];

for (int i = 0; i < numberOfPlayers; i++) {
    players[i] = new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2)));
    // You can start the thread here only
}

但是如果你事先不知道 numberOfPlayers,在创建数组时,你可以创建一个ArrayList<Thread>并将每个新线程添加到其中:

List<Thread> players = new ArrayList<Thread>();

for (int i = 0; i < numberOfPlayers; i++) {
    players.add(new Thread(new Player("Player" + (i + 1), (i + 1), (i + 2))));
}
于 2013-07-11T18:59:57.730 回答