begin process at 2012 02 04 23:54:45
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > I.A. (DÉBUTANT)

I.A. (DÉBUTANT)


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :intelligence, artificielle, simple, classe, tkinter Niveau :Débutant Date de création :04/12/2009 Vu / téléchargé :3 799 / 120

Auteur : Rano Its

Ecrire un message privé
Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour,
voici un mini programme que j'ai écrit y'a plus d'un an. Comme je me remets à Python, j'aimerai beaucoup avoir des feedbacks quant aux améliorations (quelles qu'elles soient) possible, notamment pour éviter de consommer trop de ressources.

Sommairement :
le programme permet d'afficher 4 "morp" qui se balladent aléatoirement. Ils s'arrêtent pour dormir et se déplacent vers un endroit cible quand ils "ont faim".

Voili voilou, merci à ceux qui prendront le temps d'y jeter un coup d'oeil.

Source

  • ## -*- 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()
## -*- 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()


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec une capture RECHERCHE DE DOUBLONS DANS DES DOSSIERS.
SUPPRESSION

 Sources de la même categorie

CALCULE LA FRÉQUENCE DU CPU par Guillamue06
Source avec Zip Source avec une capture NOTEPAD POUR PYTHON par grephit
EXTRAIRE LE CONTENU D'UNE ARCHIVE .TAR OU .RAR par brennal
Source avec Zip SCRIPT PERMETTANT DE DÉCODER LA STRUCTURE SECONDAIRE D'UNE P... par Basilio
SUPPRESSION par Rano Its

 Sources en rapport avec celle ci

Source avec Zip TPYCODE, TRADUCTEUR DE CODE par jonathan33350
TAQUIN 4*4 par fredericfabry
Source avec Zip Source avec une capture TRIANGULATION par mecrosoft
Source avec Zip CALCULATRICE SIMPLICISTE SOUS TKINTER par elnabo
Source avec Zip PLACER N REINES DANS UN ECHIQUIER (INTELLIGENCE ARTIFICIELLE... par boumarsel

Commentaires et avis

Commentaire de xeolin le 02/01/2010 23:26:23 10/10

Ce que tu as fait ici, ce n'est pas une IA, mais des robots, qui ont des actions qui ressemble à de l'intelligence mais qui ne le sont pas.

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!

Commentaire de Rano Its le 03/01/2010 00:20:11

Je suis d'accord, ça n'est pas une I.A.. À vrai dire, mon projet de début devait l'être, mais au final je n'avais pas l'expérience, ni les connaissances pour le faire, donc je n'étais pas aller plus loin.

Merci de ton commentaire.

Je garde ton idée de piège en tête :p.

Commentaire de Julien39 le 21/06/2010 19:09:00 administrateur CS 9/10

C'est déjà pas mal, faire une bonne ia est quelque chose d'assez difficile. Tu as fait un effort pour commenter, cependant, certains morceaux de code commentés viennent nuire à la compréhension générale.

Un très bon code quand même

Commentaire de Rano Its le 23/06/2010 22:43:41

Merci pour ton commentaire,
les commentaires dans la source étaient plutôt pour m'aider à imaginer les figures sur le canvas.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

scrollbar dans scrollbox avec TKinter [ par MHI ] Est-ce que quelqu'un sait comment ajouter les scrollbar à une scrollbox :J'ai essayé ceci :lstFile = Tkinter.Listbox(frmMain)lstFile.place(x = 20, y = checkButton avec TKinter [ par MHI ] comment faire pour tester si un checkButton est coché ? Probleme avec TKinter [ par titasse ] Bonjour, je debute en python. J'ai un probleme lorsque je veux importer TKinter avec la commande from TKinter import * j'ai le message suivant : Imp au sujet de Tkinter et le module turtle [ par nico1900 ] from turtle import *forward(120)left(90)&nbsp;color('red')&nbsp;forward(80)bon en fait je voulais tester le module turtle&nbsp;avec&nbsp;l e code ci-d Librairie graphique vectoriel [ par DoudouBidou ] Bonjour, j'ai depuis quelques jour un projet en t&#234;te, celui de r&#233;aliser un logiciel de saisi de sch&#233;ma &#233;lectrique en python. Un Canvas comme dans Tkinter, mais pour wxPython [ par samurize ] Slt tout le monde. &nbsp; Voila tout est dans le titre (ou a peu pres&nbsp; ) : &nbsp; Je suis &#224; la recherche d'un module pouvant s'integrer da Taille de widgets sous Tkinter [ par Uims ] Bonjour, Quelqu"un saurait comment definir la taille d'un widgets sous tkinter??? Exemple: fen 1 = Tk(taille=600) J'espere que je me fait comprend Ouverture d'un fichier windows (avec Tkinter) [ par Uims ] Bonjour, Je travaille sous python et Tkinter et j'aurai voulu savoir comment dire a python de demarrer (comme on clique sur un fichier) une applicati Tkinter et Python [ par Telimektar1er ] Voila j'ai commenc&#233; e python il y a une semaine et jusqu &#224; aujourd'hui aucun probl&#232;me. Mais voil&#224;, je viens de commencer la cr&#23 help, faire un mastermind en python et en tkinter avant le 24 !!! [ par Crick132 ] je suis &#233;tudiante en 2&#232;me ann&#233;e, je dois r&#233;aliser un mastermind en python avec 8 couleurs et 5 combinaisons possibles.si quelqu'un


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,919 sec (4)

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