python - 创建多人二十一点游戏

标签 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 给我一个语法错误。怎么了?

作为更新,我已经考虑了您所说的关于制作列表的内容 我还是不太明白我应该怎么做 编写代码以找出获胜者。

例如

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

playerlist = [1,2,3]

我可以说

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

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

我不知道是否有一种说法是“如果这个比其他的大”。我只知道怎么说“如果这个比那个大”。

有没有办法在 python 中说“如果这个比其他的大”? 如果没有,你能给我一些建议来制作代码以找出获胜者吗?

最佳答案

  1. 您的“Players”变量走在正确的轨道上。如果你在那里存储一个代表玩家数量的整数,那么任何时候你想要做一些需要知道玩家数量的事情,只需使用 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 的数字列表,并且您只能迭代处理某种序列格式的数据。

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

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

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

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

关于python - 创建多人二十一点游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11714596/

相关文章:

javascript - window.setTimeout() 问题

python - 如何使用 python 2.7 将多个 csv 列合并为一列?

python - 你可以在追加模式下使用pickle吗

iphone - 关于在 iOS 和 Android 上开发多人游戏的建议?

java - 每次输入/输出后是否需要重新创建 DataInputStream 或 DataOutputStream

java - Android:联网情况下的随机生成(多人游戏)

java - 如何为 Blackjack 创建 for 循环?

python - 更新 Dash 中多个绘图的绘图

python - python3 可变属性是否共享?

Python:如何使两个不同函数中的2个值相等?