156 lines
2.6 KiB
C++
156 lines
2.6 KiB
C++
#include "Grid.hpp"
|
|
|
|
|
|
Grid::Grid(int size)
|
|
{
|
|
m_size = size;
|
|
m_table = std::vector<std::vector<Cell*> >(size);
|
|
for(int i = 0 ; i < size ; i++)
|
|
{
|
|
m_table[i] = std::vector<Cell*>(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));
|
|
}
|
|
}
|
|
}*/
|
|
}
|