用线程池实现剪刀石头布
时间: 2024-12-18 12:23:19 浏览: 11
在线程池中实现剪刀、石头、布游戏的一个基本思路是创建一个固定大小的工作队列,每个元素代表一个玩家的选择,然后分配给线程池中的工作线程处理。以下是一个简化的伪代码示例:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.Queue;
// 定义线程池
ExecutorService threadPool = Executors.newFixedThreadPool(3);
// 假设PlayerChoice类封装了剪刀、石头、布的选项
Queue<PlayerChoice> choices = new LinkedList<>();
public void playRockPaperScissors() {
// 玩家输入并加入队列
for (int i = 0; i < 3; i++) {
PlayerChoice playerChoice = getPlayerInput();
choices.add(playerChoice);
}
// 提交任务到线程池
threadPool.invokeAll(choices.stream().map(this::evaluateGame).toArray(Runnable[]::new));
// 关闭线程池
threadPool.shutdown();
// 结果展示
for (Runnable result : threadPool.invokeAll(Collections.emptyList())) {
System.out.println("Result: " + result.get());
}
}
private Runnable evaluateGame(PlayerChoice choice) {
// 实现游戏规则,这里假设随机生成电脑选择
PlayerChoice computerChoice = randomComputerChoice();
if (choice.equals(computerChoice)) {
return () -> System.out.println("平局");
} else {
return () -> System.out.println("胜利者: " + (choice == PlayerChoice.ROCK ? "电脑" : "玩家"));
}
}
private PlayerChoice randomComputerChoice() {
// 电脑随机选择
// ...
}
```
在这个例子中,玩家的三个选择会被添加到队列中,然后通过线程池异步执行`evaluateGame`方法,每场比赛作为单独的任务运行。线程池结束后,打印出每个比赛的结果。
阅读全文