在Python中实现Blackjack

时间:2009-02-15 23:34:27

标签: python

我正在为python编写二十一点代码,我希望有人能告诉我如何制作它:

  1. 识别某人键入的内容,即“点击”或“站立”并做出相应的反应。
  2. 计算玩家的分数,以及它是一个ace和一个千斤顶,然后自动获胜。
  3. 好的,这是我到目前为止所得到的。

    "This imports the random object into Python, it allows it to generate random numbers."
    import random
    print("Hello and welcome to Sam's Black Jack!")
    input("Press <ENTER> to begin.")
    card1name = 1
    card2name = 1
    card3name = 1
    card4name = 1
    card5name = 1
    
    "This defines the values of the character cards."
    Ace = 1
    Jack = 10
    Queen = 10
    King = 10
    
    decision = 0
    
    "This generates the cards that are in your hand and the dealer's hand to begin with.
    card1 = int(random.randrange(12) + 1)
    card2 = int(random.randrange(12) + 1)
    card3 = int(random.randrange(12) + 1)
    card4 = int(random.randrange(12) + 1)
    card5 = int(random.randrange(12) + 1)
    
    total1 = card1 + card2
    
    "This makes the value of the Ace equal 11 if the total of your cards is under 21"
    if total1 <= 21:
        Ace = 11
    
    "This defines what the cards are"
    if card1 == 11:
        card1 = 10
        card1name = "Jack"
    if card1 == 12:
        card1 = 10
        card1name = "Queen"
    if card1 == 13:
        card1 = 10
        card1name = "King"
    if card1 == 1:
        card1 = Ace
        card1name = "Ace"
    
    elif card1:
        card1name = card1
    
    if card2 == 11:
        card2 = 10
        card2name = "Jack"
    if card2 == 12:
        card2 = 10
        card2name = "Queen"
    if card2 == 13:
        card2 = 10
        card2name = "King"
    if card2 == 1:
        card2 = Ace
        card2name = "Ace"
    
    elif card2:
        card2name = card2
    
    if card3 == 11:
        card3 = 10
        card3name = "Jack"
    if card3 == 12:
        card3 = 10
        card3name = "Queen"
    if card3 == 13:
        card3 = 10
        card3name= "King"
    if card3 == 1:
        card3 = Ace
        card3name = "Ace"
    
    elif card3:
        card3name = card3
    
    if card4 == 11:
        card4 = 10
        card4name = "Jack"
    if card4 == 12:
        card4 = 10
        card4name = "Queen"
    if card4 == 13:
        card4 = 10
        card4name = "King"
    if card4 == 1:
        card4 = Ace
        card4name = "Ace"
    
    elif card4:
        card4name = card4
    
    if card5 == 11:
        card5 = 10
        card5name = "Jack"
    if card5 == 12:
        card5 = 10
        card5name = "Queen"
    if card5 == 13:
        card5 = 10
        card5name = "King"
    if card5 == 1:
        card5 = Ace
        card5name = "Ace"
    
    elif card5:
        card5name = card5
    "This creates the totals of your hand"
    total2 = card1 + card2
    total3 = card1 + card2 + card3
    
    print("You hand is ", card1name," and", card2name)
    print("The total of your hand is", total2)
    decision = input("Do you want to HIT or STAND?").lower()
    
    "This is the decision for Hit or Stand"
    if 'hit' or 'HIT' or 'Hit' in decision:
        decision = 1
        print("You have selected HIT")
        print("Your hand is ", card1name,",",card2name," and", card3name)
        print("The total of your hand is", total3)
    
    if 'STAND' or 'stand' or 'Stand' in decision:
        print("You have selected STAND")
    
    "Dealer's Hand"
    dealer = card4 + card5
    print()
    print("The dealer's hand is", card4name," and", card5name)
    
    if decision == 1 and dealer < total3:
        print("Congratulations, you beat the dealer!")
    
    if decision == 1 and dealer > total3:
        print("Too bad, the dealer beat you!")
    

    好的,没关系,我修好了:D

    我刚刚将Hit和Stand更改为Yes或No

    if total2 < 21:
        decision = input("Do you want to hit? (Yes or No)")
    
        "This is the decision for Hit or Stand"
        if  decision == 'Yes':
            print("You have selected HIT")
            print("Your hand is ", card1name,",",card2name," and", card3name)
            print("The total of your hand is", total3)
    
        if decision == 'No':
                print("You have selected STAND")
    

