discord.py猜数字小游戏开发:如何实现猜测值高低判断提示?
数字猜谜游戏高低提示实现
你现有代码的逻辑仅会匹配“完全猜中目标数字”的消息,缺少猜错时的分支判断、多轮猜测的循环逻辑,要实现猜高/猜低的自动提示,按以下逻辑调整即可:
核心调整方向
- 将原代码中“单次等待正确答案”的逻辑替换为循环接收用户多轮猜测,直到用户猜中才结束游戏流程
- 每收到一条有效猜测消息,直接和系统生成的目标数字做数值大小对比:
- 猜测值 > 目标值:自动发送猜高提示
- 猜测值 < 目标值:自动发送猜低提示
- 猜测值 = 目标值:跳出循环,发送猜对的反馈
- 增加输入容错:遇到非数字的无效消息直接跳过校验,避免程序抛出类型转换错误
改造后可直接运行的代码
import random async def on_message(message): if message.content.startswith(">numbergame"): channel = message.channel # 锁定游戏发起人,避免其他用户的消息干扰游戏流程 game_owner = message.author await channel.send("Guess the number from 1-100 by writing the number in this channel!") # 生成目标随机数,保持和原代码一致的1-100取值范围 target_num = random.randint(1,100) # 开发调试用,正式上线可删除该行 print(f"当前游戏目标数字:{target_num}") # 循环接收猜测,直到用户猜中 while True: # 自定义消息校验规则 def check(m): # 过滤非游戏发起人、跨频道的无效消息 if m.author != game_owner or m.channel != channel: return False # 校验消息内容是否为1-100范围内的整数 try: guess = int(m.content) return 1 <= guess <= 100 except ValueError: return False # 等待符合校验规则的用户猜测消息 guess_msg = await bot.wait_for('message', check=check) guess_num = int(guess_msg.content) # 核心大小判断逻辑 if guess_num > target_num: await channel.send("猜高啦!往小了猜试试~") elif guess_num < target_num: await channel.send("猜低啦!往大了猜试试~") else: await channel.send(f"猜对啦!答案就是{target_num},恭喜{game_owner.mention}!") break else: await bot.process_commands(message)
关键实现细节
- 去掉了原代码中把目标数字转成字符串做等值匹配的逻辑,统一将目标值、用户输入转换为整数类型,才能完成数值大小对比(字符串类型的内容无法做正确的数值大小判断)
- 锁定游戏发起人的设计可以避免频道内无关用户发数字打乱正常游戏节奏
- 校验函数内的异常捕获可以避免用户发文字、特殊字符时导致程序崩溃
- 循环逻辑替换后,游戏可以支持用户多轮尝试,而不是只有一次猜中的机会
- 逻辑完全匹配需求规则:当目标数字为50时,用户输入49及以下会收到猜低提示,输入51及以上会收到猜高提示
内容的提问来源于stack exchange,提问作者Coleman Ethington
相关产品推荐
相关产品推荐

