#include "Grid.hpp" Grid::Grid(int size) { m_size = size; m_table = std::vector >(size); for(int i = 0 ; i < size ; i++) { m_table[i] = std::vector(size); for (int j = 0 ; j < size ; j++) { Cell * cell = new Cell(); m_table[i][j] = cell; } } } Grid::~Grid() { for(int i = 0 ; i < m_size ; i++) { for(int j = 0 ; j < m_size ; j++) delete m_table[i][j]; } } void Grid::show() { for(int i = 0 ; i < m_size ; i++) { for(int j = 0 ; j < m_size ; j++) { std::cout << m_table[i][j]->description(); } std::cout << std::endl; } } 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 UP: break; case DOWN: break; case LEFT: break; case 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)); } } }*/ }