Bonjour, j'ai une liste de listes représentant un plateau de 16*16
Chaque entier dans les listes (des 0 de base) représentent donc une case.
Code : Sélectionner tout - Visualiser dans une fenêtre à part plateau = [[0 for x in range (16)] for y in range(16)]
J'ai besoin d'une fonction qui fait que par exemple, si il y a un ou plusieurs 2 dans la liste, qu'ils s'étendent aux 4 cases adjacents (remplaçant les 0 par des 2)
J'ai la base du code pour étendre les 2 qui fonctionne bien, mais cependant j'ai besoin de stocker avant de commencer les coordonnées des 2 qu'on trouve dans le plateau, pour ensuite étendre seulement sur ces coordonnées. (sinon j'ai une boucle qui le fait jusqu'à temps que tout le plateau soit rempli de 2, ou alors juste sur le premier 2 qu'il trouve)
J'ai donc essayé quelque chose comme ça :
Au début tout va bien, cela stock les différentes coordonnées dans 2 listes (x et y)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 def avancement(plateau): cases_j_x=[] cases_j_y=[] for row_num in range(16): row=plateau[row_num] for column in range(16): if row[column] == 2 or row[column] == 3: cases_j_x.append(row_num) cases_j_y.append(column) index_j=0 j_x=cases_j_x[index_j] j_y=cases_j_y[index_j] while index_j <= len(cases_j_x): if j_y-1 >= 0 and plateau[j_x][j_y-1]==0 or plateau[j_x][j_y-1]==6 or plateau[j_x][j_y-1]==7: plateau[j_x][j_y-1]=2 if j_y+1 < 16 and plateau[j_x][j_y+1]==0 or plateau[j_x][j_y+1]==6 or plateau[j_x][j_y+1]==7: plateau[j_x][j_y+1]=2 if j_x-1 >= 0 and plateau[j_x-1][j_y]==0 or plateau[j_x-1][j_y]==6 or plateau[j_x-1][j_y]==7: plateau[j_x-1][j_y]=2 if j_x+1 < 16 and plateau[j_x+1][j_y]==0 or plateau[j_x+1][j_y]==6 or plateau[j_x+1][j_y]==7: plateau[j_x+1][j_y]=2 index_j+=1 j_x=cases_j_x[index_j] j_y=cases_j_y[index_j] return plateau
J'ai ensuite une variable initialisé à 0 et 2 autres (pour x et y) qui prendront successivement les valeurs des coordonnées dans la liste, à chaque fois appliquant l'extension avant de prendre la valeur suivante.
Or quand j'éxécute le programme je tombe sur une IndexError, parce que la variable qui me sert d'index n'est plus dans la range des listes, comme si la boule ne s'arrêtait jamais alors qu'elle devrait s'arrêter justement quand c'est le cas.
J'ai essayé des choses avec la commande break, sans grand succès.
Je sais pas si je suis très clair, mais merci à ceux qui pourront m'aider![]()
Partager