2012-07-30 78 views
5

我對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: 
    

    Players在for循環給我一個語法錯誤。哪裏不對?

作爲一個更新,我還以爲你說的關於製造列表 什麼,我還是真的不明白我應該如何去 作出代碼,找出贏家。

例如

即使我做一個列表,如果我不知道有多少玩家是如何其實玩,我就不能在列表中的元素進行比較。如果我知道有多少人在玩,

playerlist = [1,2,3] 

我可以說

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

但因爲我不知道有多少人在玩,直到用戶實際輸入的類型,我迷路了至於我應該如何爲勝利者編寫代碼。

我不知道是否有方法說「如果這比其他更大」。我只知道如何說「如果這比這更大」。

python有沒有辦法說「如果這比其他更大」? 如果不是,你能給我一些建議,讓代碼找出勝利者嗎?

+4

它應該是'我在範圍(球員)',而不是'我在範圍球員'。 – Ryan 2012-07-30 02:03:25

+0

二十一點問題是怎麼回事? http://stackoverflow.com/questions/11724954/how-do-i-separate-each-list-for-a-player-in-the-blackjack-game#comment15557653_11724954 – Benjamin 2012-07-30 20:54:54

回答

2
  1. 您的「Players」變量正處於正確的軌道上。如果你存儲一個代表玩家數量的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的數字列表,並且你只能遍歷某種序列格式的數據。

EDIT(回答後續問題):您可以通過遍歷整個事情,保持最大價值的軌道在列表中找到最大的價值,你看:

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

在最後,highestIndex將把索引保持在得分最高的玩家列表中。

Python也有一個內置函數max(),它會給你列表中的最大值。但它不會給你這個價值的位置,所以在這種情況下使用會更麻煩。