begin process at 2010 07 29 15:49:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > CLASSE GÉNÉRIQUE - PLATEAU

CLASSE GÉNÉRIQUE - PLATEAU


 Information sur la source



 Description

J'ai chercher il y a pendant quelque temps un code python pour faire des classes génériques (http://fr.wikipedia.org/wiki/G%C3%A9n%C3%A9ricit% C3%A9).

Dans cette source on va faire une classe générique (Plateau2D) qui va prendre en paramètre une classe de type "Case". Il aura dans le code un contrôle de type pour vérifié que la classe passé en paramètre pour "Plateau2D" dérive bien de Case.

L'utilisation de classe générique permet la réutilisation du code au maximum.

J'utilise : Python 2.5

Source

  • #! /usr/bin/python
  • # Illustation classe génériques
  • # Ecrit par : Beltegeuse
  • # Licence : LGPL
  • # Date : 31/01/09
  • #
  • class ErrorType(Exception): pass
  • class Case:
  • def __init__(self, x, y, plateau):
  • self.x = x
  • self.y = y
  • self.plateau = plateau
  • def __str__(self):
  • return "x : " + str(self.x) + " y : " + str(self.y) + " plateau : " + str(self.plateau)
  • def colonneParent(self):
  • return self.plateau.colonne(self.x)
  • def ligneParent(self):
  • return self.plateau.ligne(self.y)
  • class Plateau:
  • def __init__(self, caseClass=Case):
  • # Controle de type
  • if(not isinstance(caseClass(0, 0, None), Case)):
  • raise ErrorType , "Try to add 'caseValue' as not 'Case' type"
  • class CaseLaby(Case):
  • def __init__(self, x, y, plateau):
  • Case.__init__(self, x, y, plateau)
  • self.murH = True
  • self.murV = True
  • self.passer = False
  • class CasePiCross(Case):
  • def __init__(self, x, y, plateau):
  • Case.__init__(self, x, y, plateau)
  • self.colorier = False
  • class Plateau2D(Plateau):
  • def __init__(self, dimension, name = "Plateau1", caseClass=Case):
  • Plateau.__init__(self, caseClass)
  • self.name = name
  • self.cases = []
  • for x in range(dimension[0]):
  • temp = []
  • for y in range(dimension[0]):
  • temp.append(caseClass(x, y, self))
  • self.cases.append(temp)
  • def ligne(self, id):
  • if(id > len(self.cases)):
  • raise Exception, "Out bound Plateau"
  • return self.cases[id]
  • def colone(self, id):
  • if(id > len(self.cases[0])):
  • raise Exception, "Out bound Plateau"
  • listeReturn = []
  • for ligneCase in self.cases:
  • listeReturn.append(ligneCase[id])
  • return listeReturn
  • def __str__(self):
  • return self.name
  • if __name__=="__main__":
  • print "Lancement"
  • #Un plateau normal
  • p = Plateau2D((10, 10))
  • for case in p.ligne(0):
  • print case
  • # Plateau laby
  • p = Plateau2D((10, 10), caseClass=CaseLaby)
  • #Plateau PiCross
  • p = Plateau2D((10, 10), caseClass=CasePiCross)
  • print "Fin
#! /usr/bin/python
# Illustation classe génériques
# Ecrit par : Beltegeuse
# Licence : LGPL
# Date : 31/01/09
#

class ErrorType(Exception): pass

class Case:
    def __init__(self,  x,  y,  plateau):
        self.x = x 
        self.y = y
        self.plateau = plateau
    
    def __str__(self):
        return "x : " + str(self.x) + " y : " + str(self.y) + " plateau : " + str(self.plateau)
    
    def colonneParent(self):
        return self.plateau.colonne(self.x)
    
    def ligneParent(self):
        return self.plateau.ligne(self.y)

class Plateau:
    def __init__(self, caseClass=Case):
        # Controle de type
        if(not isinstance(caseClass(0, 0,  None),  Case)):
            raise  ErrorType , "Try to add 'caseValue' as not 'Case' type"

class CaseLaby(Case):
    def __init__(self,  x,  y,  plateau):
        Case.__init__(self,  x, y,  plateau)
        self.murH = True
        self.murV = True
        self.passer = False

class CasePiCross(Case):
    def __init__(self,  x,  y,  plateau):
        Case.__init__(self,  x,  y,  plateau)
        self.colorier = False

class Plateau2D(Plateau):    
    def __init__(self,  dimension,  name = "Plateau1",  caseClass=Case):
        Plateau.__init__(self,  caseClass)
        self.name = name
        self.cases = []
        for x in range(dimension[0]):
            temp = []
            for y in range(dimension[0]):
                temp.append(caseClass(x, y,  self))
            self.cases.append(temp)
    
    def ligne(self, id):
        if(id > len(self.cases)):
            raise Exception,  "Out bound Plateau"
        return self.cases[id]
    
    def colone(self, id):
        if(id > len(self.cases[0])):
            raise Exception,  "Out bound Plateau"
        listeReturn = []
        for ligneCase in self.cases:
            listeReturn.append(ligneCase[id])
        return listeReturn
    
    def __str__(self):
        return self.name

if __name__=="__main__":
    print "Lancement"
    #Un plateau normal
    p = Plateau2D((10, 10))
    for case in p.ligne(0):
        print case

    # Plateau laby
    p = Plateau2D((10, 10),  caseClass=CaseLaby)
    
    #Plateau PiCross
    p = Plateau2D((10, 10),  caseClass=CasePiCross)
    print "Fin

 Conclusion

J'ai posté cette source car j'ai passé quelques heures à chercher comme on pouvais le faire en python.


 Sources du même auteur

Source avec Zip Source avec une capture PYSNAKE WITH PYGAME
Source avec Zip ISBN : RECONNAISSANCE

 Sources de la même categorie

Source avec Zip SCRIPT PERMETTANT DE DÉCODER LA STRUCTURE SECONDAIRE D'UNE P... par Basilio
SUPPRESSION par Rano Its
Source avec Zip RECONNAISSANCE VOCALE par brennal
CONVERTISSEUR DE TEMPÉRATURE par skizo00o
Source avec Zip Source avec une capture I.A. (DÉBUTANT) par Rano Its

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

remplacement de szelect case [ par Cyrion81 ] BonjourJe commence a apprendre le python qui ne parait excellent, dans la panoplie de boucle ou autre, je n ai rien trouvé qui puisse correspondre à u Demande aide pour evenement sur widget Canvas [ par imothep21 ] Bonjour tout le monde, Donc voila, mon but est de réaliser un jeu de picross (logigraphe) avec python, dans le code ci dessous, j'ai implémenté une f


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales