Un jeu de bataille spéciale en python
Résolu
Bonjour,
Je dois faire une simulation d'un jeu de bataille en python.
Les règles sont un peu différente d'une partie normale:
- une carte noire est toujours plus forte qu'une rouge.
- si les deux cartes sont rouges, la plus forte est celle avec la plus petite valeur
- si les deux cartes sont noirs, la plus forte est celle avec la plus grande valeur.
Celui qui a la plus forte carte gagne les deux cartes mais ne les remet pas dans son paquet.
Si il y a égalité, les deux cartes sont écartées.
Et enfin la manche s'arrête quand les 2 joueurs sont arriver à la fin de leur paquet.
Voici le code que j'ai déjà fait:
Mon problème est que le joueur 1 gagne toujours toutes les cartes (gainj1 = 52 quand on exécute la fonction "partie()" ) et je ne comprends pas pourquoi.
En espérant que vous pourrez m'aider,
Merci d'avance.
Je dois faire une simulation d'un jeu de bataille en python.
Les règles sont un peu différente d'une partie normale:
- une carte noire est toujours plus forte qu'une rouge.
- si les deux cartes sont rouges, la plus forte est celle avec la plus petite valeur
- si les deux cartes sont noirs, la plus forte est celle avec la plus grande valeur.
Celui qui a la plus forte carte gagne les deux cartes mais ne les remet pas dans son paquet.
Si il y a égalité, les deux cartes sont écartées.
Et enfin la manche s'arrête quand les 2 joueurs sont arriver à la fin de leur paquet.
Voici le code que j'ai déjà fait:
from random import *
jeu = []
for c in ["pique", "coeur", "trèfle", "carreau"]:
for v in range (1,14):
carte = (v,c)
jeu.append(carte)
joueur1 = []
joueur2 = []
def distribution():
shuffle(jeu)
for i in range(0,52,2):
cartej1 = jeu[i]
joueur1.append(cartej1)
cartej2 = jeu[i+1]
joueur2.append(cartej2)
return joueur1, joueur2
gainj1 = []
gainj2 = []
cartes_ecartees = []
def partie():
for k in range(0, 26):
carte1 = joueur1[k]
carte2 = joueur2[k]
if carte1[1] == "pique" or "trèfle":
if carte2[1] == "coeur" or "carreau":
gainj1.append(carte1)
gainj1.append(carte2)
elif carte2[1] == "pique" or "trèfle":
if carte1[0] > carte2[0]:
gainj1.append(carte1)
gainj1.append(carte2)
elif carte1[0] < carte2[0]:
gainj2.append(carte1)
gainj2.append(carte2)
elif carte1[0] == carte2[0]:
cartes_ecartees.append(carte1)
cartes_ecartees.append(carte2)
elif carte1[1] == "coeur" or "carreau":
if carte2[1] == "pique" or "trèfle":
gainj2.append(carte1)
gainj2.append(carte2)
elif carte2[1] == "coeur" or "carreau":
if carte1[0] < carte2[0]:
gainj1.append(carte1)
gainj1.append(carte2)
elif carte1[0] > carte2[0]:
gainj2.append(carte1)
gainj2.append(carte2)
elif carte1[0] == carte2[0]:
cartes_ecartees.append(carte1)
cartes_ecartees.append(carte2)
return len(gainj1), len(gainj2)
Mon problème est que le joueur 1 gagne toujours toutes les cartes (gainj1 = 52 quand on exécute la fonction "partie()" ) et je ne comprends pas pourquoi.
En espérant que vous pourrez m'aider,
Merci d'avance.
3 réponses
-
Contributeurbonjour,
pourquoi ne nous montres-tu pas le programme complet?
merci de bien spécifier le langage quand tu partages du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code-
-
Contributeur@BQuent1il manque l'appel à la fonction partie(). chez moi, cet appel provoque une erreur.
pas utile de modifier la question, tu peux éventuellement montrer le code dans un commentaire. -
@yg_beL'appel de la fonction partie() se fait dans la console pour moi... tout comme l'appel de la fonction distribution(). Savez vous quelle erreur elle provoque ?
d'accord merci, voici le code avec le bon language:
from random import * jeu = [] for c in ["pique", "coeur", "trèfle", "carreau"]: for v in range (1,14): carte = (v,c) jeu.append(carte) joueur1 = [] joueur2 = [] def distribution(): shuffle(jeu) for i in range(0,52,2): cartej1 = jeu[i] joueur1.append(cartej1) cartej2 = jeu[i+1] joueur2.append(cartej2) return joueur1, joueur2 gainj1 = [] gainj2 = [] cartes_ecartees = [] def partie(): for k in range(0, 26): carte1 = joueur1[k] carte2 = joueur2[k] if carte1[1] == "pique" or "trèfle": if carte2[1] == "coeur" or "carreau": gainj1.append(carte1) gainj1.append(carte2) elif carte2[1] == "pique" or "trèfle": if carte1[0] > carte2[0]: gainj1.append(carte1) gainj1.append(carte2) elif carte1[0] < carte2[0]: gainj2.append(carte1) gainj2.append(carte2) elif carte1[0] == carte2[0]: cartes_ecartees.append(carte1) cartes_ecartees.append(carte2) elif carte1[1] == "coeur" or "carreau": if carte2[1] == "pique" or "trèfle": gainj2.append(carte1) gainj2.append(carte2) elif carte2[1] == "coeur" or "carreau": if carte1[0] < carte2[0]: gainj1.append(carte1) gainj1.append(carte2) elif carte1[0] > carte2[0]: gainj2.append(carte1) gainj2.append(carte2) elif carte1[0] == carte2[0]: cartes_ecartees.append(carte1) cartes_ecartees.append(carte2) return len(gainj1), len(gainj2) -
Contributeur@BQuent1montre alors comment tu fais ces appels: comment pourrions nous deviner ce que tu fais dans la console?
il est préférable de les inclure dans le code partagé. -
@yg_beC'est vrai désolé, j'écris simplement le nom de la fonction dans la console pour qu'elle s'éxecute:
>>>distribution()
ou>>>partie()
-