Advertisement
Guest User

Untitled

a guest
Mar 29th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.75 KB | None | 0 0
  1. import matplotlib.animation as animation
  2. from Classes import *
  3. from Environnement import *
  4.  
  5. ###############################################################################
  6.  
  7. nb_simulations = 100
  8.  
  9. ###############################################################################
  10.  
  11. def compte_agent(carte,agent):
  12.     """
  13. carte->int
  14. Rend le nombre d'agent spécifié sur la carte à l'instant t
  15. """
  16.     compteur_agent = 0
  17.     for ligne in range(i):
  18.         for colonne in range(j):
  19.             if isinstance(carte[ligne,colonne],agent):
  20.                 compteur_agent +=1
  21.     return compteur_agent
  22.                
  23.  
  24. def dynamique(carte):
  25.     """
  26. Lance la simulation avec un nombre d'itérations choisi
  27. """
  28.     evolution_H = []    # Liste du nombre d'humains à chaque tour
  29.     evolution_Z = []    # Liste du nombre de zombies à chaque tour
  30.     E=set()
  31.     for ligne in range(i):
  32.         for colonne in range(j):
  33.             if isinstance(carte[ligne,colonne],Zombie) and carte[ligne,colonne] not in E:     # Lance les fonctions propres aux zombies
  34.                 carte[ligne,colonne].sentir(carte)
  35.                 carte[ligne,colonne].move(carte)  
  36.                 E.add(carte[ligne,colonne])
  37.                 print(where_classe(Zombie,carte0))
  38.            
  39.             if isinstance(carte[ligne,colonne],Humain) and carte[ligne,colonne] not in E:   # Lance les fonctions propres aux humains
  40.                 carte[ligne,colonne].sentir_zombie(carte)                
  41.                 carte[ligne,colonne].Faim
  42.                 carte[ligne,colonne].Pdv(carte)
  43.                 E.add(carte[ligne,colonne])
  44.                 print(where_classe(Humain,carte0))
  45.                 if isinstance(carte[ligne,colonne],Humain): #On vérifie que l'humain n'est pas mort de faim
  46.                     carte[ligne,colonne].shoot(carte)
  47.                 if isinstance(carte[ligne,colonne],Humain):
  48.                     carte[ligne,colonne].ravitaillement(carte)
  49.                 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
  50.                     carte[ligne,colonne].run(carte)      
  51.                
  52.                
  53.                
  54.                
  55. def affichage(carte):
  56.     carte_affiche = np.zeros(carte.shape)
  57.     for ligne in range (i):
  58.         for colonne in range(j):
  59.             case = carte[ligne,colonne]
  60.             if isinstance(case, Vide):
  61.                 carte_affiche[ligne,colonne] = 0
  62.             elif isinstance(case, Zombie):
  63.                 carte_affiche[ligne,colonne] = 1
  64.             elif isinstance(case, Humain):
  65.                 carte_affiche[ligne,colonne] = 2
  66.             elif isinstance(case, Batiment):
  67.                 if case.type == "Porte":
  68.                     carte_affiche[ligne,colonne] = 3.1
  69.                 elif case.type == "Maison":
  70.                     carte_affiche[ligne,colonne] = 3.2
  71.                 elif case.type == "Magasin":
  72.                     carte_affiche[ligne,colonne] = 3.3
  73.                 elif case.type == "Armurerie":
  74.                     carte_affiche[ligne,colonne] = 3.4
  75.                 elif case.type == "Hôpital":
  76.                     carte_affiche[ligne,colonne] = 3.5    
  77.     return carte_affiche
  78.    
  79.                    
  80. def init_affichage(carte):
  81.     """
  82. carte[object] -> map
  83. Sort une carte graphique
  84. """
  85.     carte_affiche = affichage(carte)
  86.     size = np.array(carte.shape)
  87.     dpi = 72.0
  88.     figsize = size[1]/float(dpi), size[0]/float(dpi)
  89.     fig = plt.figure(figsize = figsize, dpi = dpi , facecolor = "white")
  90.     cmap = mpl.colors.ListedColormap(["White","Red","Green","saddlebrown","grey","royalblue","olive","salmon"])
  91.     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 ! :)
  92.     norm = mpl.colors.BoundaryNorm(bounds,cmap.N)
  93.     img = plt.imshow(carte_affiche,interpolation="nearest",cmap=cmap,norm=norm)
  94.     plt.colorbar(img,cmap=cmap,norm=norm,boundaries=bounds,ticks=bounds)
  95.    
  96.     return fig,img
  97.  
  98. fig,img = init_affichage(carte0)
  99.        
  100.  
  101. def update(t, *args):
  102.    """
  103. Rafraichit la carte
  104. """
  105.    dynamique(carte0)
  106.    c = affichage(carte0)
  107.    img.set_array(c)
  108.    return img,
  109.  
  110. ani = animation.FuncAnimation(fig, update, frames = range(nb_simulations), interval = 500 , repeat = False )
  111. plt.show()
  112.  
  113.        
  114. def courbes_suivi(carte):      
  115.     evolution_H.append(compte_agent(carte,Humain))          
  116.     evolution_Z.append(compte_agent(carte,Zombie))              
  117.     x1 = np.linspace(0, nb_simulations,1)                       # Fonction d'affichage des courbes
  118.     plt.plot(x1,evolution_H,"green")
  119.     plt.plot(x1,evolution_Z,"red")
  120.     plt.title('Evolution Humains (green) et Evolution Zombies (red)')
  121.     plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement