Programme du jeu de la roulette

Résolu
Bonjour à tous les zéros,
voilà mon soucis, avec un ami, nous aimerons programmer le jeu de la roulette(celui que l'on retrouve dans les casinos) en langage python. Le problème est que: on a du mal a structurer notre programme car on a rajouter une difficulté qu'y est le choix du nombre de joueur à la partie.
Je vous explique le programme qu'on veut créer:

Déroulement d'une partie: "Introduction":

-On choisit le nombre de joueur

-On assigne un nom à chaque joueur (ex: le 1er sera joueur1, le 2eme sera joueur2,...)

-On indique ensuite leur montant de leur portefeuille (ex: 1000€ chacun)

-Puis la mise minimale ainsi que de la mise maximale

Le jeux (à faire en boucle):

-On demande au joueur, chacun à leur tour, de choisir un numéro entre 0 et 36, puis le montant de leur mise

-Lorsque les mises sont faites, le programme génère un nombre aléatoire entre 0 et 36

-Puis on affiche ce numéro gagnant, et pour chaque joueur, on affiche leurs gains ou leurs pertes.

-On affiche, ensuite, le montant de leur portefeuille (actualiser)

-Si il y a une Banqueroute (c'est à dire, si l'un des joueurs n'a plus d'argent dans son portefeuille), la partie s'arrête

-Pour finir, on demande si ils veulent faire une autre manche ou quitter

Voila le programme que nous aimerons concevoir.

Nous nous sommes tournés sur l'utilisation des listes/tableaux avec l'utilisation de la boucle For, qui je pense être la manière la plus simple de faire ce programme. Mais ayant quelques lacunes sur l'utilisation de ces listes/tableaux, nous avons décidé de vous demander un peu d'aide.

Toutes les idées sont les bienvenues, merci par avance pour l'aide que vous aurez apporté à ce sujet.

3 réponses

Résumé de la discussion

Plusieurs participants envisagent un jeu de roulette en Python avec un nombre de joueurs dynamique, la gestion desportefeuilles et des mises. Les échanges portent sur l'utilisation de listes pour suivre joueurs, argent et choix, ainsi que sur l'adoption d'une approche orientée objet afin de structurer le code. Des exemples de code et des corrections apparaissent, notamment une solution utilisant une classe Joueur et des boucles for pour alimenter les joueurs, leurs numéros et leurs mises, puis calcul des gains. En complément, certains apportent des conseils sur Python 2 versus Python 3 et sur la vérification rigoureuse des données (argent disponible, mises valides) pour éviter les erreurs d'indexation et d'exécution.

Bobot (l’IA à votre service)
  1. Voici le programme avec chaque partie, mais j'ai un petit soucis avec la partie des gains et pertes car:
    1- lorsque je donne le bon numéro, il affiche rien

    2- et ensuite j'ai ce message d'erreur:
    File "C:\Users\victor\Desktop\Test roulette.py", line 44, in <module>
    if sargent[x] <= 0:
    TypeError: 'int' object is unsubscriptable

    Je pense que j'ai oublié plusieurs trucs mais je sais pas où... ça doit être un truc tout "con"...

    from random import randrange
    
    class Joueur:
    
        def __init__(self, nom, argent):
            self.nom = str(nom)
            self.argent = int(argent)
            self.numero = 0
            self.mise = 0
    
    
    nbJoueurs = int(input("Nombre de joueurs : "))
    joueurs = []
    
    sargent = input("Argent de départ  : ")
    
    continuer_partie = True
    
    while continuer_partie:
        
        for x in range(0, nbJoueurs):
            joueurs.append(Joueur(input(("Numero choisit du joueur "+str(x+1)+" : ")), sargent))
    
        for x in range(0, nbJoueurs):
            joueurs[x].mise = int(input("Mise du joueur "+str(x+1)+" : "))
    
    
        #Affichage du numero gagnant (aléatoirement)
        numero_gagnant = randrange(1)
        print "La roulette tourne,...... tourne, ...... tourne, ...... tourne, et s'arrete sur le numero", numero_gagnant
    
        for x in range(0, nbJoueurs):
            if joueurs[x] == numero_gagnant:
                print "Felicitation, votre numero est le bon, vous obtenez ",  joueurs[x].mise*35, "euros!"
                sargent[x] = sargent[x] + joueurs[x].mise*35
           
            else:
                print "Desoler l'ami, c'est pas pour cette fois. Vous perdez votre mise qui est de", joueurs[x].mise, "euros"
                sargent[x] =sargent[x] - joueurs[x].mise
    
    
        # On interrompt la partie si le joueur est ruine
        for x in range(0, nbJoueurs):
            if sargent[x] <= 0:
                print("Vous etes ruine! C'est la fin de la partie.")
                continuer_partie = False           
            else:
                # On affiche l'argent du joueur
                print("Le joueur"+str(x+1)+"a desormais", sargent[x], "euros")
                quitter = input("Souhaitez-vous quitter le casino (o/n) ? ")
                if quitter == "o" or quitter == "O":
                    print("Vous quittez le casino avec vos gains.")
                    continuer_partie = False


    Merci de votre aide et de votre patience!
    3
    1. Tu utilise python 2 ou 3?
      0
    2. Tu n'as apparemment pas compris
      sargent
      :
      c'est l'argent de départ pour tous les joueurs (s pour start) qui est un int.

      Pour accéder à l'argent d'un des joueur, il ne faut pas faire
      sargent[x]
      mais
      joueurs[x].argent


      Enfin, dans un souci d'optimisation, au lieu de
      for x in range(0, nbJoueurs):
           joueurs.append(Joueur(input(("Numero choisit du joueur "+str(x+1)+" : ")), sargent))
      
      for x in range(0, nbJoueurs):
           joueurs[x].mise = int(input("Mise du joueur "+str(x+1)+" : "))

      met plutôt:
      for x in range(0, nbJoueurs):
           joueurs.append(Joueur(input(("Numero choisit du joueur "+str(x+1)+" : ")), sargent))
           joueurs[x].mise = int(input("Mise du joueur "+str(x+1)+" : "))
      0
    3. @ZephirrMerci tu m'a sauvé d'une nuit blanche! lol
      C'est vrai que j'avais pas très bien compris le
      sargent
      du moins pourquoi il y avait un s!

      Donc j'ai tout changé mais je pense qui il y a un problème à la ligne 33 avec:
      if joueurs[x] == numero_gagnant:

      car même si je gagne, il dit que j'ai perdu:
      Nombre de joueurs : 2
      Argent de départ : 1000
      Numero choisit du joueur 1 : 0
      Mise du joueur 1 : 25
      Numero choisit du joueur 2 : 1
      Mise du joueur 2 : 25
      La roulette tourne,...... tourne, ...... tourne, ...... tourne, et s'arrete sur le numero 0
      Desoler joueur 1 , c'est pas pour cette fois. Vous perdez votre mise qui est de 25 euros
      Desoler joueur 2 , c'est pas pour cette fois. Vous perdez votre mise qui est de 25 euros
      Le joueur 1 a desormais 975 euros
      Souhaitez-vous quitter le casino (o/n) ?


      Et pour finir il n'affiche que le portefeuille du joueur 1 mais pas des autres.
      Je pense qu'il ne prend pas en compte la fonction
      if


      Merci de votre aide et de votre patience!
      0
    4. Pour accéder au numéro d'un joueur :
      joueur[x].numero

      De plus il y a un autre non-sens dans ton script: à chaque fois que tu fais
      joueurs.append(Joueur(input(("Numero choisit du joueur "+str(x+1)+" : ")), sargent))

      tu ajoute un joueur. Il faut donc le faire uniquement au début avec :
      for x in range(0, nbJoueurs):
          joueurs.append(Joueur(input(("Nom du joueur "+str(x+1)+" : ")), sargent))

      Le début devient donc:
      sargent = input("Argent de départ  : ")
      
      continuer_partie = True
      
      for x in range(0, nbJoueurs):
          joueurs.append(Joueur(input(("Nom du joueur "+str(x+1)+" : ")), sargent))
      
      while continuer_partie:
          
          for x in range(0, nbJoueurs):
              joueurs[x].numero = int(input(("Numero choisit du joueur "+str(x+1)+" : ")))
              joueurs[x].mise = int(input("Mise du joueur "+str(x+1)+" : "))

      Il y a aussi un problème avec ton
      randrange
      : utilise plutôt
      numero_gagnant = random.randint(0,36)


      Enfin, pour demander une seule fois si on veut quitter le casino :
       # On interrompt la partie si le joueur est ruine
          for x in range(0, nbJoueurs):
              if sargent[x] <= 0:
                  print("Vous etes ruine! C'est la fin de la partie.")
                  continuer_partie = False           
              else:
                  # On affiche l'argent du joueur
                  print("Le joueur"+str(x+1)+"a desormais", sargent[x], "euros")
      
      
          quitter = input("Souhaitez-vous quitter le casino (o/n) ? ")
          if quitter == "o" or quitter == "O":
               print("Vous quittez le casino avec vos gains.")
               continuer_partie = False
      0
    5. Merci, sinon pour le
      randrange
      , je l'avais mis à 1 pour voir si la partie des gains marcher! ;)

      Sinon maintenant j'ai un autre problème (après en avoir réglé 2, il y en a d'autre qui apparaît! ^^' ), après avoir remplacé les choses qui n'allaient pas:
      from random import randrange
      
      class Joueur:
      
          def __init__(self, nom, argent):
              self.nom = str(nom)
              self.argent = int(argent)
              self.numero = 0
              self.mise = 0
      
      
      nbJoueurs = int(input("Nombre de joueurs : "))
      joueurs = []
      
      sargent = input("Argent de départ  : ")
      
      continuer_partie = True
      
      for x in range(0, nbJoueurs):
          joueurs.append(Joueur(input(("Numero du joueur : ")), sargent))
      
      while continuer_partie:
          
          for x in range(0, nbJoueurs):
              joueurs[x].numero(Joueur(input(("Joueur "+str(x+1)+", quel numero avez vous choisi? : "))))
              joueurs[x].mise = int(input("Joueur "+str(x+1)+", ainsi que votre mise : "))
      
      
          #Affichage du numero gagnant (aléatoirement)
          numero_gagnant = random.randint(0,36)
          print "La roulette tourne,...... tourne, ...... tourne, ...... tourne, et s'arrete sur le numero", numero_gagnant
      
          for x in range(0, nbJoueurs):
              if joueurs[x].numero == numero_gagnant:
                  print "Felicitation joueur "+str(x+1)+" vous avez le bon numero, vous obtenez ",  joueurs[x].mise*35, "euros!"
                  joueurs[x].argent = joueurs[x].argent + joueurs[x].mise*35
             
              else:
                  print "Desoler joueur "+str(x+1)+" , c'est pas pour cette fois. Vous perdez votre mise qui est de", joueurs[x].mise, "euros"
                  joueurs[x].argent = joueurs[x].argent - joueurs[x].mise
      
      
          # On interrompt la partie si le joueur est ruine
          for x in range(0, nbJoueurs):
              if sargent[x] <= 0:
                  print("Vous etes ruine! C'est la fin de la partie.")
                  continuer_partie = False           
              else:
                  # On affiche l'argent du joueur
                  print"Le joueur "+str(x+1)+" a desormais", sargent[x], "euros"
                  
      
          quitter = input("Souhaitez-vous quitter le casino (o/n) ? ")
          if quitter == "o" or quitter == "O":
              print"Vous quittez le casino avec vos gains."
              continuer_partie = False


      j'ai ce message d'erreur:
        File "C:\Users\victor\Desktop\Test roulette.py", line 25, in <module>
      joueurs[x].numero(Joueur(input(("Joueur "+str(x+1)+", quelle numero avez vous choisi? : "))))
      TypeError: __init__() takes exactly 3 arguments (2 given)


      Je pense rajouter dans
      def __init__(self, nom, argent):
      "numero" mais j'ai essayé et il me met ce message d'erreur:
        File "C:\Users\victor\Desktop\Test roulette.py", line 20, in <module>
      joueurs.append(Joueur(input(("Numero du joueur : ")), sargent))
      TypeError: __init__() takes exactly 4 arguments (3 given)

      Je suis un peu coincé :/

      Merci de votre aide et de votre patience!
      0