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:
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
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 ?
Merci d'avance ^^