编程百米赛跑怎么做的

时间:2025-01-29 02:01:55 网络游戏

模拟实现百米赛跑的编程方法如下:

方法一:使用CountDownLatch

设计思路

使用`CountDownLatch`来控制线程的启动和结束。

一个`CountDownLatch`用于裁判,初始化为1,表示裁判吹哨后开始比赛。

另一个`CountDownLatch`用于10名玩家,初始化为10,表示所有玩家准备好后裁判吹哨。

使用线程池创建10个线程,每个线程代表一个玩家。

每个玩家在初始化时调用裁判`CountDownLatch`的`await()`方法,等待比赛开始。

当所有玩家都准备好后,裁判调用`countDown()`方法,吹哨开始比赛。

玩家线程在跑步过程中随机生成速度,当跑完100米后,调用自己`CountDownLatch`的`countDown()`方法。

当所有玩家都跑完后,裁判`CountDownLatch`的计数器为0,比赛结束,释放线程池。

代码实现

```java

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.ThreadLocalRandom;

public class百米赛跑 {

public static void main(String[] args) throws InterruptedException {

int playerCount = 10;

CountDownLatch readyLatch = new CountDownLatch(1);

CountDownLatch startLatch = new CountDownLatch(playerCount);

ExecutorService executor = Executors.newFixedThreadPool(playerCount);

for (int i = 0; i < playerCount; i++) {

executor.execute(new Player(i, readyLatch, startLatch));

}

// 所有玩家准备好后,裁判吹哨开始比赛

readyLatch.await();

startLatch.countDown();

// 等待所有玩家跑完

startLatch.await();

executor.shutdown();

}

}

class Player implements Runnable {

private int playerId;

private CountDownLatch readyLatch;

private CountDownLatch startLatch;

public Player(int playerId, CountDownLatch readyLatch, CountDownLatch startLatch) {

this.playerId = playerId;

this.readyLatch = readyLatch;

this.startLatch = startLatch;

}

@Override

public void run() {

try {

// 模拟准备阶段

readyLatch.await();

// 模拟跑步阶段

while (true) {

int distance = ThreadLocalRandom.current().nextInt(10) + 1; // 随机生成跑步距离,1到10米

System.out.println("Player " + playerId + " ran " + distance + " meters.");

Thread.sleep(ThreadLocalRandom.current().nextInt(100)); // 随机生成跑步时间,0到99毫秒

if (distance == 100) {

// 到达终点

startLatch.countDown();

break;

}

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

```

方法二:使用键盘按键模拟跑步

设计思路

使用键盘的两个键(例如,左键和右键)来模拟左右腿的交替跑步。

假设每步步长为2米,则50次交替按键模拟跑完100米。

代码实现