Partage
  • Partager sur Facebook
  • Partager sur Twitter

Puissance 4 python [ISN]

    27 janvier 2015 à 11:51:20

    Bonjour a tous je suis élève de Terminale S spécialité ISN et j'ai besoin de votre précieuse aide.

    Notre prof nous a donné un puissance 4 à programmer à partir du code d'un morpion mais nous n'avons aucune compétence pour réaliser cette tâche.

    Nous travaillons sur Spyder3 sous Linux.

    Merci d'avance :)

    Voila où nous en sommes:

    #!/usr/bin/env python

    # -*- coding: utf-8 -*-

    from tkinter import Label, Frame, RAISED, SUNKEN, Tk, W

    from tkinter import messagebox

    class Cellule(Label):

    '''Création d'une classe cellule comme héritière de la classe Label'''

    def __init__(self, parent, couple):

    '''Initialisation de la cellule avec conservation de la référence au parent qui est la

    grille dans laquelle s'insère la cellule'''

    self.parent = parent

    self.couple = couple

    self.joueur = None

    ## Création du label à proprement parler. C'est un élément de tkinter qui représente un

    ## texte avec des attributs.

    Label.__init__(self, parent, height=1, width=3, text='', fg='white', bg='white',

    font=('Courier', 18), relief=RAISED)

    ## Association entre l'événement clic-gauche de la souris et une méthode propre à cette cellule

    self.bind('<Button-1>', self.reveler_contenu)

    def reveler_contenu(self, event):

    if self.joueur == None:

    self.joueur = self.parent.joueur

    self['relief'] = SUNKEN

    self['fg'] = 'darkgreen'

    self['bg'] = 'gray65'

    if self.joueur == "joueur 1":

    self['text'] = "x"

    else:

    self['text'] = "o"

    ## On retire au sein la référence de la cellule courante, de la liste des cellules encore libres

    self.parent.cellules_libres.remove(self.couple)

    ## On cherche si la fin de partie est réalisée

    self.parent.fin_de_partie()

    class ApplicationPrincipale(Frame):

    '''Création de la fenêtre principale comme héritière de la classe Frame'''

    def __init__(self, master):

    Frame.__init__(self, master, bg='gray65')

    ## Mise en place de la grille

    self.grid()

    self.matrice = []

    self.cellules_libres = []

    for rangee in range(3):

    ligne = []

    for colonne in range(3):

    nouvelle_cellule = Cellule(self, (rangee, colonne))

    nouvelle_cellule.grid(row=rangee, column=colonne)

    ligne.append(nouvelle_cellule)

    self.cellules_libres.append((rangee, colonne))

    self.matrice.append(ligne)

    self.joueur = "joueur 1"

    self.suivi = Label(self, text=self.joueur, height=1, font = ("Arial", 18))

    self.suivi.grid(row=3, columnspan=3)

    def sont_egaux(self, elt_0, elt_1, elt_2):

    if elt_0.joueur and (elt_0.joueur == elt_1.joueur) and (elt_0.joueur == elt_2.joueur):

    return elt_0.joueur

    def fin_de_partie(self):

    vainqueur = None

    ## L'une des trois rangées est remplie avec la même marque

    if self.sont_egaux(self.matrice[0][0], self.matrice[0][1], self.matrice[0][2]):

    vainqueur = self.matrice[0][0].joueur

    elif self.sont_egaux(self.matrice[1][0], self.matrice[1][1], self.matrice[1][2]):

    vainqueur = self.matrice[1][0].joueur

    elif self.sont_egaux(self.matrice[2][0], self.matrice[2][1], self.matrice[2][2]):

    vainqueur = self.matrice[2][0].joueur

    ## L'une des trois colonnes est remplie avec la même marque

    elif self.sont_egaux(self.matrice[0][0], self.matrice[1][0], self.matrice[2][0]):

    vainqueur = self.matrice[0][0].joueur

    elif self.sont_egaux(self.matrice[0][1], self.matrice[1][1], self.matrice[2][1]):

    vainqueur = self.matrice[0][1].joueur

    elif self.sont_egaux(self.matrice[0][2], self.matrice[1][2], self.matrice[2][2]):

    vainqueur = self.matrice[0][2].joueur

    ## L'une des deux diagonales est remplie avec la même marque

    elif self.sont_egaux(self.matrice[0][0], self.matrice[1][1], self.matrice[2][2]):

    vainqueur = self.matrice[0][0].joueur

    elif self.sont_egaux(self.matrice[0][2], self.matrice[1][1], self.matrice[2][0]):

    vainqueur = self.matrice[0][2].joueur

    if vainqueur is not None:

    messagebox.showinfo('Fin de partie', 'Le vainqueur est le ' + vainqueur, parent=self)

    self.quit()

    elif self.cellules_libres == []:

    messagebox.showinfo('Fin de partie', 'Match nul', parent=self)

    self.quit()

    else:

    self.changer_de_joueur()

    def changer_de_joueur(self):

    if self.joueur == "joueur 1":

    self.joueur = "joueur 2"

    else:

    self.joueur = "joueur 1"

    self.suivi['text'] = self.joueur

    fenetre_principale = Tk()

    fenetre_principale.title("Morpion")

    application = ApplicationPrincipale(fenetre_principale)

    application.mainloop()

    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      27 janvier 2015 à 14:25:10

      Mis à part la forme présentée par le code, il serait plus clair d'exprimer ton problème sous forme d'un code simple... C'est par là que commence l'apprentissage, c'est bien l'objectif, non?

      • Partager sur Facebook
      • Partager sur Twitter

      Puissance 4 python [ISN]

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown