Soyez le premier à donner votre avis sur cette source.
Vue 8 878 fois - Téléchargée 533 fois
## -*- coding: cp1252 -*- from tkinter import * import random from time import time t = time() global COLOR, MOOD, WayFeel, NBR global DIC, Stat, POS MOOD = ["H","M","N"] # Heureux, Malheureux, Neutre WayFeel = ["S","M","G"] # Suspicieux, Méchant, Gentil COLOR = ["red","yellow","blue","black"] NBR = 0 DIC = [175, 175, 210, 175, 245, 175, 280, ################## 175, 315, 175, 350, 175, 385, 175, # # 420, 175, 455, 175, 490, 175, 490, # Données # 490, 455, 490, 420, 490, 385, 490, # servant # 350, 490, 315, 490, 280, 490, 245, # à créer # 490, 210, 490, 175, 490, 105, 175, # le quadrillage # 105, 210, 105, 245, 105, 280, 105, # bleu, # 315, 105, 350, 105, 385, 105, 420, # qui ne # 105, 455, 105, 490, 560, 175, 560, # sert qu'à # 210, 560, 245, 560, 280, 560, 315, # décorer. # 560, 350, 560, 385, 560, 420, 560, ################## 455, 560, 490] Stat = [[] for i in range(4)] POS = [[] for i in range(4)] PosAfter = [[175, 140],[490, 140],[175, 525],[490, 525]] class Plateau (Tk): def __init__(self): Tk.__init__(self) self.initialize() def initialize(self): self.DIC = DIC self.grid() self.nbr = NBR self.surface = Canvas(self, width =700, height =700, bg ='ivory', bd =3, relief =SUNKEN) self.surface.grid(padx =8, pady =8, column=0, row=1,) Button(self, text="Quitter", command=quit).grid(column=1, row=0) Button(self, text="Lancer", command=self.Launch).grid(column=0, row=0) self.Fond () case = self.surface.create_rectangle(0, 0, 35, 35, outline="Brown", fill = "Brown") self.Test () def Test (self): """pour tester ...""" print (COLOR, MOOD, WayFeel, NBR, Stat,sep="\n") def Fond (self): """Quadrillage: aide pour bien visualiser au départ.""" row = 0 col = 0 for x in range (20): row = x*35 for y in range(20): col = y*35 case = self.surface.create_rectangle(col, row, col + 39, row+ 39, outline="Blue", fill = "cyan") i = 0 while len(DIC) != i: case = self.surface.create_rectangle(DIC[i+1], DIC[i], DIC[i+1]+ 35, DIC[i]+ 35, outline="white", fill = "Blue") i = i+2 self.surface.create_text(688,10, font='Arial 10 bold', text="Faim", fill = "Brown") self.surface.create_text(680,20, font='Arial 10 bold', text="Fatigue", fill = "White") a=0 for i in PosAfter : case = self.surface.create_rectangle(i[0], i[1],i[0]+35, i[1]+35, outline="black", fill = COLOR[a]) a+=1 return True def Launch (self): if self.nbr <= 3 : ColorT = COLOR[self.nbr] IdT = self.nbr MoodT = MOOD[random.randint(0,2)] WayFeelT = WayFeel[random.randint(0,2)] Stat[self.nbr] = [IdT, ColorT, MoodT, WayFeelT, 0, 0] MorpIon = Morp (self,self.surface,ColorT, IdT, MoodT, WayFeelT) ## Str_text = StringVar() ## labFile = Label(self,anchor="w", ## textvariable=Str_text, ## width=15, ## fg="white", ## bg="blue").grid(column=0, ## row=self.nbr+3, ## padx =8, ## sticky='EW') ## Str_text.set(u"Morp (n°"+str(self.nbr+1)+") : Couleur = "+ColorT+", Mood = "+MoodT+", Feel = "+WayFeelT) self.nbr = NBR = self.nbr+1 else : print (Stat) class Morp : def __init__ (self,tk,can,Color, Id, Mood, WayFeel): self.a = 0 # 0 self.b = -2 # -2 self.c = 0 self.can = can self.tk = tk self.Color = Color self.Id = Id self.Mood = Mood self.Food = 100 # 100 self.Dodo = 100 # 100 self.Fatigue = self.Dodo self.Hungry = self.Food self.WayFeel = WayFeel self.Bool = True # True self.Rencontre = False # False ## coordonnées initiales self.x1, self.y1 = PosAfter[self.Id][0], PosAfter[self.Id][1] ## coordonnées initiales : PosAfter [self.Id] # Avant : 350,350 (milieu du Canvas) POS[self.Id] = [self.x1, self.y1] #print "Morp : ",self.Color, self.Id, self.Mood, self.WayFeel self.Initialize () def Initialize (self): self.rond = self.can.create_oval(self.x1,self.y1,self.x1+30,self.y1+30, outline="Blue", fill=self.Color) self.OeuilG = self.can.create_oval(self.x1+5,self.y1+8,self.x1+10,self.y1+13, outline="Black", fill="White") self.OeulD = self.can.create_oval(self.x1+20,self.y1+8,self.x1+25,self.y1+13, outline="Black", fill="White") self.Dors = self.can.create_rectangle(self.x1,self.y1+30,self.x1+self.Fatigue,self.y1+35, outline="Yellow", fill = "White") self.Faim = self.can.create_rectangle(self.x1,self.y1+25,self.x1+self.Hungry,self.y1+30, outline="Yellow", fill = "Brown") self.Str_text = StringVar() Label(self.tk,anchor="w", textvariable=self.Str_text, width=15, fg="white", bg="blue").grid(column=0, row=self.Id+3, sticky='EW') self.Str_text.set(("Morp n°"+str(self.Id+1)+", "+self.Color+" : pos (x = "+str(self.x1)+", y = "+str(self.y1)+"), faim ("+str(self.Food)+"), fatigue ("+str(self.Dodo)+")")) Button(self.tk, text="Stop", command=self.Stop).grid(column=1, row=self.Id+3) self.Mouvement () def Stop (self): if self.Bool == True: app.after_cancel(self.Mouve) self.Str_text.set(("Morp n°"+str(self.Id+1)+" ("+self.Color+") en pause.")) self.Bool = False else : self.Bool = True self.Mouvement () def Mouvement (self): a = 0 "Vérification : rencontre et faim" self.Encounter () self.SelfEat () "Exception :" if self.Rencontre == True: self.Bool = False self.x1, self.y1 = PosAfter[self.Id][0], PosAfter[self.Id][1] self.ShowMood () app.after_cancel(self.Mouve) self.Moodet() "déplacement du Morp" if self.b == -2 : self.b = random.randint(0,40) self.a = random.randint(0,3) if self.b == -1 : self.a = random.randint(0,3) self.b = random.randint(0,40) "Faim :" self.Hungry -= 0.1 if self.Hungry <= 0: app.after_cancel(self.Mouve) self.Manger () "Fatigue :" self.Fatigue -= 0.025 if self.Fatigue <= 0 : app.after_cancel(self.Mouve) self.ZZzz = self.can.create_text(self.x1+20,self.y1, font='Arial 10 bold', text="ZZzz", fill = "Brown") self.Repos () a = 1 "Mouvements :" if self.a == 0: self.Haut () if self.a == 1: self.Bas () if self.a == 2: self.Avant () if self.a == 3: self.Arriere () "Blocage et redirection :" self.b -= 1 if a == 1 : app.after_cancel(self.Mouve) if self.Hungry >= 0 and a == 0 and self.Bool == True: self.Str_text.set(("Morp n°"+str(self.Id+1)+", "+self.Color+" : pos (x = "+str(self.x1)+", y = "+str(self.y1)+"), faim ("+str(round(self.Hungry,1))+"), fatigue ("+str(round(self.Fatigue,1))+")")) self.Mouve = app.after(10,self.Mouvement) def Repos (self): self.Fatigue += 2.5 self.can.coords(self.Dors, self.x1,self.y1+20,self.x1+self.Fatigue,self.y1+25) self.Str_text.set(("Morp (n°"+str(self.Id+1)+", "+self.Color+") : pos (x = "+str(self.x1)+", y = "+str(self.y1)+"), faim ("+str(round(self.Hungry,1))+"), fatigue ("+str(round(self.Fatigue,1))+")")) if self.Fatigue >= self.Dodo : self.can.delete(self.ZZzz) app.after_cancel(self.Sieste) self.Mouvement () else : self.Sieste = app.after(500, self.Repos) def Manger (self): self.Fatigue -= 0.025 if self.x1 > 5 and self.y1 >5 : self.Trans () elif self.x1 <= 5 : self.Haut () elif self.y1 <=5 : self.Arriere () if self.x1 <=5 and self.y1 <=5 : self.Hungry = self.Food app.after_cancel(self.Mange) self.Mouvement () else : self.Mange = app.after(10, self.Manger) def Haut (self): if self.y1 >5: self.y1= self.y1-5 self.Changes () def Arriere (self): if self.x1 >5: self.x1 = self.x1-5 self.Changes () def Bas (self): if self.x1 <670: self.x1 = self.x1+5 self.Changes () def Avant (self): if self.y1 <670: self.y1 = self.y1+5 self.Changes () def Trans(self): if self.y1 >5 and self.x1 >5: self.y1= self.y1-5 self.x1 = self.x1-5 self.Changes () def SelfEat (self): if self.x1 <=5 and self.y1 <=5 : self.Hungry = self.Food def Changes (self): ## Exemple : pos = x :5 ; y : 165 ## ## 5 x 165+e ## 5+faim x 165+e+5 ## ## ## POS[self.Id] = [self.x1, self.y1] self.can.coords(self.Dors, self.x1,self.y1+30,self.x1+self.Fatigue,self.y1+35) self.can.coords(self.Faim, self.x1,self.y1+25,self.x1+self.Hungry,self.y1+30) self.can.coords(self.OeuilG, self.x1+5,self.y1+8,self.x1+10,self.y1+13) self.can.coords(self.OeulD, self.x1+20,self.y1+8,self.x1+25,self.y1+13) self.can.coords(self.rond,self.x1,self.y1,self.x1+30,self.y1+30) def Encounter (self): ## chaque rond est dans un carré de 30x30, ## exemple : 350x350 -> carré comme cela ## 320x350 380x380 ## ## 350x350 350x380 ## ## 5x165 --> 5 <= Autre <= 35 x 165 <= Autre <= 165 ## DONC --> [5,35[ x [165,165[ ## for i in range(4) : if i == self.Id : continue try : if POS[self.Id][0] <= POS[i][0] and POS[self.Id][0]+30 >= POS[i][0] : if POS[self.Id][1] <= POS[i][1] and POS[self.Id][1]+30 >= POS[i][1] : self.Rencontre = True #print self.Id,"et",i #print POS[self.Id]," !! ",POS[i] except : self.Rencontre = False #pass def Moodet (self): if self.Rencontre == False: self.can.delete(self.Smile) app.after_cancel(self.AfterEncounter) self.Bool = True self.Mouvement () else : app.after_cancel(self.Mouve) self.Rencontre = False self.AfterEncounter = app.after(2000,self.Moodet) def ShowMood (self) : ## Smileys = :), :\, :(,:( !#?%, :p, :'(, :D Hi !, :o, (oµO)..l.. ## MOOD = ["H","M","N"] # Heureux, Malheureux, Neutre ## WayFeel = ["S","M","G"] # Suspicieux, Méchant, Gentil self.Str_text.set(("Morp n°"+str(self.Id+1)+" ("+self.Color+") : Rencontre avec un Morp.")) e = 40 font = 'Arial 15 bold' couleur = 'brown' if self.Mood == "H" and self.WayFeel == "S" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text=":D", fill = couleur) elif self.Mood == "H" and self.WayFeel == "M" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text="(oµO)..l..", fill = couleur) elif self.Mood == "H" and self.WayFeel == "G" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text=":p Hi !", fill = couleur) elif self.Mood == "M" and self.WayFeel == "S" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text=":\\", fill = couleur) elif self.Mood == "M" and self.WayFeel == "M" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text=":( !#?%", fill = couleur) elif self.Mood == "M" and self.WayFeel == "G" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text=":'(", fill = couleur) elif self.Mood == "N" and self.WayFeel == "S" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text=":| ?", fill = couleur) elif self.Mood == "N" and self.WayFeel == "M" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text=":| #Tss#", fill = couleur) elif self.Mood == "N" and self.WayFeel == "G" : ## self.Smile = self.can.create_text(self.x1+e,self.y1, font=font, text=":)", fill = couleur) if __name__ == "__main__": app = Plateau() del DIC app.title('IA Simulator. Affiché en '+str(round(time()-t,5))+" secondes.") app.resizable(False,False) app.iconbitmap("ErwIco.ico") app.mainloop()
23 juin 2010 à 22:43
les commentaires dans la source étaient plutôt pour m'aider à imaginer les figures sur le canvas.
21 juin 2010 à 19:09
Un très bon code quand même
3 janv. 2010 à 00:20
Merci de ton commentaire.
Je garde ton idée de piège en tête :p.
2 janv. 2010 à 23:26
Ton programme est très bon, ne pense pas que je le critique, j'aime beaucoup les petit pacman qui se nourrissent tout seul !
Ce que c'est une intelligence, pour moi (j'ai pas envie d'entrer dans une discussion philosophique ici) c'est quelque chose qui s'adapte. Ajoute quelque chose, un piège par exemple ton petit robot tombera toujours dedans, il faudrait qu'il soit capable de s'adapter pour qu'il soit une vrai IA...
Enfin le programme, lui est bon. Bon boulot!
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.