summaryrefslogtreecommitdiff
path: root/src/Model/Grid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Model/Grid.cpp')
-rw-r--r--src/Model/Grid.cpp128
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));
+ }
+ }
+ }*/
+}