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 :

Programme Puissance 4


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2024
    Messages : 3
    Par défaut Programme Puissance 4
    Bonjour, je dois réaliser un programme python avec Turtle du jeu Puissance 4. je n'arrive pas afficher les pions dans la grille Turtle, le jeu fonctionne, il se termine quand 4 pions sont alignés mais je ne trouve pas de fonction/code qui affiche les pions. Voici mon programme :
    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
    from turtle import*
    # La fonction dessiner_grille() dessine une grille vide dans la fenêtre de la tortue
    def quadrillage():
        up()
        goto(x_base,y_base)
        down()
        # traits horizontaux :
        for i in range(8):
            forward(7*largeur)
            up()
            goto(x_base,y_base+i*largeur)
            down()
        # traits verticaux :
        up()
        goto(x_base,y_base)
        setheading(90)
        down()
        for i in range(9):
            forward(6*largeur)
            up()
            goto(x_base+i*largeur,y_base)
            down()
        # affiche le numéro des colonnes sous la grille :
        for i in range(7):
            up()
            goto(x_base+i*largeur+largeur//2,y_base-largeur//2)
            down()
            write(str(i))
     
    x_base = -170
    y_base = -150
    largeur = 50
     
    # Affiche la grille sur l'interface turtle
    quadrillage()
     
    def quadrillage_vide():
        g = [[0 for i in range(7)] for i in range(6)]
        return g
     
    # La fonction dessiner_pion(x,y,couleur) ajoute un pion dans la case (a,b ; allant de respectivement de 0 à 6 et 0 à 5
     
     
    def coup_possible(g,c):
        return g[5][c]==0
     
    def jouer(g,j,c):
        l=5
        while l>0 and g[l-1][c]==0:
            l=l-1
        g[l][c]=j
     
    def vert(g,j,l,c):
        for i in range(4):
            if g[l+i][c] != j:
                return False
        return True
     
    def horiz(g,j,l,c):
        for i in range(4):
            if g[l][c+i] != j:
                return False
     
        return True
     
    def diag1(g,j,l,c):
        for i in range(4):
            if g[l + i][c - i] != j:
                return False
     
        return True
     
    def diag2(g,j,l,c):
        for i in range(4):
            if g[l + i][c - i] != j:
                return False
        return True
     
     
    def victoire(g,j):
        for l in range(6):
            for c in range(7):
                if (c<4 and horiz(g,j,l,c)) or (l<3 and vert(g,j,l,c)) or (c<4 and l<3 and diag1(g,j,l,c)) or (c<2 and l<3 and diag2(g,j,l,c)):
                    return True
        return False
     
     
    def quadrillage_plein(g):
        for c in range(7):
            if g[5][c]==0:
                return False
     
        return True
     
    quadrillage = quadrillage_vide()
    (quadrillage)
     
    joueur_actuel = 1
     
    while not (victoire(quadrillage, 1) or victoire(quadrillage, 2) or quadrillage_plein(quadrillage)):
        (quadrillage)
     
        colonne = int(input("choisissez une colonne ")) -1
     
        if 0 <= colonne < 7 and coup_possible(quadrillage, colonne):
            jouer(quadrillage, joueur_actuel, colonne)
     
            if victoire(quadrillage, joueur_actuel):
                (quadrillage)
                print("Le joueur", {joueur_actuel},"4 a gagné !")
            elif quadrillage_plein(quadrillage):
                (quadrillage)
                print("La partie est nulle.")
            else:
                if joueur_actuel == 1:
                    joueur_actuel = 2
                else:
                    joueur_actuel = 1
        else:
            print("Coup invalide. Choisissez une colonne valide.")
     
    print("Fin de la partie.")

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Fismat Voir le message
    Voici mon programme
    Et tu le trouves lisible ??? Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # affiche le numéro des colonnes sous la grille :
    for i in range(7):
    up()
    goto(x_base+i*largeur+largeur//2,y_base-largeur//2)
    down()
    write(str(i))
     
    x_base = -170
    y_base = -150
    largeur = 50
    comment distinguer ce qui est dans la boucle de ce qui n'y est pas ???

    Citation Envoyé par Fismat Voir le message
    mais je ne trouve pas de fonction/code qui affiche les pions
    Ben non, ça n'existe pas. C'est à toi de la créer.
    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]

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2024
    Messages : 3
    Par défaut
    Excuse moi je n'avais pas fait gaffe que tout étais mal écrit, je vous envoie des photos du programme. Concernant le fait de créer la fonction, justement je me suis mal exprimé et je n'arrive pas à la créer? j'aurais besoin d'aide. Nom : Capture d’écran (2).png
Affichages : 171
Taille : 238,8 KoNom : Capture d’écran (3).png
Affichages : 156
Taille : 244,8 KoNom : Capture d’écran (4).png
Affichages : 157
Taille : 233,5 KoNom : Capture d’écran (5).png
Affichages : 158
Taille : 231,8 KoNom : Capture d’écran (6).png
Affichages : 154
Taille : 234,9 KoNom : Capture d’écran (7).png
Affichages : 153
Taille : 242,4 KoNom : Capture d’écran (8).png
Affichages : 154
Taille : 240,3 Ko
    Images attachées Images attachées  

  4. #4
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Janvier 2024
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Janvier 2024
    Messages : 3
    Par défaut
    Elle ne se sont pas envoyé dans l'ordre... je vous envoie le programme directement sur python.
    module1.py

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Fismat Voir le message
    Excuse moi je n'avais pas fait gaffe que tout étais mal écrit, je vous envoie des photos du programme.
    Les photos on ne peut pas copier/coller le code. Ou alors tu t'imagines qu'on va le recopier à la main...
    Les règles indiquent comment poster un code. C'est aussi écrit dans ma signature. Mais bon, tu as fait l'effort de nous filer le programme (même si demander de télécharger un truc inconnu est peu judicieux) donc on passera pour une fois.

    Alors tout d'abord je trouve le truc assez important. Je ne sais pas qui est ton prof mais il met la barre très très haut. C'est limite un petit projet. Mais déjà j'aime bien ce que tu as écrit, il ne te manque que l'expérience.
    Et justement moi avec mon expérience, voici comment j'aurais procédé
    1. coder le jeu en mémoire (donner des numéros de case, de pions etc). Par exemple au travers d'une liste...
      Code python : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      jeu=[
      		[0, 0, 0, 0, 0, 0],
      		[0, 0, 0, 0, 0, 0],
      		[0, 0, 0, 0, 0, 0],
      		[0, 0, 0, 0, 0, 0],
      		[0, 0, 0, 0, 0, 0],
      		[0, 0, 0, 0, 0, 0],
      ]
      ...et tous les calculs se font dans cette liste. C'est par exemple facile de placer un pion dans une colonne (on prend la colonne et on cherche la dernière position de libre). A la limite on peut même travailler en rotation (exemple ce jeu doit se voir comme allant de la gauche vers la droite et la ligne en rouge représente en réalité une colonne, ce qui permet d'accélérer le codage de la descente d'un pion)
    2. écrire une fonction qui permet de tracer un rond soit rouge soit bleu à telle position dans l'écran
    3. associer une position du jeu (exemple jeu[2][3]) à sa position dans l'écran
    4. tracer le rond

    C'est une technique dans laquelle on sépare "travail" et "affichage" et qui se nomme "MVC". Et plus on crée des fonctions minimalistes (fonctions qui ne font qu'une chose mais qui la font bien) mieux on peut les réutiliser dans différents contextes (exemple les légos qui ne sont que des briques et carrés mais qui permettent de créer des voitures).
    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]

Discussions similaires

  1. Programme Puissance 4
    Par Bilen dans le forum Débuter
    Réponses: 14
    Dernier message: 27/07/2018, 09h25
  2. Réponses: 1
    Dernier message: 20/08/2014, 22h36
  3. programme pour calculer les puissances
    Par zakariaforever dans le forum C#
    Réponses: 2
    Dernier message: 07/03/2010, 19h13
  4. Aide sur le programme Puissance 4
    Par A0080 dans le forum Langage
    Réponses: 13
    Dernier message: 01/06/2009, 20h12
  5. Réponses: 1
    Dernier message: 13/05/2007, 13h54

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