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

Python Discussion :

jeu de dé et de pion


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut jeu de dé et de pion
    Bonjour,

    je ne comprends pas pourquoi mon petit programme ne fonctionne pas.
    Je dois faire une petit jeu de plateau style jeu de loi.

    Donc je définie ma fonction pour le tirage de dé

    Ensuite démarre avec la case 1 et je vais jusqu'à la 34

    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
     
    def jeu ():
     
        from random import randrange
     
     
        def jetde(val):                 # Définition fonction avec paramètre
     
            d = randrange (6) + 1       # Tirage aléatoire 1d6
     
            val += d                    # Ajout du tirage avec la valeur actuelle
     
            print ("val = ", val)       # Affichage de val pour information
     
            return (val)
     
     
        case = 1                        # Case de départ
     
        while case <= 34 :              # Case d'arrivée
     
            case = jetde (case)         # case après jet du dé
     
            print ("case = ", case)     # Affichage de la case actuelle

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 046
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 046
    Points : 1 376
    Points
    1 376
    Par défaut
    ça fonctionne chez moi ...

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par josmiley Voir le message
    ça fonctionne chez moi ...
    Quand j'utilise la console ligne de commande ça fonctionne, par contre quand je crée un fichier avec Notepad++ et que je l'édite avec IDLE pour l'exécuter rien ne s'affiche...

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 812
    Points : 7 097
    Points
    7 097
    Par défaut
    donc ce n'est pas un problème de code
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    donc ce n'est pas un problème de code
    Et les waters mon cher Manson

    J'ai changé l'encodage...

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Est ce qu'il y aurait une façon plus condensé et plus propre de faire la même chose?
    En plus je voudrait faire une étape entre le passage de la case 18 à la 25 et 25 à la 6.

    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
    def obstacle (case):
     
        if case == 2 :
     
            case += 29
     
        if case == 9 or case == 13 or case == 15 :
     
            case += 14
     
        if case == 4 :
     
            case += 8
     
        if case == 18 :
     
            case += 7
     
        if case == 8 or case == 10 :
     
            case -= 6
     
        if case == 25 :
     
            case -= 19
     
        if case == 28 :
     
            case -= 12
     
        if case == 30 :
     
            case -= 24
     
        if case == 32 :
     
            case -= 13
     
        return (case)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 25
    Points : 34
    Points
    34
    Par défaut
    bonjour,
    une proposition pour faire un peut plus condensé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def obstacle(case):
        avance = {2:29, 9:14, 13:14, 15:14, 4:8, 18:7}
        recule = {8:6, 10:6, 25:19, 28:12, 30:24, 32:13}
     
        if case in avance:
            return case + avance[case]
        elif case in recule:
            return case - recule[case]
        else:
            return case
    je ne comprend pas votre histoire de passage.

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par denis2 Voir le message
    bonjour,
    une proposition pour faire un peut plus condensé.

    je ne comprend pas votre histoire de passage.
    Pour commencer, merci beaucoup. Ça m'aide beaucoup et ça m'apprend.

    Pour ce qui est du passage, il y a un "obstacle qui fait avancer de la case 18 à la 25 et un autre qui fait reculer de la case 25 à la case 6.

    Donc au moment ou l'on tombe sur la case 18 je ne veux pas avoir en retour directement la case 6, j'aimerai avoir la case 25 puis la case 6.

    La même chose si tu tombes sur la case 10 tu reviens en case 4 puis tu vas en case 12.

  9. #9
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    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
    from random import randrange
     
     
    case = 1
     
     
     
    def jetde(val):                                 # Dénition fonction avec paramètre
     
            d = randrange (6) + 1                   # Tirage al?oire 1d6
     
            val += d                                # Ajout du tirage avec la valeur actuelle
     
            if val > 34:
     
                val = 34
     
            return (val)
     
     
     
    def obstacle (case):                                        # Définition fonction avec paramètre
     
        avance = { 2:29, 4:8, 9:14, 13:14, 15:14, 18:7 }        # n° case et valeur pour avancer
     
        recule = { 8:6, 10:6, 25:19, 28:12, 30:24, 32:13 }      # n° de case et valeur de recul
     
     
        if case in avance :                                     # Si la case est dans la liste
                                                                # On ajoute le n° de la case avec 
            return case + avance [case]                         # la valeur pour avancer
     
        if case in recule :
     
            return case - recule [case]
     
        else :
     
            return case
     
     
     
    while case < 34:
     
        case = jetde (case)                         # case après jet du dé
     
        case = obstacle (case)                     # case après passage obstacle
     
        print ("case = ", case)                     # Affichage de la case actuelle
    j'ai fais un test et voilà un exemple:

    case = 7
    case = 4
    case = 7
    case = 4
    case = 7
    case = 12
    case = 17
    case = 23
    case = 6
    case = 7
    case = 27
    case = 6
    case = 12
    case = 27
    case = 29
    case = 34

    On part de la case 1. Premier tirage = 6, on va à la case 7. Second tirage 3, on va à la case 10, qui nous ramène à la case 3.

    Par contre le passage à la case 10 n'apparait pas. Ensuite de la case 4 il devrait aller en 12 alors qu'il y a un nouveau tirage = 3, on va à la case 7

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 25
    Points : 34
    Points
    34
    Par défaut
    voila ce que je croit avoir compris.
    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
     
    case = 18
     
    def obstacle(case):
        avance = {2:29, 9:14, 13:14, 15:14, 4:8, 18:7}
        recule = {8:6, 10:6, 25:19, 28:12, 30:24, 32:13}
     
        if case in avance:
            return case + avance[case]
        elif case in recule:
            return case - recule[case]
        else:
            return case
     
    if case in [18,10]:
        for i in range(2):
            case = obstacle(case)
            print case
    else:
        print obstacle(case)

  11. #11
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    En fait, il suffit qu’obstacle() renvoie une liste de cases qui matérialise celles parcourues suite à un lancer de dé. La plupart du temps, la liste contient un seul élément, mais dans les cas comme 18→25→6, elle en contiendra trois… Donc, suffit de boucler sur cette liste pour toutes les afficher, puis de récupérer la valeur de la dernière case atteinte.

    Au passage, pas besoin de deux dicos, suffit d’assigner des valeurs négatives quand on recule –*ou encore plus simple, directement la valeur de la nouvelle case*!

    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
    from random import randrange
     
     
    case = 1
     
     
    def jetde(val):                             # Dénition fonction avec paramètre
        val += randrange(1,7)                  # Ajout tirage aléatoire 1d6
        if val > 34:
            val = 34
        return val
     
     
    def obstacle(case):                                        # Définition fonction avec paramètre
        change = {2:31, 4:12, 9:23, 13:27, 15:29, 18:25,        # n° case -> nouvelle case
                  8:2, 10:4, 25:6, 28:16, 30:6, 32:19}
     
        ret = [case]
        while case in change:                                   # Tant que la case est spéciale
            case = change[case]                                 # On va à la nouvelle case
            ret.append(case)                                    # On ajoute la nouvelle case
        return ret                                              # On retourne toutes les cases parcourues
     
     
    while case < 34:
        case = jetde(case)                          # case après jet du dé
        for c in obstacle(case):                    # case(s) après passage obstacle
            print("case = ", c)                     # Affichage de la case actuelle
        case = c                                    # Dernière case atteinte

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 25
    Points : 34
    Points
    34
    Par défaut
    personnellement j'aprécis votre enseignement mont29,
    merci, trés bien votre code.

  13. #13
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par mont29 Voir le message
    En fait, il suffit qu’obstacle() renvoie une liste de cases qui matérialise celles parcourues suite à un lancer de dé. La plupart du temps, la liste contient un seul élément, mais dans les cas comme 18→25→6, elle en contiendra trois… Donc, suffit de boucler sur cette liste pour toutes les afficher, puis de récupérer la valeur de la dernière case atteinte.

    Au passage, pas besoin de deux dicos, suffit d’assigner des valeurs négatives quand on recule –*ou encore plus simple, directement la valeur de la nouvelle case*!
    Merci beaucoup Maître jedi

    Quand je serais grand je veux faire comme vous

  14. #14
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Citation Envoyé par denis2 Voir le message
    personnellement j'aprécis votre enseignement mont29,
    merci, trés bien votre code.
    Citation Envoyé par melwin Voir le message
    Merci beaucoup Maître jedi

    Quand je serais grand je veux faire comme vous
    De rien…

  15. #15
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par melwin Voir le message
    Je dois faire une petit jeu de plateau style jeu de loi.
    Jeu de l'oie !!!
    Citation Envoyé par melwin Voir le message
    Pour ce qui est du passage, il y a un "obstacle qui fait avancer de la case 18 à la 25 et un autre qui fait reculer de la case 25 à la case 6.

    Donc au moment ou l'on tombe sur la case 18 je ne veux pas avoir en retour directement la case 6, j'aimerai avoir la case 25 puis la case 6.
    Ca sert à quoi de montrer qu'on passe à la 25 puisqu'en final on arrive sur la 6 ?
    D'ailleurs ça sert à quoi de faire passer de la 18 à la 25 en fait ??

    Dans le vrai jeu de l'oie, si on tombe du premier coup sur une case spéciale, pour éviter que ça ne nous propulse jusqu'à la case spéciale suivante et ainsi de suite jusqu'à l'arrivée ; ça nous bascule sur des cases normales. Je trouve étonnant qu'ici une case spéciale renvoie sur une autre case spéciale...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  16. #16
    Membre habitué
    Homme Profil pro
    Ingénieur / Enseignant
    Inscrit en
    Février 2012
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur / Enseignant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 115
    Points : 139
    Points
    139
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Jeu de l'oie !!!

    Ca sert à quoi de montrer qu'on passe à la 25 puisqu'en final on arrive sur la 6 ?
    D'ailleurs ça sert à quoi de faire passer de la 18 à la 25 en fait ??

    Dans le vrai jeu de l'oie, si on tombe du premier coup sur une case spéciale, pour éviter que ça ne nous propulse jusqu'à la case spéciale suivante et ainsi de suite jusqu'à l'arrivée ; ça nous bascule sur des cases normales. Je trouve étonnant qu'ici une case spéciale renvoie sur une autre case spéciale...
    Oui effectivement jeu de l'oie. C'est parce que je suis en même temps des cours de droit et je sortais d'un lourd travail sur "les risques du contrat de maintenance informatique"

    Pour ce qui est des cases spéciales et l'enchaînement sur une autre case, le jeu est comme ça. Pièges pour les enfants? Piège pour ceux qui doivent modéliser le jeu en chaîne de Markov ?

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/12/2010, 16h50
  2. Jeu d'échec mouvement d'un pion
    Par persiano dans le forum VB.NET
    Réponses: 14
    Dernier message: 13/11/2010, 14h04
  3. Jeu - Déplacement d'un pion
    Par Nowwis dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/01/2010, 13h34
  4. Jeu de pion en java
    Par Syklops dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 17/06/2008, 12h27

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