编写一个龟兔赛跑的多线程程序,单击按钮后,龟兔开始赛跑,兔子比乌龟跑得快五倍,但休息的时间长十倍
时间: 2024-05-05 11:20:43 浏览: 147
一个用Java语言编写的龟兔赛跑的程序
代码如下,注释在代码中:
```python
import threading
import time
import tkinter as tk
class TortoiseRabbitRace:
def __init__(self):
self.root = tk.Tk()
self.root.title("龟兔赛跑")
self.canvas = tk.Canvas(self.root, width=600, height=400)
self.canvas.pack()
self.btn_start = tk.Button(self.root, text="开始赛跑", command=self.start_race)
self.btn_start.pack()
self.tortoise = None
self.rabbit = None
self.finish_line = None
self.tortoise_finish = False
self.rabbit_finish = False
def start_race(self):
# 创建乌龟、兔子、终点线
self.tortoise = self.canvas.create_image(50, 50, image=tk.PhotoImage(file="tortoise.gif"))
self.rabbit = self.canvas.create_image(50, 150, image=tk.PhotoImage(file="rabbit.gif"))
self.finish_line = self.canvas.create_line(500, 0, 500, 400, width=5)
# 创建线程并启动
tortoise_thread = threading.Thread(target=self.tortoise_run)
rabbit_thread = threading.Thread(target=self.rabbit_run)
tortoise_thread.start()
rabbit_thread.start()
def tortoise_run(self):
# 乌龟的速度为10像素/秒,每秒更新一次位置
x, y = 50, 50
while x < 500 and not self.rabbit_finish:
x += 10
self.canvas.coords(self.tortoise, x, y)
time.sleep(1)
# 判断是否到达终点
if x >= 500 and not self.rabbit_finish:
self.tortoise_finish = True
self.show_result()
def rabbit_run(self):
# 兔子的速度为50像素/秒,每秒更新一次位置,每秒有1/10的概率休息
x, y = 50, 150
while x < 500 and not self.tortoise_finish:
x += 50
self.canvas.coords(self.rabbit, x, y)
time.sleep(1)
if not self.tortoise_finish and not self.rabbit_finish and x < 500 and time.time() % 10 == 0:
time.sleep(1)
# 判断是否到达终点
if x >= 500 and not self.tortoise_finish:
self.rabbit_finish = True
self.show_result()
def show_result(self):
if self.tortoise_finish and self.rabbit_finish:
result = "平局"
elif self.tortoise_finish:
result = "乌龟胜利"
else:
result = "兔子胜利"
tk.messagebox.showinfo("比赛结果", result)
if __name__ == '__main__':
race = TortoiseRabbitRace()
race.root.mainloop()
```
其中,我们使用了 `tkinter` 库来创建窗口和按钮,使用 `Canvas` 组件来创建画布和图像。
在 `start_race` 方法中,我们创建了乌龟、兔子和终点线的图像,并使用 `Thread` 类创建了两个线程,分别执行乌龟和兔子的赛跑过程。
在 `tortoise_run` 和 `rabbit_run` 方法中,我们分别模拟了乌龟和兔子的赛跑过程。乌龟的速度为10像素/秒,兔子的速度为50像素/秒,但每秒有1/10的概率休息。我们使用 `coords` 方法来更新图像的位置,使用 `sleep` 方法来让线程暂停一秒钟。
在 `show_result` 方法中,我们根据乌龟和兔子的到达情况来判断比赛结果,并使用 `messagebox` 弹出消息框来显示结果。
阅读全文