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:

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

  1. 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()
    0
    1. Contributeur
      en effet, tu aurais pu rapidement t'en rendre compte avec un print placé après la ligne 28.
      tu peux aussi écrire:
      if carte1[1] in ( "pique" , "trèfle"):
      0