You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py如何获取用户输入?黑杰克游戏Stand功能无法触发求助

问题排查
  • client.wait_for("message") 返回的是discord.Message对象,不是用户输入的字符串,直接和"Stand"做相等判断永远为假,需要取消息的content属性做判断。
  • 未设置check校验规则,会导致任意用户在任意频道发的消息都会触发后续逻辑,应该限制仅触发命令的用户在当前频道发送的消息才生效。
  • 所有ctx.send()调用前都缺少await关键字,discord.py中消息发送是异步协程方法,不加await不会实际执行发送操作。
  • 庄家抽牌的循环逻辑存在错误:没有更新变量S的数值,同时循环条件逻辑错误,应该是庄家点数同时小于玩家点数且小于等于21时才需要继续抽牌。
  • 直接用random.choice(deck)抽牌会出现重复抽同一张牌的问题,建议抽牌后将对应数值从牌组中移除,或者提前打乱牌组按顺序抽牌。
修复后的代码
import random
# 请确保你提前定义的deck是符合规则的数值集合,比如标准黑杰克牌组可定义为 deck = [2,3,4,5,6,7,8,9,10,10,10,10,11]*4

@client.command()
async def blackjack(ctx):
    # 初始化玩家和庄家手牌
    player_cards = [random.choice(deck), random.choice(deck)]
    dealer_cards = [random.choice(deck), random.choice(deck)]
    player_total = sum(player_cards)
    dealer_total = sum(dealer_cards)
    
    # 发送初始手牌
    await ctx.send(f"你的手牌:{player_cards},总点数:{player_total}")
    await ctx.send(f"庄家明牌:{dealer_cards[0]}")

    # 定义校验规则:仅当前命令发起者在当前频道发的消息生效
    def check(m):
        return m.author == ctx.author and m.channel == ctx.channel

    # 等待用户输入
    m = await client.wait_for("message", check=check)
    
    if m.content.strip() == "Stand":
        # 庄家抽牌逻辑:点数小于玩家且小于等于21就继续抽
        while dealer_total < player_total and dealer_total <= 21:
            new_card = random.choice(deck)
            dealer_cards.append(new_card)
            dealer_total += new_card
        await ctx.send(f"庄家最终手牌:{dealer_cards},总点数:{dealer_total}")

        # 判断输赢
        if dealer_total > 21:
            await ctx.send("你赢了!")
        elif player_total > dealer_total:
            await ctx.send("你赢了!")
        elif player_total == dealer_total:
            await ctx.send("平局!")
        else:
            await ctx.send("你输了!")
    # 此处可继续添加Hit选项的判断,实现玩家抽牌功能
补充优化建议

你可以后续完善A牌(默认点数11)的动态调整逻辑,当总点数超过21时可以将A的点数改为1,符合标准黑杰克的官方规则。

内容的提问来源于stack exchange,提问作者vazzza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:06:04