Un jeu de bataille spéciale en python

Résolu
BQuent1 Messages postés 16 Statut Membre -  
yg_be Messages postés 24281 Statut Contributeur -
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.
A voir également:

3 réponses

yg_be Messages postés 24281 Statut Contributeur Ambassadeur 1 584
 
bonjour,
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
0
BQuent1 Messages postés 16 Statut Membre
 
Désolé mais je ne comprends pas, j'ai mis l'entièreté du programme que j'ai fais. Que manquerais t-il ?
Merci pour le conseil, je ne vois pas de manière de modifier la question, dois-je en recréer une ?
0
yg_be Messages postés 24281 Statut Contributeur 1 584 > BQuent1 Messages postés 16 Statut Membre
 
il 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.
0
BQuent1 Messages postés 16 Statut Membre > yg_be Messages postés 24281 Statut Contributeur
 
L'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)
0
yg_be Messages postés 24281 Statut Contributeur 1 584 > BQuent1 Messages postés 16 Statut Membre
 
montre 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é.
0
BQuent1 Messages postés 16 Statut Membre > yg_be Messages postés 24281 Statut Contributeur
 
C'est vrai désolé, j'écris simplement le nom de la fonction dans la console pour qu'elle s'éxecute:

>>>distribution()

ou
>>>partie()
0