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.
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.
-
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!-
-
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 fairesargent[x]
maisjoueurs[x].argent
Enfin, dans un souci d'optimisation, au lieu defor 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)+" : ")) -
@ZephirrMerci tu m'a sauvé d'une nuit blanche! lol
C'est vrai que j'avais pas très bien compris lesargent
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 fonctionif
Merci de votre aide et de votre patience! -
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 faisjoueurs.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 tonrandrange
: utilise plutôtnumero_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 -
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 dansdef __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!
-