grid.h 1.86 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
\file grid.h
\date 24/04/2021
\author Merwane Bouri
\version 1
\brief Grid

Cette classe représente un réseau de cellules.

        **/

#ifndef GRID_H
#define GRID_H

#include <iostream>
#include <vector>

#include "coord.hpp"

using namespace std;

Merwane Bouri's avatar
Merwane Bouri committed
22
/**
23
\class Grid
Merwane Bouri's avatar
Merwane Bouri committed
24
25
26
27
\brief Représente une grille d'états.

Cette structure représente une grille d'états.
**/
28

29
30
class Structure;

31
32
33
34
35
class Grid{
    int nb_rows;
    int nb_col;
    std::vector<unsigned int> matrix;
public:
Merwane Bouri's avatar
Merwane Bouri committed
36
    //! \brief Constructeur par défaut, avec le nombre de ligne et de colonne souhaités
37
    Grid(size_t l,size_t c);
Merwane Bouri's avatar
Merwane Bouri committed
38
39

    //! \brief Constructeur par copie d'une grille
40
41
    Grid(const Grid& g);

Merwane Bouri's avatar
Merwane Bouri committed
42
43
    //! \brief Retourne le nombre de lignes
    //! \return Retourne le nombre de lignes de la Grille
44
    size_t get_rows() const {return nb_rows;}
Merwane Bouri's avatar
Merwane Bouri committed
45
46
47

    //! \brief Retourne le nombre de colonnes
    //! \return Retourne le nombre de colonnes de la Grille
48
49
    size_t get_col() const{return nb_col;}

Merwane Bouri's avatar
Merwane Bouri committed
50
    //! \brief Initialise la cellule de coordonnée pos à l'état 'state'
51
    void set_cell(Coord pos, unsigned int state)
52
    {
53
54
        int i = pos.y;
        int j = pos.x;
55
56
57
58
        matrix[((i%nb_rows + nb_rows)%nb_rows)*nb_col
               +((j%nb_col+nb_col)%nb_col)]
            =state;
    }
Merwane Bouri's avatar
Merwane Bouri committed
59
60
61

    //! \brief Retourne l'état d'une cellule
    //! \return Retourne l'état d'une cellule de coordonnées pos
62
    unsigned int get_state(Coord pos)const{
63
64
        int i = pos.y;
        int j = pos.x;
65
66
67
68
        return matrix[((i%nb_rows + nb_rows)%nb_rows)*nb_col
                      +((j%nb_col+nb_col)%nb_col)];
    }
    Grid& operator=(const Grid& g);
69
70
71

    //! \brief Retourne une structure représentant le contenu non-nul de la Grid (les cellules d'état != 0), pour un enregistrement dans un fichier par exemple.
    Structure to_structure() const;
72
73
74
75
};
ostream& operator<<(ostream& f, const Grid& g);

#endif // GRID_H