创建多人二十一点游戏

时间:2012-07-30 01:58:11

标签: python multiplayer blackjack

我是python的新手,并且已经尝试在python上制作多人二十一点游戏一段时间了。我遇到了很多很多问题,并且想知道你们是否可以帮助我。

import random

def total(hand):
    aces = hand.count(11)
    t = sum(hand)
    if t > 21 and aces > 0:
        while  aces > 0 and t > 21:
            t -= 10
            aces -= 1
    return t

Cards = ["2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "AH", "JH", "QH", "KH", "AC", "JC", "QC", "KC", "AS", "JS", "QS", "KS", "AD", "JD", "QD", "KD"]

Cards[35] = 11
Cards[36] = 10
Cards[37] = 10
Cards[38] = 10
Cards[39] = 11
Cards[40] = 10
Cards[41] = 10
Cards[42] = 10
Cards[43] = 11
Cards[44] = 10
Cards[45] = 10
Cards[46] = 10
Cards[47] = 11
Cards[48] = 10
Cards[49] = 10
Cards[50] = 10

Players = raw_input("How many players are there?")
for i in range Players:
    Player i = []
    Player i.append(choice(Cards))
    Player i.append(choice(Cards))
    tp = total(player)
    print "Player" + i + "Cards: " + Player i + "," + "total: " + tp
    hitorstand = raw_input("hit (h) or stand (s)?")
    if hitorstand == "h":
        Player i.append(choice(cards))
        print ("hit (h) or stand (s)?")
    elif hitorstand == "s":
        break
    else print "Please enter h or s"

dealer = []
While True:
    dealer.append(choice(cards))
    dealer.append(choice(cards))
    td = total(dealer)
    while td > 17:
        dealer.append(choice(cards))
    else:
        break
if td < tp < 21:
    "Player i wins"
else print "dealer wins"

这是我到目前为止所拥有的。我知道有很多乱码和代码无法正常工作。我想知道你们是否可以让我知道代码有什么问题,并建议如何解决它。

我现在主要担心的是:

  1. 我正在制作一款“多人”二十一点游戏。 我不知道我应该怎么做一个多人二十一点游戏的循环。 在我的代码中,我问有多少人在玩。如何在不知情的情况下为游戏制作循环 这个数字是多少?

    此外,如何在不知道有多少玩家正在玩的情况下创建一个能够找到胜利者的功能?

  2. 输入

    Players = raw_input("How many players are there?") 
    for i in range Players:
    

    for循环中的Players给出了语法错误。有什么问题?

  3. 作为更新,我已经考虑过关于制作列表的内容 我仍然不明白我应该怎么做 制作代码以找出胜利者。

    例如

    即使我列出一个列表,如果我不知道有多少玩家在玩,我也无法比较列表中的元素。如果我知道有多少人在玩,

    playerlist = [1,2,3]
    

    我可以说

    if playerlist[0] > playerlist[1], playerlist[2] and playerlist[0] < 21:
        then print "player 1 wins!"
    

    但是因为在用户实际输入输入之前我不知道有多少人在玩,所以我很想知道我应该如何为获胜者编写代码。

    我不知道是否有办法说“如果这比其他人大”。我只知道如何说“如果这比那个大”。

    有没有办法在python中说“如果这比其余的更大”? 如果没有,你能给我一些建议,让代码找出胜利者吗?

1 个答案:

答案 0 :(得分:2)

  1. 您使用“玩家”变量走在正确的轨道上。如果你存储一个表示那里玩家数量的int,那么每当你想要做一些需要知道玩家数量的事情时,只需使用Players变量。例如,你可以写一个迭代那么多次的for循环(比如你已经差不多了)。为了迭代玩家,你需要将它们放在某种数据结构中(可能是一个列表)。

    一旦知道了玩家数量,就可以设置如下列表:

    playerList = []
    for i in range(Players):
        playerList[i] = [whateverDataYouWantToStoreAboutEachPlayer]
    

    之后,您可以通过引用playerList [i]来访问for循环中的每个玩家。这样,你可以在不知道提前玩家数量的情况下为每个玩家做事。

  2. 使用raw_input时,输入存储为字符串。要将它用作int(这是您想要使用它的方式),您需要先将其转换。您可以使用

    执行此操作
    Players = int(Players)
    

    虽然首先确保用户输入的数字实际上是一个数字会更安全,如

    while not Players.isdigit():
       Players = raw_input("Please enter an integer: ")
    Players = int(Players)
    

    此外,正如minitech所说(并且如上所示),您需要迭代范围(玩家),而不仅仅是玩家,因为这将创建从0到玩家-1的数字列表,并且您只能迭代以某种序列格式的数据。

  3. 编辑(回答后续问题):您可以通过迭代整个事物并跟踪您看到的最大值来找到列表中的最大值:

        highestIndex = 0
        for i in range(Players):
            if PlayerList[i] > playerList[highestIndex]:
                highestIndex = i
    

    最后,highestIndex会将索引保存在得分最高的玩家列表中。

    Python还有一个内置函数max(),它将为您提供列表中的最大值。但是,它不会为您提供该值的位置,因此在这种情况下使用它会更麻烦。