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' 并结束游戏。

Python 八路抢答器程序实现:多线程竞争游戏

原文地址: https://www.cveoy.top/t/topic/oKRP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录