2012-07-30 33 views
5

Soy muy nuevo en Python y he estado intentando hacer un juego de blackjack multijugador en python desde hace un tiempo. He tenido muchos y muchos problemas y me preguntaba si ustedes podrían ayudarme con ellos.Creando un juego de blackjack multijugador

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" 

Esto es lo que tengo hasta ahora. Entiendo que hay muchos galimatías y códigos que no funcionarán. Me preguntaba si ustedes pueden decirme qué está mal con el código y tal vez sugerir algunas opciones sobre cómo solucionarlo.

Mis principales preocupaciones en este momento:

  1. estoy haciendo un "multijugador" juego de blackjack. No tengo idea de cómo se supone que debo hacer un ciclo para un juego de blackjack multijugador. En mi código, pregunté cuántas personas están jugando. ¿Cómo hago un ciclo para el juego sin saber cuál será el número?

    Además, ¿cómo creo una función para encontrar al ganador sin saber cuántos jugadores están jugando?

  2. después de escribir

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

    El Players en el bucle for me da un error de sintaxis. ¿Qué está mal?

Como una actualización, he pensado en lo que dijiste acerca de hacer una lista y todavía no entienden realmente cómo debería ir sobre hacer un código para averiguar el ganador.

por ejemplo

incluso si hago una lista, si no sé cuántos jugadores están jugando en realidad, yo no sería capaz de comparar los elementos de la lista. Si supiera cuántas personas estaban jugando,

playerlist = [1,2,3] 

puedo decir

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

Pero ya que no va a saber cuántas personas están jugando hasta que el usuario realmente tipos en la entrada, estoy perdido en cuanto a cómo se supone que debo escribir el código para el ganador.

No sé si hay una manera de decir "si esto es más grande que el resto". Solo sé cómo decir "si esto es más grande que eso".

¿Hay alguna manera de decir "si esto es más grande que el resto" en python? Si no, ¿me puede dar algunas sugerencias para hacer el código para encontrar al ganador?

+4

Debería ser 'para mí en el rango (Jugadores)', no 'para mí en el rango Players'. – Ryan

+0

¿Qué pasa con las preguntas de Blackjack? http://stackoverflow.com/questions/11724954/how-do-i-separate-each-list-for-a-player-in-the-blackjack-game#comment15557653_11724954 – Benjamin

Respuesta

2
  1. Estás en el camino correcto con la variable "Jugadores". Si almacena un int que representa el número de jugadores allí, cada vez que quiera hacer algo que requiera conocer la cantidad de jugadores, simplemente use la variable Players. Por ejemplo, puede escribir un bucle for que itere esa cantidad de veces (como ya casi lo tiene). Para iterar sobre los jugadores, deberá colocarlos en algún tipo de estructura de datos (probablemente una lista).

    Una vez conocido el número de jugadores, se puede configurar la lista de la siguiente manera:

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

    Después de eso, se puede acceder a cada jugador en un bucle for haciendo referencia a playerlist [i]. De esta forma, puedes hacer cosas para cada jugador sin saber la cantidad de jugadores antes de tiempo.

  2. Cuando utiliza raw_input, la entrada se almacena como una cadena. Para utilizarlo como int (que es la forma en que desea usarlo), primero debe convertirlo. Usted puede hacer esto con

    Players = int(Players) 
    

    aunque sería más seguro para asegurarse primero de que el número introducido por el usuario es realmente un número, como en

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

    También, como MiniTech dijo (y tal como se exhiben arriba), necesitas iterar sobre el rango (Jugadores), en lugar de solo Jugadores, ya que eso creará una lista de números de 0 a Jugadores-1, y solo puedes iterar sobre datos que están en algún tipo de formato de secuencia.

EDIT (para responder a la pregunta de seguimiento): Puede encontrar el valor más alto en la lista iterando sobre todo el asunto y hacer el seguimiento del valor más grande que se ve:

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

En al final, highestIndex mantendrá el índice en la lista del jugador con el puntaje más alto.

Python también tiene una función incorporada, max(), que le dará el valor máximo en una lista. Sin embargo, no le dará la ubicación de ese valor, por lo que sería más engorroso usarlo en este caso.

Cuestiones relacionadas