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
-
Je viens finalement de trouver la solution de mon problème.
Il suffisait simplement de rajouter carte1[1] == ou carte2[1] après chaque "or"
voici le programme au complet. J'ai aussi rajouter une fonction permettant d'écrire le rapport de la partie dans un fichier texte.
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 carte1[1] == "trèfle": if carte2[1] == "coeur" or carte2[1] == "carreau": gainj1.append(carte1) gainj1.append(carte2) elif carte2[1] == "pique" or carte2[1] == "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 carte1[1] == "carreau": if carte2[1] == "pique" or carte2[1] == "trèfle": gainj2.append(carte1) gainj2.append(carte2) elif carte2[1] == "coeur" or carte2[1] == "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) def fichier_texte(): filin = open("rapport_partie.txt", "w", encoding = "utf-8") print("Rapport de la partie de bataille:\n", file = filin) print("Nombre de cartes empochées par le joueur 1:", file = filin) print(len(gainj1), file = filin) print("\nCartes empochées par le joueur 1:", file = filin) print(gainj1, file = filin) print("\nNombre de cartes empochées par le joueur 2:", file = filin) print(len(gainj2), file = filin) print("\nCartes empochées par le joueur 2:", file = filin) print(gainj2, file = filin) print("\nNombre de cartes écartées:", file = filin) print(len(cartes_ecartees), file = filin) print("\nCartes écartées:", file = filin) print(cartes_ecartees, file = filin) if gainj1 > gainj2: print("\nLe joueur 1 a gagné", file = filin) elif gainj1 < gainj2: print("\nLe joueur 2 a gagné", file = filin) elif gainj1 == gainj2: print("\nIl y a égalité", file = filin) filin.close()