diff options
Diffstat (limited to 'src/Model/Grid.cpp')
| -rw-r--r-- | src/Model/Grid.cpp | 128 |
1 files changed, 123 insertions, 5 deletions
diff --git a/src/Model/Grid.cpp b/src/Model/Grid.cpp index ade3f74..295b9b4 100644 --- a/src/Model/Grid.cpp +++ b/src/Model/Grid.cpp @@ -3,6 +3,7 @@ Grid::Grid(int size) { + m_size = size; m_table = std::vector<std::vector<Cell*> >(size); for(int i = 0 ; i < size ; i++) { @@ -17,18 +18,18 @@ Grid::Grid(int size) Grid::~Grid() { - for(int i = 0 ; i < m_table.size() ; i++) + for(int i = 0 ; i < m_size ; i++) { - for(int j = 0 ; j < m_table[i].size() ; j++) + for(int j = 0 ; j < m_size ; j++) delete m_table[i][j]; } } -void Grid::afficher() +void Grid::show() { - for(int i = 0 ; i < m_table.size() ; i++) + for(int i = 0 ; i < m_size ; i++) { - for(int j = 0 ; j < m_table[i].size() ; j++) + for(int j = 0 ; j < m_size ; j++) { std::cout << m_table[i][j]->description(); } @@ -36,3 +37,120 @@ void Grid::afficher() } } +bool Grid::isEmpty(int i, int j) +{ + if (i >= 0 && i < m_size && j >= 0 && j < m_size) + return m_table[i][j]->isEmpty(); + + return false; +} + +bool Grid::gridIsFull() +{ + bool isFull = true; + + for (int i = 0; i < m_size && isFull; i++) + { + for (int j = 0; j < m_size && isFull; j++) + { + if (m_table[i][j]->isEmpty()) + isFull = false; + } + } + + return isFull; +} + +void Grid::setCell(int i, int j, Cell *cell) +{ + if (i >= 0 && i < m_size && j >= 0 && j < m_size) + { + delete m_table[i][j]; + m_table[i][j] = cell; + } +} + + +void Grid::move(Direction direction) +{ + switch (direction) + { + case Direction::UP: + + break; + + case Direction::DOWN: + break; + + case Direction::LEFT: + break; + + case Direction::RIGHT: + break; + + default: + break; + } +} + +void Grid::moveDown() +{/* + for (int i = 0 ; i < m_size; i++) + { + // If the column is full, check the next column + bool columnIsFull = true; + + for (int j = 0; j < m_size; j++) + { + if (m_table[j][i]->isEmpty()) + { + columnIsFull = false; + break; + } + } + + while (!columnIsFull) + { + // Calculate the first line to merge + int firstLine = m_size - 1; + while (m_table[firstLine][i]->isEmpty() && firstLine > 0) + firstLine--; + if (firstLine == 0) + break; + + // Calculate the second line to merge + int secondLine = firstLine - 1; + while (m_table[secondLine][i]->isEmpty() && secondLine > 0) + secondLine--; + + // If there is only one element, pull it down + if (m_table[secondLine][i]->isEmpty() && firstLine != m_size - 1) + { + Cell * originalCell = m_table[firstLine][i]; + Cell * finalCell = m_table[m_size-1][i]; + + m_table[firstLine][i] = finalCell; + m_table[m_size-1][i] = originalCell; + + break; + } + + // If there is only one element which is at the full bottom, break the loop + if (m_table[secondLine][i]->isEmpty()) + break; + + // If there are two "good" elements, begin the merge process + Cell * cell1 = m_table[firstLine][i]; + Cell * cell2 = m_table[secondLine][i]; + + Cell * mergedCell = NULL; + + // If the two cells are the same, merge them + if (cell1->equals(cell2)) + { + int value = std::stoi(cell1->getValue()); + mergedCell = new Cell(std::to_string(value)); + } + } + }*/ +} |
