diff --git a/game2048/grid_2048.py b/game2048/grid_2048.py index 99d881de27a8a302796bc96177e47099dd48cdb0..2f0cc12506233400395a80e49c588e06c2a3baf5 100644 --- a/game2048/grid_2048.py +++ b/game2048/grid_2048.py @@ -91,6 +91,7 @@ def long_value_with_theme(grid,theme): #FONCTIONNALITE 4 def del_zeros(row): + #fonction permettant de supprimer les zeros d'une ligne, qui sont inutiles lors du processus de fusion des cases n = len(row) new_row = [] for i in range(n): @@ -99,6 +100,7 @@ def del_zeros(row): return new_row, n def move_left_bis(row,i=0): + #fonction aide pour la fonction recursive finale n = len(row) if i >= n-1: return row @@ -115,10 +117,13 @@ def move_row_left(row): return new_row + [0]*(n - len(new_row)) def move_row_right(row): + #bouger à droite revient à bouger à gauche la liste lue dans le sens inverse return move_row_left(row[::-1])[::-1] def move_grid(grid,d): taille=len(grid) + + #cas droite et gauche plus simple car utilisation directe des fonctions codées ci dessus if d=="left": new_grid=[] for ligne in range (taille): @@ -129,28 +134,34 @@ def move_grid(grid,d): for ligne in range (taille): row=grid[ligne] new_grid.append(move_row_right(row)) + + #si on doit bouger en haut ou en bas celà revient à bouger la transposer à gauche ou à droite else: - grid_t=transpose_grid(grid) + grid_t=transpose_grid(grid) #on s'interresse donc à la transposée new_grid_t=[] if d=="up": for ligne in range (taille): row=grid_t[ligne] new_grid_t.append(move_row_left(row)) - else : + else : #on ne peut bouger que en haut,bas,droite,gauche, pas besoin de elif donc par deduction for ligne in range (taille): row=grid_t[ligne] new_grid_t.append(move_row_right(row)) - new_grid=transpose_grid(new_grid_t) + #on obtient la transposée de la grille finale + new_grid=transpose_grid(new_grid_t) #permet de retoruver la grille "dans le bon sens" return(new_grid) def transpose_grid (liste): + #fonction permettant de transposer une liste de liste que l'on identifie à sa matrice + #cette fonction ne marche que sur des matrice carrée n=len(liste) transpo_liste=[] for colonne in range (n) : - ligne_transpo=[] + ligne_transpo=[] #création des lignes de la transposée for ligne in range (n) : ligne_transpo.append(liste[ligne][colonne]) transpo_liste.append(ligne_transpo) + #renvoie une liste return(transpo_liste) @@ -160,12 +171,14 @@ def is_grid_full(grid): return get_empty_tiles_positions(grid) == [] def move_possible(grid): + #renvoie une liste de 4 booléens indiquant si le déplacement à gauche,droite,haut,bas est possible. possibles = [] for d in ["left","right","up","down"]: - possibles.append(move_grid(grid,d) != grid) + possibles.append(move_grid(grid,d) != grid) #si le deplacement n'est pas possible, la grille reste inchangée apres avoir effectué ce déplacement return possibles def is_game_over(grid): + #on a perdu si la grille est pleine et que aucun mouvement n'est possible return is_grid_full(grid) and True not in move_possible(grid) def get_grid_tile_max(grid): @@ -177,6 +190,7 @@ def did_you_win (grid): #Fonctinnalité 6 def list_moove_possible (grid): + #renvoie la liste des deplacements possibles list_bool=move_possible(grid) list_final=[] if list_bool[0]: @@ -192,18 +206,26 @@ def list_moove_possible (grid): def random_play(): #on suppose que le jeu par defaut comprend une grille de 4x4 + + #phase d'initialisation du jeu grid_game=init_game(4) print(grid_to_string_with_size_and_theme(grid_game,THEMES["0"],4)) + + #phase de jeu while not is_game_over(grid_game): - d=rd.choice(list_moove_possible(grid_game)) - grid_game=move_grid(grid_game,d) - grid_game=grid_add_new_tile(grid_game) - print(grid_to_string_with_size_and_theme(grid_game,THEMES["0"],4)) - print("\n***********************************\n") + + #pour chaque tour + d=rd.choice(list_moove_possible(grid_game)) #on choisi un mouvement + grid_game=move_grid(grid_game,d) #on le fait + grid_game=grid_add_new_tile(grid_game) #une tuile se crée + print(grid_to_string_with_size_and_theme(grid_game,THEMES["0"],4)) #on affuche le résulat + print("\n***********************************\n") #permet aux différentes grilles d'être plus lisible + + #vérification si le jeu est gagnant ou perdant if did_you_win(grid_game): print("CONGRATS ! YOU WON !!!") else : print ("YOU FAIL, TRY AGAIN") return() -random_play() +#TEST : random_play()