import random import numpy as np import matplotlib as mpl from matplotlib import pyplot # état = 0 : le joueur est COOP # état = 1 : le joueur est TRAITRE TailleGrilleX = 15 TailleGrilleY = 15 GrilleInitiale = 0 HistoriqueGrille = list() StratsResultats = list() # Je pense que je vais avoir un gros problème de typage !!! # En effet, j'initialise des matrices avec des entiers pour ensuite remplacer les # entiers par des dictionnaires, peu de chances que ça passe def init_matrice_meme_strat(strat): """ int*int*int -> array Crée la matrice des joueurs où chacun a la même stratégie mais commence avec des statuts différents, générés aléatoirement """ histo_strat = [strat] matrice = np.zeros((TailleGrilleX, TailleGrilleY)) for i in range(TailleGrilleY): for j in range(TailleGrilleX): etat = random.randint(0, 2) matrice[i][j] = dict('etat' : etat, 'strategie' : strat, 'annees_de_prison' : 0,\ 'historique_strategies' : histo_strat, 'historique_etats' : [etat]) return matrice def matrice_init_liars(strat): """ int*int*int -> array Crée la matrice des joueurs tel que chaque joueurs nie, sauf un qui avoue. Chaque joueur à la même stratégie """ histo_strat = [strat] matrice = np.zeros((TailleGrilleX, TailleGrilleY)) for i in range(TailleGrilleY): for j in range(TailleGrilleX): matrice[i][j] = dict('etat' : 1, 'strategie' : strat, 'annees_de_prison' : 0,\ 'historique_strategies' : histo_strat, 'historique_etats' : [1]) index_aleatoirex = [random.randint(0,TailleGrilleX-1)] index_aleatoirey = [random.randint(0,TailleGrilleY-1)] (matrice[index_aleatoirex][index_aleatoirey])['etat'] = 0 return matrice def matrice_init_coop(strat): """ int*int*int -> array Crée la matrice des joueurs tel que chaque joueur avoue, sauf un qui nie. Tous les joueurs ont la même strategie """ hito = [strat] matrice = np.zeros(TailleGrilleX, TailleGrilleY) for i in range(TailleGrilleY): for j in range(TailleGrilleX): matrice[i][j] = dict('etat' : 0, 'strategie' : strat, 'annees_de_prison' : 0,\ 'historique_strategies' : histo_strat, 'historique_etats' : [0]) index_aleatoirex = [random.randint(0,TailleGrilleX-1)] index_aleatoirey = [random.randint(0,TailleGrilleY-1)] (matrice[index_aleatoirex][index_aleatoirey])[etat] = 1 return matrice def matrice_init_pourcent_equitable(list_strat): """ int*int*list[functions] -> array Crée la matrice des joueurs tel que le pourcentage de chaque stratégie est équitable. Les états initials ? Initiaux ? de chaque joueur sont aléatoires. """ matrice_strat = np.zeros((TailleGrilleX, TailleGrilleY)) nb_de_joueurs_de_chaque = (TailleGrilleX*TailleGrilleY)/len(list_strat) for e in range(len(list_strat)): count_joueurs = 0 while count_joueurs <= nb_de_joueurs_de_chaque: index_aleatoirex = [random.randint(0,TailleGrilleX-1)] index_aleatoirey = [random.randint(0,TailleGrilleY-1)] if matrice_strat[index_aleatoirex][index_aleatoirey] != 0: continue matrice_strat[index_aleatoirex][index_aleatoirey] = e count_joueurs += 1 for i in range(TailleGrilleY): #on vérifie qu'il n'y a pas d'index vides for j in range(TailleGrilleX): #si oui, on le rempli avec une strat aléatoire if matrice_strat[i][j] == 0: matrice_strat[i][j] = list_strat[random.randint(0, 6)] matrice = np.zeros((TailleGrilleX, TailleGrilleY)) for i in range(TailleGrilleY): for j in range(TailleGrilleX): matrice[i][j] = dict('etat' : 0, 'strategie' : strat, 'annees_de_prison' : 0,\ 'historique_strategies' : histo_strat, 'historique_etats' : [0]) return matrice def matrice_init_pourcent_choisis(list_strat, list_pourcent): """ int*int*list[functions]*list[float] -> array Crée la matrice des joueurs tel que le pourcentage de chaque stratégie est choisi.