Grille.js

import { Pixel } from "./Pixel.js";
/**
 * @author Adrien Hiribarren Touya adrien64250@yahoo.com
 * @date 14/11/2023
 * Classe représentant une Grille.
 */
export class Grille {
    // ATTRIBUTS
    /**
     * Hauteur de la Grille.
     */
    #_hauteur;
    /**
     * Largeur de la Grille.
     */
    #_largeur;
    /**
     * Matrice de Pixel de la Grille.
     */
    #_pixels;

    // CONSTRUCTEUR
    /**
     * Crée une nouvelle Grille avec (par défaut) une hauteur, une largeur et une matrice de Pixel.
     * @param {int} h La hauteur de la Grille.
     * @param {int} l La largeur de la Grille.
     * @param {Pixel[][]} pixels La matrice de Pixel de la Grille. 
     */
    constructor(h, l) {
        this.#_hauteur = h;
        this.#_largeur = l;
        // Initialisation de la matrice.
        let pixels = [];
        for (let i = 0; i < h; i++) {
            pixels[i] = [];
            for (let j = 0; j < l; j++) {
                pixels[i][j] = null;
            }
        }
        this.#_pixels = pixels;
    }

    // GETTERS & SETTERS
    /** 
     * Retourne la hauteur de la Grille.
     * @returns {int} La hauteur de la Grille.
     */
    getHauteur() { return this.#_hauteur; }
    /**
     * Retourne la largeur de la Grille.
     * @returns {int} La largeur de la Grille.
     */
    getLargeur() { return this.#_largeur; }

    /**
     * Définit la hauteur de la Grille.
     * @param {int} h La nouvelle hauteur de la Grille.
     */
    setHauteur(h) { this.#_hauteur = h; }
    /**
     * Définit la largeur de la Grille.
     * @param {int} l La nouvelle largeur de la Grille.
     */
    setLargeur(l) { this.#_largeur = l; }

    // MÉTHODES
    /**
     * Retourne le Pixel à la position (x, y) de la Grille.
     * @param {int} x La position en x du Pixel.
     * @param {int} y La position en y du Pixel.
     * @returns {Pixel} Le Pixel à la position (x, y) de la Grille.
     */
    getPixelAt(x, y) {
        return this.#_pixels[y][x];
    }

    /**
     * Définit un Pixel pix en position (x, y).
     * @param {int} x La position en x du Pixel.
     * @param {int} y La position en y du Pixel.
     * @param {Pixel} pix Le Pixel à attribuer en position (x, y)
     */
    setPixelAt(x, y, pix) {
        this.#_pixels[y][x] = pix;
    }

    /**
     * Déseléctionne tous les Pixels de la Grille.
     */
    deselectAll() {
        for (let y = 0; y < this.#_hauteur; y++) {
            for (let x = 0; x < this.#_largeur; x++) {
                this.#_pixels[y][x].setSelected(false);
            }
        }
    }

}