2012-07-30 16 views
5

Jestem bardzo nowym użytkownikiem Pythona i od pewnego czasu próbuję stworzyć grę w blackjacka dla wielu graczy na Pythonie. Miałem wiele problemów i zastanawiałem się, czy możecie mi pomóc.Tworzenie gry w blackjacka dla wielu graczy

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" 

To jest to, co do tej pory miałem. Rozumiem, że jest dużo bełkotu i kodu, który nie zadziała. Zastanawiam się, czy możesz mi powiedzieć, co jest nie tak z kodem i może zasugerować kilka opcji, jak to naprawić.

Moje główne obawy właśnie teraz:

  1. Robię "multiplayer" blackjack gry. Nie mam pojęcia, jak mam zrobić pętlę do gry w blackjacka dla wielu graczy. W moim kodzie pytałem, ile osób gra. Jak utworzyć pętlę do gry, nie wiedząc, jaki będzie numer?

    Ponadto, w jaki sposób mogę utworzyć funkcję, aby znaleźć zwycięzcę, nie wiedząc, ilu graczy gra?

  2. Po wpisaniu w

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

    Players w pętli daje mi błąd składni. Co jest nie tak?

jako aktualizacja, myślałem o tym, co powiedział na temat tworzenia listy a ja nadal nie bardzo rozumiem w jaki sposób powinny przejść o dokonywania kod, aby dowiedzieć się zwycięzcą.

np

nawet jeśli zrobię listę, jeśli nie wiem, ilu graczy są rzeczywiście gra, nie będzie w stanie porównać elementy na liście. Gdybym wiedział, jak wiele osób gra,

playerlist = [1,2,3] 

mogę powiedzieć

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

Ale ponieważ nie będę wiedzieć, ile osób gra, dopóki użytkownik faktycznie typów w wejściu, jestem zagubiony o tym, jak mam napisać kod dla zwycięzcy.

Nie wiem, czy istnieje sposób na powiedzenie "jeśli jest większy niż reszta". Wiem tylko, jak powiedzieć "jeśli jest większy".

Czy istnieje sposób na powiedzenie "jeśli jest większy niż reszta" w python? Jeśli nie, czy możesz podać kilka sugestii, jak wprowadzić kod, aby znaleźć zwycięzcę?

+4

Powinno to być 'dla i w zakresie (Gracze)', a nie 'dla mnie w zakresie Gracze'. – Ryan

+0

Co jest z pytaniami o blackjacka? http://stackoverflow.com/questions/11724954/how-do-i-separate-each-list-for-a-player-in-the-blackjack-game#comment15557653_11724954 – Benjamin

Odpowiedz

2
  1. Jesteś na właściwej ścieżce ze zmienną "Gracze". Jeśli przechowujesz int reprezentujący liczbę graczy, wtedy za każdym razem, gdy chcesz zrobić coś, co powinno wymagać znajomości liczby graczy, po prostu użyj zmiennej Gracze. Na przykład, możesz napisać pętlę for, która iteruje tyle razy (jak już prawie masz). Aby powtórzyć grę nad graczami, musisz umieścić je w jakiejś strukturze danych (prawdopodobnie na liście).

    Gdy wiesz liczbę graczy, można skonfigurować listę takiego:

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

    Po tym, można uzyskać dostęp do każdego gracza w pętli for, odwołując się do playerList [i]. W ten sposób możesz robić rzeczy dla każdego gracza bez znajomości liczby graczy z wyprzedzeniem.

  2. Gdy używasz raw_input, dane wejściowe są przechowywane jako ciąg. Aby użyć go jako int (w taki sposób, w jaki chcesz go użyć), musisz go najpierw przekonwertować. Można to zrobić z

    Players = int(Players) 
    

    chociaż byłoby bezpieczniej jest najpierw upewnij się, że numer użytkownik wpisany jest w rzeczywistości liczba, jak w

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

    Ponadto, jak minitech powiedział (jak pokazano powyżej), musisz powtórzyć zakres (Gracze), a nie tylko Gracze, ponieważ utworzy on listę liczb od 0 do Graczy-1, a możesz jedynie dokonywać iteracji po danych w formacie sekwencji.

EDIT (odpowiedzieć na kolejne pytanie): Można znaleźć największą wartość na liście przez iteracja ciągu całej sprawy i śledzenie o największej wartości widzisz:

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

Na koniec, najwyższa wartość indeksu utrzyma indeks na liście gracza z najwyższym wynikiem.

Python ma również wbudowaną funkcję max(), która daje maksymalną wartość na liście. Nie da ci jednak lokalizacji tej wartości, więc w tym przypadku byłoby bardziej niewygodne.

Powiązane problemy