Source code for jeu2048.subpackages.grid_setup
"""
Module permettant de paramétrer et d'afficher la grille de jeu
"""
import random
import math
[docs]class Couleurs:
"""
Définition des couleurs du terminal
"""
purple = '\033[95m'
blue = '\033[94m'
cyan = '\033[96m'
green = '\033[92m'
yellow = '\033[93m'
red = '\033[91m'
white = '\033[0m'
bold = '\033[1m'
[docs]def init_grid(taille):
"""
Création d'un plateau vide
:param int taille: Taille du plateau
:return: Matrice 2D
:rtype: list[list[int]]
"""
return [[0 for i in range(taille)] for j in range(taille)]
[docs]def max_grid(grid):
"""
Cherche le nombre de digits dans le plus grand nombre du plateau
:param list grid: Matrice 2D
:return: Nombre de digits du maximum de la matrice
:rtype: int
"""
max_n = 0
for i in grid:
if max(i) > max_n:
max_n = max(i)
if max_n > 0:
digits = int(math.log10(max_n))+1
elif max_n == 0:
digits = 1
return digits
[docs]def taille_str_nombre(space_number,i):
"""
Modifie la taille (au sens taille du string) d'un nombre
pour qu'elle convienne à une autre
:param int space_number: Taile final du string
:param str i: Nombre à rallonger
:return: Le même nombre qui correspond à la taille donnée
:rtype: str
"""
iprime = i
count = 0
while len(iprime) < space_number:
iprime += " "
count +=1
return count * " " +i
[docs]def color(i,space_number):
"""
Définit les couleurs à afficher pour les différents nombres possibles
Puissances de 2 jusqu'à 2048
:param int i: Nombre
:param int space_number: Taille du string
:return: String avec les couleurs en fonction de la valeur de i et la taille aqéquates
:rtype: str
"""
nombre = taille_str_nombre(space_number,str(i))
if i == 0:
phrase = f"{Couleurs.white}" + nombre + f"{Couleurs.white}"
if i == 2:
phrase = f"{Couleurs.green}" + nombre + f"{Couleurs.white}"
if i == 4:
phrase = f"{Couleurs.cyan}" + nombre + f"{Couleurs.white}"
if i == 8:
phrase = f"{Couleurs.blue}" + nombre + f"{Couleurs.white}"
if i == 16:
phrase = f"{Couleurs.yellow}" + nombre + f"{Couleurs.white}"
if i == 32:
phrase = f"{Couleurs.red}" + nombre + f"{Couleurs.white}"
if i == 64:
phrase = f"{Couleurs.purple}" + nombre + f"{Couleurs.white}"
if i == 128:
phrase = f"{Couleurs.green}{Couleurs.bold}" + nombre + f"{Couleurs.white}"
if i == 256:
phrase = f"{Couleurs.blue}{Couleurs.bold}" + nombre + f"{Couleurs.white}"
if i == 512:
phrase = f"{Couleurs.yellow}{Couleurs.bold}" + nombre + f"{Couleurs.white}"
if i == 1024:
phrase = f"{Couleurs.red}{Couleurs.bold}" + nombre + f"{Couleurs.white}"
if i == 2048:
phrase = f"{Couleurs.purple}{Couleurs.bold}" + nombre + f"{Couleurs.white}"
return phrase
[docs]def show_grid(grid):
"""
Affichage du plateau dans le terminal
:param list grid: Matrice 2D
:return: Affiachge du plateau dans le terminal
"""
space_number = max_grid(grid)
paragraphe = "\n"
for i in grid:
phrase = " "
for j in i:
phrase += str(color(j,space_number)) + " "
paragraphe += phrase + "\n"
print(paragraphe)
[docs]def random_grid(grid):
"""
Placmement d'un 2 à 80% et d'un 4 à 20% de chance
:param list grid: Matrice 2D
:return: Plateau initial avec un 0 changé en 2 (80%) ou 4 (20%)
:rtype: list[list[int]]
"""
coord = []
for indx_i, i in enumerate(grid):
for indx_j, j in enumerate(i):
if j == 0:
coord.append([indx_i,indx_j])
proba = random.uniform(0,1)
if proba <= 0.8:
chiffre = 2
else:
chiffre = 4
coord_random = random.randint(0, len(coord)-1)
grid[coord[coord_random][0]][coord[coord_random][1]] = chiffre
return grid