2P11/src/Model/Grid.cpp
2015-05-01 10:24:45 +02:00

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));
}
}
}*/
}