5 个答案:

答案 0 :(得分:14)

这可以帮助您入门:

http://docs.python.org/library/random.html

http://docs.python.org/library/strings.html

http://docs.python.org/library/stdtypes.html

http://docs.python.org/reference/index.html

我看到你添加了一些代码;这很好。

考虑一下需要存在的程序部分。您将需要一些“卡片”的表示 - 卡片具有重要的功能,例如它们的价值,它们的套装等。鉴于卡片,您应该能够分辨它的价值,无论是Jack还是Ace或者2的心。阅读Python中的“类”以开始使用它。

您还将获得一张牌 - 您的经销商当前持有的牌以及您的牌手当前持有的牌。 “手”是一组卡片,您(程序员)可以添加新卡片(当卡片发出时)。您可能希望使用包含这些数组的“列表”或“数组”或“类”来执行此操作。一只手也有一个值,通常是卡值的总和,但是如你所知,Aces是特殊的(它们可以是1或11),所以你需要用一些“if语句”正确处理这种情况。

你也会有一个套牌;甲板是一个特殊的集合 - 它在启动时只有52张牌,而且没有一张牌重复(你当然可以使用几个牌来玩,但这是你以后可以解决的一个复杂因素)。你如何填充这样的牌组?你的程序会想要从牌组“处理” - 所以你需要一种方法来跟踪哪些牌已经发给玩家。

这是很多东西。尝试用简单的句子写下你的程序需要做的所有逻辑,而不用担心Python。这称为“伪代码”。这不是一个真正的程序,它只是一个计划,你将要做什么 - 它对地图有用的方式很有用。如果你去的地方你去过100次,你不需要地图,但是如果你开车到某个城镇,你从来没去过,你要先计划你的路线,然后才能到达在方向盘后面......

使用您的伪代码更新您的问题,以及您已经(或将要做出)将伪代码转换为Python的任何尝试。

答案 1 :(得分:4)

我同意SquareCog的评论 - 关于你尝试过什么以及什么不起作用以及你感到困惑的一些额外信息会有所帮助。

但有些信息可能会有所帮助:

关于1-10,ace,king,queen和jack之间的数字的生成:为每张卡分配一个数字索引可能会有所帮助。 2-10是显而易见的,你可以为jack,queen,king和ace制作你自己的值。特别需要注意的一件事是,如果你还要产生王牌,那就没有1。分配号码后,random module可以提供帮助。

有一些标准比较方法可用于识别“命中”或“站立”之间的区别。值得注意的是== operator

由于您正在生成手,因此应该很容易检查它们是否是某些组合。就计算分数而言,一个好的起点是使用加法。

根据您之后的评论

修改,您似乎可以从"Python for non-programmer" guides中获益。

答案 2 :(得分:3)

在您的代码中,您写道:

Ace = 1 or 11

我担心这不符合你的想法。启动python解释器,然后在其中键入 1 or 11 。这是我得到的:

>>> 1 or 11
1

这意味着当您键入:Ace = 1 or 11时,python首先评估1 or 11位,然后将Ace设置为该值。换句话说,您的代码相当于:

Ace = 1

我建议你忘记Ace的两个可能值;只留下它1。简化规则,让事情有效,然后你可以看看制作一个完整的二十一点游戏。

答案 3 :(得分:0)

这是一个开始的提示:不是在1到10之间绘制一个数字并为面卡做一些不同的事情,而是绘制1到13之间的数字,并定义一个将这些数字解释为的函数(或者甚至是一个类)牌。例如,1将映射到Ace,11映射到Jack,2映射到deuce等。

答案 4 :(得分:0)

检查输入的所有。作为一个年轻的小伙子,我在Fortran写了我的二十一点程序。我的一位用户指出他可以:

  1. 输入负数作为赌注。
  2. 故意丢失。
  3. 然后程序将按照程序执行的操作完成:

    1. 从总赢/输中减去否定投注。
    2. 这当然是等同于添加a 号码总数。
    3. 有时候,你可以通过失败获胜....