Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import matplotlib.animation as animation
- from Classes import *
- from Environnement import *
- ###############################################################################
- nb_simulations = 100
- ###############################################################################
- def compte_agent(carte,agent):
- """
- carte->int
- Rend le nombre d'agent spécifié sur la carte à l'instant t
- """
- compteur_agent = 0
- for ligne in range(i):
- for colonne in range(j):
- if isinstance(carte[ligne,colonne],agent):
- compteur_agent +=1
- return compteur_agent
- def dynamique(carte):
- """
- Lance la simulation avec un nombre d'itérations choisi
- """
- evolution_H = [] # Liste du nombre d'humains à chaque tour
- evolution_Z = [] # Liste du nombre de zombies à chaque tour
- E=set()
- for ligne in range(i):
- for colonne in range(j):
- if isinstance(carte[ligne,colonne],Zombie) and carte[ligne,colonne] not in E: # Lance les fonctions propres aux zombies
- carte[ligne,colonne].sentir(carte)
- carte[ligne,colonne].move(carte)
- E.add(carte[ligne,colonne])
- print(where_classe(Zombie,carte0))
- if isinstance(carte[ligne,colonne],Humain) and carte[ligne,colonne] not in E: # Lance les fonctions propres aux humains
- carte[ligne,colonne].sentir_zombie(carte)
- carte[ligne,colonne].Faim
- carte[ligne,colonne].Pdv(carte)
- E.add(carte[ligne,colonne])
- print(where_classe(Humain,carte0))
- if isinstance(carte[ligne,colonne],Humain): #On vérifie que l'humain n'est pas mort de faim
- carte[ligne,colonne].shoot(carte)
- if isinstance(carte[ligne,colonne],Humain):
- carte[ligne,colonne].ravitaillement(carte)
- if isinstance(carte[ligne,colonne],Humain): #On vérifie que l'humain n'est pas mort de faim si l'humain a bougé, on ne peux pas faire tirer une case vide
- carte[ligne,colonne].run(carte)
- def affichage(carte):
- carte_affiche = np.zeros(carte.shape)
- for ligne in range (i):
- for colonne in range(j):
- case = carte[ligne,colonne]
- if isinstance(case, Vide):
- carte_affiche[ligne,colonne] = 0
- elif isinstance(case, Zombie):
- carte_affiche[ligne,colonne] = 1
- elif isinstance(case, Humain):
- carte_affiche[ligne,colonne] = 2
- elif isinstance(case, Batiment):
- if case.type == "Porte":
- carte_affiche[ligne,colonne] = 3.1
- elif case.type == "Maison":
- carte_affiche[ligne,colonne] = 3.2
- elif case.type == "Magasin":
- carte_affiche[ligne,colonne] = 3.3
- elif case.type == "Armurerie":
- carte_affiche[ligne,colonne] = 3.4
- elif case.type == "Hôpital":
- carte_affiche[ligne,colonne] = 3.5
- return carte_affiche
- def init_affichage(carte):
- """
- carte[object] -> map
- Sort une carte graphique
- """
- carte_affiche = affichage(carte)
- size = np.array(carte.shape)
- dpi = 72.0
- figsize = size[1]/float(dpi), size[0]/float(dpi)
- fig = plt.figure(figsize = figsize, dpi = dpi , facecolor = "white")
- cmap = mpl.colors.ListedColormap(["White","Red","Green","saddlebrown","grey","royalblue","olive","salmon"])
- bounds=(0, 1, 2, 3.1, 3.2, 3.3, 3.4, 3.5, 4) # Le 4 n'existe pas mais permet au code de fonctionner ! :)
- norm = mpl.colors.BoundaryNorm(bounds,cmap.N)
- img = plt.imshow(carte_affiche,interpolation="nearest",cmap=cmap,norm=norm)
- plt.colorbar(img,cmap=cmap,norm=norm,boundaries=bounds,ticks=bounds)
- return fig,img
- fig,img = init_affichage(carte0)
- def update(t, *args):
- """
- Rafraichit la carte
- """
- dynamique(carte0)
- c = affichage(carte0)
- img.set_array(c)
- return img,
- ani = animation.FuncAnimation(fig, update, frames = range(nb_simulations), interval = 500 , repeat = False )
- plt.show()
- def courbes_suivi(carte):
- evolution_H.append(compte_agent(carte,Humain))
- evolution_Z.append(compte_agent(carte,Zombie))
- x1 = np.linspace(0, nb_simulations,1) # Fonction d'affichage des courbes
- plt.plot(x1,evolution_H,"green")
- plt.plot(x1,evolution_Z,"red")
- plt.title('Evolution Humains (green) et Evolution Zombies (red)')
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement