IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation multimédia/Jeux Python Discussion :

programme de bataille ISN


Sujet :

Programmation multimédia/Jeux Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut programme de bataille ISN
    bonjour a tous!

    alors voila, j'ai essayé de programmer un jeu de bataille, pour ca je me suis aidé d'un programme mais il y avait des erreures, j'ai corrigé ce que je pouvais du style syntaxe ou bien des erreurs du style appel d'une fonction avec une liste

    mais la je bloque et j'aurais vraiment besoin d'aide, ce programme doit absolument marcher x)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    #----------Jeux de cartes: Bataille----------#
     
    from random import randrange
    from time import sleep
     
    #defintion des classes
     
    class JeuxDeCarte(object):
        "Definition d'un jeu de cartes"
     
        couleur = ("Coeur", "Carreau", "Trefle", "Pique")
        valeur = (2, 3, 4, 5, 6, 7, 8, 9, 10, "Valet", "Dame", "Roi", "As")
     
        def __init__(self):
            "construction de la liste des 52 cartes"
            self.jeu = []
            for coul in range(4):
                for val in range(13):
                    self.jeu.append((val, coul))
     
        def nom_carte(self, c):
            "renvoi le nom de la carte"
            return "%s de %s" (self.valeur[c[0]], self.couleur[c[1]])
     
        def battre(self):
            "permet de melanger les cartes"
            a = 0
            b = len(self.jeu)
            while a < randrange(100, 200):
                i = randrange(b)
                n = randrange(b)
                self.jeu[i], self.jeu[n] = self.jeu[n], self.jeu[i]
                a = a + 1
     
        def tirer(self):
            "Tirage de la première carte de la pile"
            t = len(self.jeu)
            if t >0:
                carte = self.jeu[0]
                del(self.jeu[0])
                return carte
     
    class Jeux2(JeuxDeCarte):
        "defintion des deux jeu"
     
        def __init__(self):
            self.jeuA = []
            self.jeuB = []
            JeuxDeCarte.__init__(self)
     
     
        def tirerA(self):
            "Tirage de la première carte de la pile"
            t = len(self.jeuA)
            if t >0:
                carte = self.jeuA[0]
                del(self.jeuA[0])
                return carte
     
        def tirerB(self):
            "Tirage de la première carte de la pile"
            t = len(self.jeuB)
            if t >0:
                carte = self.jeuB[0]
                del(self.jeuB[0])
                return carte
     
        def creer_2jeux(self):
            "creer les deux jeux"
            self.battre()
            for i in range(52):
                if i%2 == 0:
                    self.jeuA.append(self.tirer())
                else:
                    self.jeuB.append(self.tirer())
     
        def match(self):
            "compare les cartes et les remet au gagnant"
            carteA = self.tirerA()
            carteB = self.tirerB()
            gain = []
            gain.append(carteA)
            gain.append(carteB)
     
            print
            carteA.nom_carte(carteA)
            print
            "vs"
            print
            carteB.nom_carte(carteB)
     
            if carteA[0] > self.carteB[0]:
                while i < len(gain):
                    self.jeuA.append(gain[i])
                    i = i + 1
     
                for i in range(len(gain)):
                    del gain[0]
     
                print
                "Vous gagnez!"
     
            elif self.carteB[0] > self.carteA[0]:
                while i < len(gain):
                    self.jeuB.append(gain[i])
                    i = i + 1
     
                for i in range(len(gain)):
                    del gain[0]
     
                print
                "L'ordinateur gagne!"
     
            else:
                print
                "Bataille !"
     
            print
            "Il vous reste %s carte(s)" % (len(self.jeuA))
            print
            "Il reste %s carte(s) a l'ordinateur" % (len(self.jeuB))
     
            def verif(self):
                if len(self.jeuA) == 0 or len(self.jeuB) == 0:
                    return False
     
     
     
    #programme principal
     
    jeux = Jeux2()
    print
    "distribution des cartes..."
    sleep(2)
    jeux.creer_2jeux()
    print
    "les jeux sont creer!"
     
    raw_input('appuyer sur Entree pour tirer une carte')
    a = True
    while a == True:
        jeux.match()
        a = jeux.verif()
        raw_input('appuyer sur Entree pour tirer une carte')
     
    if len(jeux.jeuA) == 0:
        print
        "Vous avez perdu..."
     
    else:
        print
        "Vous avez gagner!!"





    voila, j'espere que vous m'aiderez!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Khaantai Voir le message
    bonjour a tous!

    alors voila, j'ai essayé de programmer un jeu de bataille, pour ca je me suis aidé d'un programme mais il y avait des erreures, j'ai corrigé ce que je pouvais du style syntaxe ou bien des erreurs du style appel d'une fonction avec une liste

    mais la je bloque et j'aurais vraiment besoin d'aide, ce programme doit absolument marcher x)


    [COLOR="#0000CD"]#----------Jeux de cartes: Bataille----------#

    from random import randrange
    from time import sleep

    #defintion des classes

    class JeuxDeCarte(object):
    "Definition d'un jeu de cartes"

    couleur = ("Coeur", "Carreau", "Trefle", "Pique")
    valeur = (2, 3, 4, 5, 6, 7, 8, 9, 10, "Valet", "Dame", "Roi", "As")

    def __init__(self):
    "construction de la liste des 52 cartes"
    self.jeu = []
    for coul in range(4):
    for val in range(13):
    self.jeu.append((val, coul))

    def nom_carte(self, c):
    "renvoi le nom de la carte"
    return "%s de %s" (self.valeur[c[0]], self.couleur[c[1]])

    voila, j'espere que vous m'aiderez!
    Bonjour,

    Vous avez un bouton "#" en haut à droite de votre éditeur de messages de forum pour publier du code, exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #----------Jeux de cartes: Bataille----------#
     
    from random import randrange
    from time import sleep
     
    #defintion des classes
     
    class JeuxDeCarte(object):
        "Definition d'un jeu de cartes"
     
        couleur = ("Coeur", "Carreau", "Trefle", "Pique")
        valeur = (2, 3, 4, 5, 6, 7, 8, 9, 10, "Valet", "Dame", "Roi", "As")
    @+.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    ah oui, merci je l'utiliserais !

    sinon, vous avez une idée pour mon programme?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Khaantai Voir le message
    ah oui, merci je l'utiliserais !

    sinon, vous avez une idée pour mon programme?
    Ennemi du moindre effort ?

    Pas de code publié correctement = pas d'aide publiée correctement.

    Pour vous faire aider, peut-être faudrait-il d'abord commencer par nous aider un minimum en présentant à tout le moins un code exploitable ?

    Si vous me dites : ah oui, merci je l'utiliserais !

    Je vous répondrais : de l'aide ? Ah oui, merci j'y penserais !

  5. #5
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    D'abord quelques remarques.

    Spécifie l'encodage de ton script dans une des deux premières lignes.

    Mettre le texte des print sur la même ligne, sinon ils ne s'affichent pas.

    Les docstrings utilisent trois guillemets et non un seul.

    Il n'y a aucune raison que Jeux2 hérite de JeuxDeCarte, c'est une faute de concept.

    On n'utilise pas del lorsqu'une classe possède une méthode remove() et/ou pop()
    donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            t = len(self.jeu)
            if t >0:
                carte = self.jeu[0]
                del(self.jeu[0])
                return carte
    devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            if self.jeu:
                return self.jeu.pop(0)
    La fonction verif() a une indentation de trop et devient une fonction imbriquée dans la fonction match

    BUG:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            print carteA.nom_carte(carteA)
    ce n'est pas la carte qui a une méthode nom_carte() mais le jeu, il faut écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            print self.nom_carte(carteA)
    BUG 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            return "%s de %s" (self.valeur[c[0]], self.couleur[c[1]])
    il manque le % entre la string et les arguments.

    BUG 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            if carteA[0] > self.carteB[0]:
                ...
            elif self.carteB[0] > self.carteA[0]:
    carteA et carteB sont dans l'espace de nom de cette fonction et non pas attributs de la classe. Retire les trois self de trop.

    BUG 4:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                while i < len(gain):
    le nom i n'existe pas, inutile de corriger, il ne sert à rien, voir la suite.

    D'autres complications inutiles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            if carteA[0] > self.carteB[0]:
                while i < len(gain):
                    self.jeuA.append(gain[i])
                    i = i + 1
     
                for i in range(len(gain)):
                    del gain[0]
     
                print "Vous gagnez!"
    se résume à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            if carteA[0] > carteB[0]:
                self.jeuA.extend(gain)
                print "Vous gagnez!"
    BUG 5:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    a = True
    while a == True:
        jeux.match()
        a = jeux.verif()
        raw_input('appuyer sur Entree pour tirer une carte')
    la méthode verif() retourne soit False soit None, dans les deux cas a != True

    on préférera une construction de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        def verif(self):
            return len(self.jeuA) and len(self.jeuB)
     
    while jeux.verif():
        raw_input('appuyer sur Entree pour tirer une carte')
        jeux.match()

    BUG 6:
    Le pire ! on ne peut jamais gagner !
    Regarde les résultats qui s'affichent, tu comprendras pourquoi.


    En bonus, un créateur-mélangeur-distributeur de jeu de cartes écrit pour je ne sais plus quel fil sur ce forum.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    # -*- coding: utf-8 -*-
    import random
     
    def creation():
        enseignes = ["pique","carreau","trefle","coeur"]
        valeurs = [1,2,3,4,5,6,7,8,9,10,"valet","dame","roi"]
        return [(x,y) for x in valeurs for y in enseignes]
     
    def get_nombre_joueur():
        while 1:
            n = input('Nombre de joueurs: ')
            try:
                return int(n)
            except:
                pass
     
    def get_carte(cartes):
        # Fonction génératrice
        sabot = random.sample(cartes, 52)
        while sabot:
            # tant qu'il reste des cartes dans le sabot
            yield sabot.pop()
     
    n_joueurs = get_nombre_joueur()
    joueurs = [[] for i in range(n_joueurs)]
    # création du générateur de cartes
    gen = get_carte(creation())
     
    # distribution, exemple 8 cartes par joueur
    for i in range(8):
        for j in joueurs:
            try:
                j.append(next(gen))
            except StopIteration:
                # plus de carte
                pass
     
    # contrôle
    for j in joueurs:
        print(j)
     
    # ensuite pour distribuer une nouvelle carte
    try:
        joueur.append(next(gen))
    except StopIteration:
        # plus de carte

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    bonsoir!

    tout d'abord, désolé tarball69 si je vous ai semblé nonchalant, l'idée de modifier mon post ne m'est pas venu a l'esprit, je suis fatigué des examens en ce moment.
    mais croyez bien que si j'y avais pensé je l'aurais fais, ce n'est pas mettre une balise qui m'aurait fait mal.
    dommage que vous l'ayez pris comme ca, votre aide aurait été la bienvenue.


    maintenant, merci beaucoup Vincent! ton aide m'a été précieuse, mais malgré ca j'ai encore quelques soucis :

    mettre mes print sur la même ligne me forme une erreur de syntaxe, je n'arrive pas a la corriger
    pour ce qui est de Jeu 2 et JeuxDeCarte, je ne comprends pas ou est mon erreur.

    quand au fait que l'on ne peut pas gagner , eh bien j'aimerais voir ca lorsque le programme tournera

    voila donc ou j'en suis, ayant corrigé les erreurs comme tu me l'as montré:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    #----------Jeux de cartes: Bataille----------#
    # -*- coding:utf-8 -*-
     
     
    from random import randrange
    from time import sleep
     
    #defintion des classes
     
    class JeuxDeCarte(object):
        "Definition d'un jeu de cartes"
     
        couleur = ("Coeur", "Carreau", "Trefle", "Pique")
        valeur = (2, 3, 4, 5, 6, 7, 8, 9, 10, "Valet", "Dame", "Roi", "As")
     
        def __init__(self):
            "construction de la liste des 52 cartes"
            self.jeu = []
            for coul in range(4):
                for val in range(13):
                    self.jeu.append((val, coul))
     
        def nom_carte(self, c):
            "renvoi le nom de la carte"
            return "%s de %s" % (self.valeur[c[0]], self.couleur[c[1]])
     
        def battre(self):
            "permet de melanger les cartes"
            a = 0
            b = len(self.jeu)
            while a < randrange(100, 200):
                i = randrange(b)
                n = randrange(b)
                self.jeu[i], self.jeu[n] = self.jeu[n], self.jeu[i]
                a = a + 1
     
        def tirer(self):
            "Tirage de la première carte de la pile"
     
            if self.jeu:
                return self.jeu.pop(0)
     
    class Jeux2(JeuxDeCarte):
        "defintion des deux jeux"
     
        def __init__(self):
            self.jeuA = []
            self.jeuB = []
            JeuxDeCarte.__init__(self)
     
     
        def tirerA(self):
            "Tirage de la premiere carte de la pile"
            t = len(self.jeuA)
            if t >0:
                carte = self.jeuA[0]
                del(self.jeuA[0])
                return carte
     
        def tirerB(self):
            "Tirage de la premiere carte de la pile"
            t = len(self.jeuB)
            if t >0:
                carte = self.jeuB[0]
                del(self.jeuB[0])
                return carte
     
        def creer_2jeux(self):
            "creer les deux jeux"
            self.battre()
            for i in range(52):
                if i%2 == 0:
                    self.jeuA.append(self.tirer())
                else:
                    self.jeuB.append(self.tirer())
     
        def match(self):
            "compare les cartes et les remet au gagnant"
            carteA = self.tirerA()
            carteB = self.tirerB()
            gain = []
            gain.append(carteA)
            gain.append(carteB)
     
     
     
        print self.nom_carte(carteA)
        print "vs"
        print self.nom_carte(carteB)
     
     
     
     
            if carteA[0] > carteB[0]:
                self.jeuA.extend(gain)
                print "Vous gagnez!"
     
     
            elif carteB[0] > carteA[0]:
                while i < len(gain):
                    self.jeuB.append(gain[i])
                    i = i + 1
     
                for i in range(len(gain)):
                    del gain[0]
     
                print "L'ordinateur gagne!"
     
            else:
                print "Bataille !"
     
            print "Il vous reste %s carte(s)" % (len(self.jeuA))
            print "Il reste %s carte(s) a l'ordinateur" % (len(self.jeuB))
     
            def verif(self):
                if len(self.jeuA) == 0 or len(self.jeuB) == 0:
                    return False
     
     
     
    #programme principal
     
    jeux = Jeux2()
    print "distribution des cartes..."
    sleep(2)
    jeux.creer_2jeux()
    print "les jeux sont creer!"
     
        def verif(self):
            return len(self.jeuA) and len(self.jeuB)
     
    while jeux.verif():
        raw_input('appuyer sur Entree pour tirer une carte')
        jeux.match()
     
    if len(jeux.jeuA) == 0:
        print
        "Vous avez perdu..."
     
    else:
        print
        "Vous avez gagné!!"
    merci encore de ton aide! en attente de ta réponse (si possible avant lundi, désolé si je te demande trop... je m'y prends trop tard, j'ai surestimé mes capacités )

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Sans doute parce que tu utilises Python 3, auquel cas print est une fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print "mon texte"    # Python 2
    print("mon texte")   # Python 3


    Edit: Je réalise après coup que tu utilises raw_input() donc tu es sur Python 2 finalement.
    Alors, copie colle ici le traceback de l'erreur.

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Message File Name Line Position
    Syntax Error
    invalid syntax F:\ISN\Portable Python 3.2.1.1\App\vrai programme.py 87 14

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Bon, ben tu es quand même sous Python 3, alors fais comme je dis dans mon post précédent pour les print et remplace raw_input par input.

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    bonjour!

    j'ai modifié tous mes print , maintenant j'ai un souci au niveau de "verif"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #programme principal
     
    jeux = Jeux2()
    print ("distribution des cartes...")
    sleep(2)
    jeux.creer_2jeux()
    print ("les jeux sont creer!")
     
    def verif(self):
            return len(self.jeuA) and len(self.jeuB)
     
    while jeux.verif():
        input("appuyer sur Entree pour tirer une carte")
        jeux.match()



    Traceback:

    Message File Name Line Position
    Traceback
    <module> F:\ISN\Portable Python 3.2.1.1\App\vrai programme.py 132
    AttributeError: 'Jeux2' object has no attribute 'verif'




    EDIT:

    j'avais oublié de mettre mes "Tab" correctement , c'est modifié ca y est.
    mais par contre... il me demande de d' "appuyer sur entrée pour piocher une carte" a l'infini , je pense que c'est pour ca que tu dis qu'on ne peut pas gagner?


    RE-EDIT

    ma boucle while n’était pas au bon endroit, maintenant, un autre problème:
    au début, le programme fonctionne bien, et puis au bout de une entrée, voici ce qui arrive:

    Message File Name Line Position
    Traceback
    <module> F:\ISN\Portable Python 3.2.1.1\App\vrai programme.py 43
    Jeux2 F:\ISN\Portable Python 3.2.1.1\App\vrai programme.py 134
    match F:\ISN\Portable Python 3.2.1.1\App\vrai programme.py 100
    UnboundLocalError: local variable 'i' referenced before assignment


    tu m'avais déjà parlé de i, comme quoi il n'existait pas, alors comment incrémenter les points de l'ordi et du joueur si ce n'est par une autre variable?
    de plus, j'ai remarqué que lorsque c'est moi qui gagne, il n'y a pas de soucis , mais si c'est l'ordi qui gagne, l’erreur apparaît.

    PS: désolé de tout ces edits

  11. #11
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    C'est ce code là qui n'est pas bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
            elif carteB[0] > carteA[0]:
                while i < len(gain):        # i est inconnu ici !
                    self.jeuB.append(gain[i])
                    i = i + 1
     
                for i in range(len(gain)):
                    del gain[0]
     
                print "L'ordinateur gagne!"
    Regarde dans mes exemples précédents comment j'ai simplifié cette partie (avec extend()).


    Si on ne peut pas gagner, c'est semble-t-il un problème de mélange de cartes, le joueur et l'ordi gagnent chacun à tour de rôle, sans fin.

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    ah, moi ce probleme n'apparait pas, tu vois j'ai changé par ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            elif carteB[0] > carteA[0]:
               self.jeuB.extend(gain)
               print ("L'ordinateur gagne!")
    et l'erreur apparait:

    Message File Name Line Position
    Traceback
    <module> F:\ISN\Portable Python 3.2.1.1\App\vrai programme.py 43
    Jeux2 F:\ISN\Portable Python 3.2.1.1\App\vrai programme.py 128
    match F:\ISN\Portable Python 3.2.1.1\App\vrai programme.py 100
    UnboundLocalError: local variable 'i' referenced before assignment


    pourquoi i réapparaît ici?

  13. #13
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Dans la dernière version corrigée que tu montres les lignes litigieuses apparaissent toujours.

    Remet ton nouveau code au complet, les numéros de lignes du message d'erreur ne correspondent plus à l'ancienne version.

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    #----------Jeux de cartes: Bataille----------#
    # -*- coding:utf-8 -*-
     
     
    from random import randrange
    from time import sleep
     
    #defintion des classes
     
    class JeuxDeCarte(object):
        "Definition d'un jeu de cartes"
     
        couleur = ("Coeur", "Carreau", "Trefle", "Pique")
        valeur = (2, 3, 4, 5, 6, 7, 8, 9, 10, "Valet", "Dame", "Roi", "As")
     
        def __init__(self):
            "construction de la liste des 52 cartes"
            self.jeu = []
            for coul in range(4):
                for val in range(13):
                    self.jeu.append((val, coul))
     
        def nom_carte(self, c):
            "renvoi le nom de la carte"
            return "%s de %s" % (self.valeur[c[0]], self.couleur[c[1]])
     
        def battre(self):
            "permet de melanger les cartes"
            a = 0
            b = len(self.jeu)
            while a < randrange(100, 200):
                i = randrange(b)
                n = randrange(b)
                self.jeu[i], self.jeu[n] = self.jeu[n], self.jeu[i]
                a = a + 1
     
        def tirer(self):
            "Tirage de la premiere carte de la pile"
     
            if self.jeu:
                return self.jeu.pop(0)
     
    class Jeux2(JeuxDeCarte):
        "defintion des deux jeux"
     
        def __init__(self):
            self.jeuA = []
            self.jeuB = []
            JeuxDeCarte.__init__(self)
     
     
        def tirerA(self):
            "Tirage de la premiere carte de la pile A"
            t = len(self.jeuA)
            if t >0:
                carte = self.jeuA[0]
                del(self.jeuA[0])
                return carte
     
        def tirerB(self):
            "Tirage de la premiere carte de la pile B"
            t = len(self.jeuB)
            if t >0:
                carte = self.jeuB[0]
                del(self.jeuB[0])
                return carte
     
        def creer_2jeux(self):
            "crée les deux jeux"
            self.battre()
            for i in range(52):
                if i%2 == 0:
                    self.jeuA.append(self.tirer())
                else:
                    self.jeuB.append(self.tirer())
     
        def match(self):
            "compare les cartes et les remet au gagnant"
            carteA = self.tirerA()
            carteB = self.tirerB()
            gain = []
            gain.append(carteA)
            gain.append(carteB)
     
     
     
            print (self.nom_carte(carteA))
            print ("vs")
            print (self.nom_carte(carteB))
     
     
     
     
            if carteA[0] > carteB[0]:
                self.jeuA.extend(gain)
                print   ("Vous gagnez!")
     
     
            elif carteB[0] > carteA[0]:
               self.jeuB.extend(gain)
               print ("L'ordinateur gagne!")
     
            else:
                print ("Bataille !")
     
            print ("Il vous reste %s carte(s)" % (len(self.jeuA)))
            print ("Il reste %s carte(s) a l'ordinateur" % (len(self.jeuB)))
     
        def verif(self):
                if len(self.jeuA) == 0 or len(self.jeuB) == 0:
                    return False
     
     
     
    #programme principal
     
        jeux = Jeux2()
        print ("distribution des cartes...")
        sleep(2)
        jeux.creer_2jeux()
        print ("les jeux sont creer!")
     
        def verif(self):
            return len(self.jeuA) and len(self.jeuB)
     
        while jeux.verif():
            input('appuyer sur Entree pour tirer une carte')
            jeux.match()
     
    if len(jeux.jeuA) == 0:
        print ("Vous avez perdu...")
     
    else:
        print ("Vous avez gagné!!")

  15. #15
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    C'est bien ce que je pensais, l'erreur concerne la première version du code.

    Mais ce n'est toujours pas bon, tu n'as pas modifié la foncion verif() dans la classe Jeu2 mais tu as placé la nouvelle version là où elle n'a rien à faire.

    Il manque une ligne au démarrage du code et les quatre dernières lignes sont mal indentées.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    #programme principal
    if __name__ == '__main__':      # Rajoute ceci
        jeux = Jeux2()
        print ("distribution des cartes...")
        sleep(2)
        jeux.creer_2jeux()
        print ("les jeux sont creer!")
     
        # Supprime les deux lignes suivantes
        #def verif(self):
            #return len(self.jeuA) and len(self.jeuB)
     
        while jeux.verif():
            input('appuyer sur Entree pour tirer une carte')
            jeux.match()
     
        # Indentation !
        if len(jeux.jeuA) == 0:
            print ("Vous avez perdu...")
     
        else:
            print ("Vous avez gagné!!")
    Je ne l'avais pas indiqué correctement, mais la fonction verif() peut se simplifier comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        def verif(self):
            return self.jeuA and self.jeuB

  16. #16
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2014
    Messages : 8
    Points : 4
    Points
    4
    Par défaut MERCI!!
    MERCI BEAUCOUP!

    merci pour tout ce temps que tu as consacré pour moi, ca y est le programme marche!

    bon, il tourne a l'infini, mais ca c'est pas un souci puisqu'il tourne!

    merci Vincent!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] aide dechiffrage d'un programme projet ISN
    Par bedou47 dans le forum Général Python
    Réponses: 3
    Dernier message: 25/05/2015, 15h08
  2. Programmation bataille navale
    Par zo-68 dans le forum Programmation multimédia/Jeux
    Réponses: 8
    Dernier message: 19/01/2015, 09h49
  3. Projet ISN Python programme Piano Tkinter
    Par Biloute42 dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 07/05/2014, 18h11
  4. programmation bataille navale
    Par adamorane dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 14/12/2013, 13h09
  5. [LG]Programme Bataille Navale en Pascal
    Par RaFaL dans le forum Langage
    Réponses: 21
    Dernier message: 10/06/2003, 21h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo