Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

import random 

 

 

def create_grid(taille): 

"""Crée une grille vide et l'initialise avec une tuile 2 et une 4""" 

game_grid = [] 

for i in range(0,taille): 

game_grid.append([' ']*taille) 

return game_grid 

 

def get_value_new_tile() : 

"""On renvoie 9 fois sur 10 une tuile de valeur 2 et sinon une tuile de valeur 4""" 

tamponchoix = random.random() 

if random.random() < 0.9 : 

return "2" 

else : 

return "4" 

 

def grid_add_new_tile(game_grid,taille, forceValue = "-1") : 

"""ajoute une nouvelle tuile de valeur aléatoire""" 

game_grid = normalize_grid_value(game_grid) 

if not "0" in grid_get_all_tiles(game_grid) : 

"""On vérifie qu'il y a au moins une place de libre""" 

return game_grid 

newtilex, newtiley = get_new_position(game_grid) 

if forceValue == "-1" : 

"""Ici forceValue permet de décider de la valeur à attribuer à la tuile, par défaut on donne une valeur aléatoire à la tuile""" 

game_grid[newtilex][newtiley] = get_value_new_tile() 

else : 

game_grid[newtilex][newtiley] = forceValue 

return game_grid 

 

 

def grid_get_all_tiles(game_grid) : 

"""Renvoie une liste de toutes les tuiles, ligne par ligne, de la grille""" 

game_grid = normalize_grid_value(game_grid) 

all_tiles_list = [] 

for row in game_grid : 

for i in range(len(row)) : 

"""On transforme les vides en "0" """ 

if row[i] == " " : 

row[i] = "0" 

all_tiles_list += row 

game_grid = normalize_grid_value(game_grid) 

return all_tiles_list 

 

def get_empty_tiles_positions(game_grid) : 

"""On renvoie la liste des coordonnées des tuiles vides""" 

game_grid = normalize_grid_value(game_grid) 

taille = len(game_grid) 

empty_tiles_positions_list = [] 

for i in range(taille) : 

for j in range(taille) : 

if game_grid[i][j] == " " : 

empty_tiles_positions_list.append((i,j)) 

return empty_tiles_positions_list 

 

def normalize_grid_value(game_grid) : 

"""Renvoie une grille dont toutes les valeurs sont normalisées de la forme "x" avec x un nombre et " " pour une tuile vide""" 

taille = len(game_grid) 

for i in range(taille) : 

for j in range(taille) : 

if game_grid[i][j] == 0 or game_grid[i][j] == "0" : 

game_grid[i][j] = " " 

else : 

game_grid[i][j] = str(game_grid[i][j]) 

return game_grid 

 

def get_new_position(game_grid) : 

"""On récupère la liste des positions des tuiles vides et on sélectionne une telle position au hasard que l'on renvoie""" 

game_grid = normalize_grid_value(game_grid) 

empty_tiles_positions_list = get_empty_tiles_positions(game_grid) 

number_empty_tiles = len(empty_tiles_positions_list) 

random_empty_tile = random.randint(0,number_empty_tiles-1) #On choisit la position au hasard 

return empty_tiles_positions_list[random_empty_tile] 

 

def grid_get_value(game_grid,x,y) : 

"""on renvoie la valeur de la grille aux coordonnées données""" 

game_grid = normalize_grid_value(game_grid) 

return game_grid[x][y] 

 

def init_game(taille) : 

game_grid = create_grid(taille) 

game_grid = grid_add_new_tile(game_grid,taille, forceValue = "2") 

game_grid = grid_add_new_tile(game_grid,taille, forceValue = "4") 

return game_grid 

"""Pour faire un test coverage la commande est python3 -m pytest --cov=2048game --cov-report html"""