Problème programme python jeu de la bataille
Résolu
Sunny
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je suis bloqué sur un exercice de programmation en python. On doit créer un programme qui simule un jeu de bataille de cartes. J'ai déjà essayé de faire l'exercice, j'aimerais avoir des conseils.
Merci d'avance
Les règles :
Une manche consiste à retourner une par une les cartes de son jeu.
Écrire un programme qui simule ce jeu de bataille.
Le code :
Je suis bloqué sur un exercice de programmation en python. On doit créer un programme qui simule un jeu de bataille de cartes. J'ai déjà essayé de faire l'exercice, j'aimerais avoir des conseils.
Merci d'avance
Les règles :
Une manche consiste à retourner une par une les cartes de son jeu.
- Celui dont la valeur de la carte est supérieure remporte les deux cartes.
- Si les cartes sont de même valeur, elles sont écartées.
- En fin de manche celui qui a le plus de cartes a gagné la manche.
Écrire un programme qui simule ce jeu de bataille.
Le code :
import random def jeuCartes(): jeu = [] couleurs = ["Pique","Coeur","Carreau","Trefle"] valeurs = [(2, "Deux"), (3, "Trois"), (4, "Quatre"), (5, "Cinq"), (6, "Six"), (7, "Sept"), (8, "Huit"), (9, "Neuf"), (10, "Dix"), (11, "Valet"), (12, "Dame"), (13, "Roi"), (14, "As")] for c in couleurs: for v in valeurs: jeu.append((c,)+v) return jeu jeu = jeuCartes random.shuffle(jeu) print(jeu) joueur1 = [] joueur2 = [] for i in range(0, 52, 2): joueur1.append(jeu[i]) for i in range(1, 52, 2): joueur2.append(jeu[i]) pioche = 0 comptejoueur1 = 0 comptejoueur2 = 0 random.shuffle(joueur1) random.shuffle(joueur2) for i in renversed(range(1, len(0)): cartejoueur1 = joueur1[i] cartejoueur2 = joueur2[i] if cartejoueur1[1] > cartejoueur2[1]: comptejoueur1 += 2 if cartejoueur1[1] < cartejoueur2[1]: comptejoueur2 += 2 if cartejoueur1[1] == cartejoueur2[1]: pioche += 2 return len(comptejoueur1), len(comptejoueur2)
A voir également:
- Jeu bataille python
- 94 jeu - Télécharger - Puzzle & Réflexion
- Citizen code python avis - Accueil - Outils
- 94 degrés jeu - Télécharger - Divers Jeux
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu logo - Télécharger - Jeux vidéo
2 réponses
Bonsoir
tout d'abord, merci à KX d'avoir ajouter les balises de code, pour Python c'est indispensable sinon on ne voit pas l'indentation. Voir ce lien pour tes prochains messages.
Le code que tu présentes ne dit pas qui a gagné, c'est pourtant la finalité de ton exercice.
D'ailleurs il se termine par un
Pour le code de la donne :
Une seule boucle suffit
Une seule boucle => temps d'exécution réduit.
Là
tu devrais mettre des print un peu partout pour analyser ce qui se passe. Notamment à
tout d'abord, merci à KX d'avoir ajouter les balises de code, pour Python c'est indispensable sinon on ne voit pas l'indentation. Voir ce lien pour tes prochains messages.
Le code que tu présentes ne dit pas qui a gagné, c'est pourtant la finalité de ton exercice.
D'ailleurs il se termine par un
return, comme s'il s'agissait d'une fonction, or il n'y a pas de début de fonction.
Pour le code de la donne :
for i in range(0, 52, 2): joueur1.append(jeu[i]) for i in range(1, 52, 2): joueur2.append(jeu[i])
Une seule boucle suffit
for i in range(0,52,2): joueur1.append(jeu[i]) joueur2.append(jeu[i + 1])
Une seule boucle => temps d'exécution réduit.
Là
for i in renversed(range(1, len(0)): cartejoueur1 = joueur1[i] cartejoueur2 = joueur2[i] if cartejoueur1[1] > cartejoueur2[1]: comptejoueur1 += 2 if cartejoueur1[1] < cartejoueur2[1]: comptejoueur2 += 2 if cartejoueur1[1] == cartejoueur2[1]: pioche += 2
tu devrais mettre des print un peu partout pour analyser ce qui se passe. Notamment à
len(0).
Bonjour,
Il y a quelques petites erreurs
Quelques remarques supplémentaires :
Bonne chances
Il y a quelques petites erreurs
- attention à l'indentation (j'ai corrigé ton message) ; de manière générale, essaye de suivre les conventions PEP8.
- l12: il faut appeler la fonction, sinon jeu contient un pointeur vers la fonction, et non le résultat qu'elle retourne :
jeu = jeuCartes()
-
renversed
n'est pas défini ; voulais-tu utiliserreverse
? Plus simplement, tu passer àrange
mettre un pas négatif. D'un point de vue "mathématique", il n'y a pas vraiment d'intérêt à renverser l'ordre des pioches, ça ne change rien en termes de statistiques.
Quelques remarques supplémentaires :
- Il n'y a pas vraiment d'utilité à stocker des couples pour les noms des cartes. Tu peux représenter chaque carte par un couple (si tu veux vraiment garder la notion de couleur), voire ne pas les "colorer" car ça n'a pas d'importance dans le jeu de la bataille (tu aurais donc 4 cartes de hauteur 1 à 13 inclues).
- La règle de la "bataille" semble un peu modifiée, après c'est peut-être que les règles que je connais sont un peu familiales. Pour moi, quand il y a égalité, on met par dessus les carte ex-æquo une carte face cachée, puis on relance une bataille entre les deux cartes suivantes, et on répète cette procédure tant qu'il n'y a pas de vainqueur. Si un joueur est à court de carte, celui qui en a le plus gagne. Si les deux joueurs ont épuisés toutes leurs cartes et restent parfaitement ex-æquo, il y a égalité parfaite. J'imagine que la règle a été modifiée pour simplifier l'exercice.
Bonne chances