Python 八路抢答器程序实现:多线程竞争游戏
Python 八路抢答器程序实现:多线程竞争游戏
本程序使用 Python 多线程实现了一个八路抢答器游戏,通过 Buzz 类判断抢答成功,Player 类处理玩家抢答操作。玩家在终端输入 'buzz' 进行抢答,首个成功抢答的玩家获胜。
程序代码:
import threading
class Buzz:
def __init__(self, n):
self.n = n
self.count = 0
self.lock = threading.Lock()
self.cv = threading.Condition()
def buzz(self):
while True:
with self.cv:
self.cv.wait()
print('Buzz')
self.count += 1
if self.count >= self.n:
self.cv.notify_all()
return
class Player:
def __init__(self, name, buzz):
self.name = name
self.buzz = buzz
def run(self):
while True:
ans = input(f'{self.name} buzzer: ')
with self.buzz.lock:
if self.buzz.count >= self.buzz.n:
return
if ans == 'buzz':
with self.buzz.cv:
self.buzz.cv.notify()
self.buzz.count += 1
if self.buzz.count >= self.buzz.n:
self.buzz.cv.notify_all()
return
if __name__ == '__main__':
n = 3
buzz = Buzz(n)
buzz_thread = threading.Thread(target=buzz.buzz)
buzz_thread.start()
players = [
Player('Alice', buzz),
Player('Bob', buzz),
Player('Charlie', buzz),
]
player_threads = [threading.Thread(target=p.run) for p in players]
for t in player_threads:
t.start()
for t in player_threads:
t.join()
buzz_thread.join()
print('Game over')
程序说明:
Buzz类:负责判断何时有人抢答成功。当有玩家抢答时,Buzz类的count属性加 1,并使用条件变量cv通知所有玩家。当count等于n时,游戏结束,输出 'Buzz'。Player类:负责处理每个玩家的抢答。每个玩家的线程运行run方法,不断等待玩家输入 'buzz',并使用条件变量cv通知Buzz类进行判断。- 主程序:启动
Buzz和若干个Player线程,并等待它们结束。
程序运行时,玩家在终端上输入 'buzz' 按钮即可进行抢答。当有一个玩家抢答成功后,程序输出 'Buzz' 并结束游戏。
原文地址: https://www.cveoy.top/t/topic/oKRP 著作权归作者所有。请勿转载和采集!