Bonjour, je dois concevoir un programme intitulé "evacuation d'une salle" en python. Dans ce programme, je définis la salle comme une matrice de 0 dans lequel un automate (symbolisé par le nombre 1 dans la matrice) doit se deplacer le + rapidement possible jusqu'à la sortie. Il y'a des obstacles (symbolisé par le nombre 8 danss la matrice) qu'il doit éviter.
Voici ce que j'ai fait pour l'instant:
Ma question est la suivante: Quelles lignes de codes je dois mettre dans la boucle sur le temps pour que à chaque pas de temps,mon programme affiche le nouveau tableau copié du précédent et que donc dans cette succession de tableau affichés on puisse voir le déplacement de l'automate du départ jusqu'à la sortie ?Code:import numpy as N from pylab import * import random import math x==1 #position initiale horizontale de lautomate y==0 #position initiale verticale de lautomate xo==3 #position initiale horizontale de lobstacle yo==3 #position initiale verticale de lobstacle xs==5 #coordonnee horizontale de la sortie ys==5 #coordonnee verticale de la sortie t==N.arange(20) #definition du vecteur temps dt==1 #definition du pas de temps tab==N.zeros((5,10),dtype=int) #definition du tableau representant la salle ou se deplacent les automates newtab==N.zeros((5,10),dtype=int) def ComputeNewRoom(tab): #fonction qui renvoie un nouveau tableau (newtab) a partir du precedent (tab). La position de lautomate est indiquee par 1 et les cases vides du tableau par 0 newtab=tab.copy() # le nouveau tableau est copie a partir du precedent newtab[newtab==1]=0 #la case occuppee par lautomate sur le precedent tableau est vide sur le nouveau tableau mymen=N.where(tab==1)# la position de lautomate est determinee par 1 dans le tableau myblocks=N.where(tab==8) #la position de lobstacle est determinee par 8 dans le tableau for coord in mymen: x,y=FastWalk(coord[0],coord[1],tab,newtab)#on doit faire appel a la fonction Fastwalk pour avoir les coordonnees de la position delautomate newtab[x,y]=1 # les coordonnees x et y determinees sont les coordonees de 1 dans le tableau for coord in myblocks: #on doit faire appel a la fonction Wall pour avoir les coordonnes de la position des obstacles xo,yo=Wall(coord[0],coord[1],tab,newtab) newtab[xo,yo]=8 # les coordonnees xo et yo determinees sont les coordonnees de 8 dans le tableau return newtab def Wall(xo,yo,tab,newtab): # position de lobstacle xo=3 yo=4 return xo,yo def FastWalk(x,y,tab,newtab): #fonction qui code le deplacement intelligent de lautomate qui doit rejoindre la sortie le plus rapidement.. a==N.random.randint(0,2,20) if xs-x<ys-y: if a.any==0: x==x+1 #deplacement horizontal de lautomate elif a.any==1: x==x+1 # deplacement en diagonal vers le haut de lautomate y==y+1 elif ys-y<xs-x: if a.any==0: if ys>y: y==y+1 #deplacement vertical positif de lautomate if ys<y: y==y-1 #deplacement vertical negatif de lautomate elif a.any==1: if ys>y: x==x+1 #deplacement diagonal positif de lautomate y==y+1 elif ys<y: x==x+1 #deplacement diagonal negatif de lautomate y==y-1 elif ys-y==xs-x: x==x+1 #deplacement diagonal positif de lautomate y==y+1 elif ys-y==x-xs: x==x+1 #deplacement diagonal negatif vers le bas de lautomate y==y-1 return x,y for i in t: #boucle qui va faire appel a toutes les autres fonctions pour passer de letat t a letat t+dt print newtab # cette boucle contient les conditions dans le cas ou les positions finales sont atteintes if y==ys: #conditions a respecter a chaque fois que lautomate atteint la coordonnee horizontale et ou verticale de la sortie if x==xs: print "sortie atteinte" else: x==x+1 if x==xs: print "sortie atteinte" elif x==xs: if y==ys: print "sortie atteinte" elif ys>y: y==y+1 if y==ys: print "sortie atteinte" elif y>ys: y==y-1 if y==ys: print "sortie atteinte" elif x+1==xo: # conditions a respecter lorsque lautomate rencontre un obstacle if y<ys: y==y+1 if y>ys: y==y-1 elif y+1==yo: x==x+1 elif y-1==yo: x==x+1
Merci d'avance
-----