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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    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
    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
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    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
    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 confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 309
    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
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    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
    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 )

+ 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, 16h08
  2. Programmation bataille navale
    Par zo-68 dans le forum Programmation multimédia/Jeux
    Réponses: 8
    Dernier message: 19/01/2015, 10h49
  3. Projet ISN Python programme Piano Tkinter
    Par Biloute42 dans le forum Programmation multimédia/Jeux
    Réponses: 4
    Dernier message: 07/05/2014, 19h11
  4. programmation bataille navale
    Par adamorane dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 14/12/2013, 14h09
  5. [LG]Programme Bataille Navale en Pascal
    Par RaFaL dans le forum Langage
    Réponses: 21
    Dernier message: 10/06/2003, 22h22

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