summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormanzerbredes <loic.guegan_secondary@yahoo.fr>2015-04-30 08:43:05 +0200
committermanzerbredes <loic.guegan_secondary@yahoo.fr>2015-04-30 08:43:05 +0200
commit8e94318a960259c3ef2dad472705e6de0b3229df (patch)
treec5964bf1087f310c0d62a9df747502b675b64772 /src
parentad216d86f6573e3575e85f3a2941f6f34b5b1c0e (diff)
parenta3b805ee7b96d1d693c4108f0104650cfd60b565 (diff)
Merge branch 'MakeClass' of github.com:manzerbredes/2P11 into MakeClass
Diffstat (limited to 'src')
-rw-r--r--src/Model/Cell.cpp19
-rw-r--r--src/Model/Cell.hpp4
-rw-r--r--src/Model/Game.cpp54
-rw-r--r--src/Model/Game.hpp29
-rw-r--r--src/Model/Grid.cpp128
-rw-r--r--src/Model/Grid.hpp17
6 files changed, 243 insertions, 8 deletions
diff --git a/src/Model/Cell.cpp b/src/Model/Cell.cpp
index 22eaafe..ba4bbbd 100644
--- a/src/Model/Cell.cpp
+++ b/src/Model/Cell.cpp
@@ -4,7 +4,7 @@
Cell::Cell()
{
- m_value = " ";
+ m_value = ".";
}
Cell::Cell(std::string value)
@@ -18,6 +18,23 @@ Cell::~Cell()
{
}
+// Getters and setters
+
+bool Cell::isEmpty()
+{
+ return (m_value == ".");
+}
+
+std::string Cell::getValue()
+{
+ return m_value;
+}
+
+bool Cell::equals(Cell *otherCell)
+{
+ return (m_value == otherCell->getValue());
+}
+
// Description
std::string Cell::description()
diff --git a/src/Model/Cell.hpp b/src/Model/Cell.hpp
index 7775bf5..badd070 100644
--- a/src/Model/Cell.hpp
+++ b/src/Model/Cell.hpp
@@ -20,6 +20,10 @@ class Cell
Cell(std::string value);
~Cell();
+ bool isEmpty();
+ bool equals(Cell * otherCell);
+ std::string getValue();
+
// Describes the cell in a terminal
std::string description();
diff --git a/src/Model/Game.cpp b/src/Model/Game.cpp
index e69de29..1e24b11 100644
--- a/src/Model/Game.cpp
+++ b/src/Model/Game.cpp
@@ -0,0 +1,54 @@
+#include "Game.hpp"
+
+Game::Game()
+{
+ m_grid = new Grid(4);
+}
+
+Game::~Game()
+{
+ delete m_grid;
+}
+
+void Game::play()
+{
+ while(!m_grid->gridIsFull())
+ {
+ m_grid->show();
+
+ pop();
+ std::cout << std::endl;
+ }
+
+ m_grid->show();
+}
+
+void Game::showGrid()
+{
+ m_grid->show();
+ std::cout << std::endl;
+}
+
+void Game::pop()
+{
+ bool cellChosen = false;
+
+ int i;
+ int j;
+
+ while(!cellChosen)
+ {
+ i = rand() % 4;
+ j = rand() % 4;
+
+ if (m_grid->isEmpty(i,j))
+ cellChosen = true;
+ }
+
+ m_grid->setCell(i, j, new Cell("2"));
+}
+
+bool Game::isOver()
+{
+ return m_grid->gridIsFull();
+} \ No newline at end of file
diff --git a/src/Model/Game.hpp b/src/Model/Game.hpp
new file mode 100644
index 0000000..8dcaf64
--- /dev/null
+++ b/src/Model/Game.hpp
@@ -0,0 +1,29 @@
+#ifndef DEF_GAME
+#define DEF_GAME
+
+/* Game.h
+ * Defines the class Game
+ * A game allows a player to play. It contains a grid and pops numbers
+ * Creators : krilius, manzerbredes
+ * Date : 29/04/2015 */
+
+#include <iostream>
+
+#include "Grid.hpp"
+
+class Game
+{
+ private:
+ Grid * m_grid;
+
+ public:
+ Game();
+ ~Game();
+
+ void play();
+ void pop();
+ void showGrid();
+ bool isOver();
+};
+
+#endif \ No newline at end of file
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));
+ }
+ }
+ }*/
+}
diff --git a/src/Model/Grid.hpp b/src/Model/Grid.hpp
index e3bc888..2a28559 100644
--- a/src/Model/Grid.hpp
+++ b/src/Model/Grid.hpp
@@ -10,17 +10,30 @@
#include <iostream>
#include <vector>
+#include "ModelConstants.hpp"
#include "Cell.hpp"
class Grid
{
private:
- std::vector<std::vector<Cell*> > m_table;
+ int m_size;
+ std::vector<std::vector<Cell*> > m_table;
+
+ void moveUp();
+ void moveDown();
+ void moveLeft();
+ void moveRight();
public:
Grid(int size);
~Grid();
- void afficher();
+ void show();
+
+ bool isEmpty(int i, int j);
+ bool gridIsFull();
+ void setCell(int i, int j, Cell * cell);
+
+ void move(Direction direction);
};