2012-07-30 13 views
5

Sono molto nuovo in Python e ho cercato di creare un gioco di blackjack multigiocatore su Python per un po 'di tempo. Ho incontrato un sacco di problemi e mi chiedevo se voi poteste aiutarmi con loro.Creazione di un gioco di blackjack multigiocatore

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" 

Questo è quello che ho finora. Capisco che ci sono un sacco di parole senza senso e codice che non funzionerà. Mi stavo chiedendo se voi ragazzi potete farmi sapere cosa c'è di sbagliato nel codice e magari suggerire alcune opzioni su come risolverlo.

mie principali preoccupazioni in questo momento:

  1. Sto facendo un "multiplayer" gioco del blackjack. Non ho idea di come dovrei creare un loop per un gioco di blackjack multiplayer. Nel mio codice, ho chiesto quante persone stanno giocando. Come faccio a creare un ciclo per il gioco senza sapere quale sarà il numero ?

    Inoltre, come posso creare una funzione per scoprire il vincitore senza sapere quanti giocatori stanno giocando?

  2. Dopo digito

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

    Il Players nel ciclo for mi dà un errore di sintassi. Che c'è?

come aggiornamento, Ho pensato a quello che hai detto di fare una lista e io ancora non capisco come devo fare per fare un codice per scoprire il vincitore.

ad esempio

anche se io faccio una lista, se non so quanti giocatori sono in realtà giocando, non sarei in grado di confrontare gli elementi della lista. Se sapessi quante persone stavano giocando,

playerlist = [1,2,3] 

posso dire

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

Ma siccome non voglio sapere quante persone stanno giocando fino a quando l'utente effettivamente tipi in ingresso, sono perduto su come dovrei scrivere il codice per il vincitore.

Non so se c'è un modo per dire "se questo è più grande del resto". So solo come dire "se questo è più grande di quello".

C'è un modo per dire "se questo è più grande del resto" in python? Se no, puoi darmi qualche suggerimento per fare il codice per scoprire il vincitore?

+4

Dovrebbe essere "per i in gamma (Giocatori)', non 'per i giocatori in intervallo'. – Ryan

+0

Cosa sono le domande del blackjack? http://stackoverflow.com/questions/11724954/how-do-i-separate-each-list-for-a-player-in-the-blackjack-game#comment15557653_11724954 – Benjamin

risposta

2
  1. Sei sulla strada giusta con la variabile "Giocatori". Se memorizzi un valore int che rappresenta il numero di giocatori lì, allora ogni volta che vuoi fare qualcosa che dovrebbe richiedere conoscere il numero di giocatori, usa invece la variabile Giocatori. Ad esempio, puoi scrivere un ciclo for che itera quel numero di volte (come se avessi già quasi ricevuto). Per iterare sui giocatori, dovrai metterli in una sorta di struttura dati (probabilmente una lista).

    Una volta che si conosce il numero di giocatori, è possibile impostare l'elenco come questo:

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

    Dopo di che, è possibile accedere a ogni giocatore in un ciclo for facendo riferimento a playerList [i]. In questo modo, puoi fare le cose per ogni giocatore senza conoscere il numero di giocatori in anticipo.

  2. Quando si utilizza raw_input, l'input viene memorizzato come una stringa. Per usarlo come int (che è il modo in cui vuoi usarlo), devi prima convertirlo. Si può fare questo con

    Players = int(Players) 
    

    anche se sarebbe più sicuro per assicurarsi innanzitutto che il numero l'utente ha inserito è in realtà un numero, come in

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

    Inoltre, come MiniTech detto (e come mostrato sopra), è necessario iterare oltre il range (Giocatori), piuttosto che solo i Giocatori, in quanto ciò creerà un elenco di numeri da 0 a Giocatori-1, e si può solo scorrere su dati che si trovano in una sorta di formato di sequenza.

EDIT (per rispondere alla domanda di follow-up): È possibile trovare il più grande valore nella lista dalla iterazione su tutta la faccenda e tenere traccia del valore più grande che si vede:

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

A Alla fine, highestIndex manterrà l'indice nella lista del giocatore con il punteggio più alto.

Python dispone anche di una funzione predefinita, max(), che fornisce il valore massimo in un elenco. Tuttavia, non ti darà la posizione di quel valore, quindi in questo caso sarebbe più complicato da usare.

Problemi correlati