试图做一个二十一点游戏

Posted

技术标签:

【中文标题】试图做一个二十一点游戏【英文标题】:Trying to make a blackjack game kind of 【发布时间】:2022-01-19 19:50:24 【问题描述】:

总结问题

我正在尝试制作一个简单的二十一点程序,该程序为庄家 1-11 选择两个数字,同时为玩家 1-11 选择两个数字。我想制作一个循环,根据玩家输入、击中或停留的内容来检查玩家是否击中或停留。如果他们击中,我希望它在玩家牌组中添加一张牌,并让他们选择再次击中或留下。

如果他们留下,我希望经销商检查一组规则,这些规则是:

1: 庄家是否少于 17 且是否少于玩家 1a:如果它确实有小于 17 并且小于玩家,它将绘制一个新的数字 1-11 并将其添加到庄家手中 1b:然后会运行检查是否有以下条件的循环

2: 庄家有 17-21 有没有多于闲家 2a:如果它有任何数字 17-21 并且它比玩家多,那么它将打印一条获胜消息

3:庄家是否有超过 21 3a:如果超过 21 则打印房屋破灭消息

4:庄家是否比玩家拥有更多 4a:如果庄家比玩家多(但由于之前的检查而少于 21),那么它会打印一个房子赢消息

这就是我尝试使用stay 命令完成的任务,到目前为止我还没有发现任何问题。

我的命中命令不会注册,即使我不输入stay..我试图通过让它打印一条消息并在我输入hit时结束循环来调试它,但它仍然通过stay命令运行无论如何,我认为这可能是我的输入转换为字符串的问题。

不要对我太苛刻,我上周才自学了如何编码,然后从 python 开始。

这是我遇到问题的代码:

'''

                    else:

                        hitstay = True

                        while hitstay:
                            action = str(input("hit or stay? "))
                            dealer = sum(dealer_cards)
                            player = sum(player_cards)
                            if action == 'stay' or 'Stay':
                                if dealer < 17 and dealer < player:
                                    dealer_cards.append(random.randint(1, 11))
                                    dealer = sum(dealer_cards)
                                    print(f"Dealer pulls dealer_cards[-1]\n"
                                          f"Dealer now has sum(dealer_cards)")
                                    if 17 <= dealer <= 21 and dealer > player:
                                        print(f"House won! Dealer cards: dealer_cards, sum(dealer_cards)\n"
                                              f"Player cards: player_cards, sum(player_cards)")
                                        playing = False
                                        hitstay = False
                                    elif dealer > 21:
                                        print(f'House busted! Dealer cards: dealer_cards')
                                        playing = False
                                        hitstay = False
                                    elif dealer > player:
                                        print(f'House wins, Dealer cards dealer_cards, sum(dealer_cards)\n'
                                              f'Player cards: player_cards, sum(player_cards)')
                                        playing = False
                                        hitstay = False
                            if action == 'hit' or 'Hit':
                                print('command hit')
                                playing = False
                                hitstay = False

'''

【问题讨论】:

因此,我还尝试将 if 语句用于扫描单词 hit 或 Hit 在 stay 之前,并且我尝试将 stay 命令设置为 if 和 elif 语句,并且出于某种原因,无论您键入什么它通过保持命令而不是命中命令。我想知道将整个事情变成一个函数并在循环中调用它是否更容易,但我还是太新了,无法完全理解。 【参考方案1】:

代替:

if action == 'stay' or 'Stay':

做:

if action == 'stay' or action == 'Stay':

或:

if action in ('stay', 'Stay'):

或者最好的:

if action.lower() == 'stay':

第一个版本不起作用,因为它被解释为:

if (action == 'stay') or 'Stay':

等同于:

if (action == 'stay') or True:

等同于:

if True:

【讨论】:

谢谢!这行得通。我不明白它将输入视为布尔值。 任何类型的值都可以在if 语句中使用,它会被有效地转换为布尔值——空字符串是“假的”(即被认为是假的,即使它不是字面上的@ 987654329@),任何其他字符串都是“真实的”。这里的主要问题是运算符优先级,即== a or b 被解释为(== a) or (b) 而不是== (a or b) 的事实——尽管如果你在(a or b) 周围添加括号你不会得到你想要的结果,因为(a or b) 将评估为这些值中的一个或另一个,而不是两者的集合!

以上是关于试图做一个二十一点游戏的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 多人二十一点纸牌游戏

我在 Java 中做错了啥二十一点文件计数器?

我如何将二十一点牌中的“王牌”定义为 11 或 1?

Unity 游戏框架搭建 (二十一) 使用对象池时的一些细节

有人可以帮我在pygame中为扑克游戏创建一副纸牌吗

(转)D3D11游戏编程学习笔记二十一:Cube Mapping及其应用之一:天空盒的实现