summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormanzerbredes <loic.guegan_secondary@yahoo.fr>2015-05-02 19:26:01 +0200
committermanzerbredes <loic.guegan_secondary@yahoo.fr>2015-05-02 19:26:01 +0200
commit36d033caeebd8ccbddf711825a5a96e3930438be (patch)
tree07fb279618fdae06aaf148368b607a78ac6823b3
parent27d646af15bc9147a141aced8cebd30668de9a8e (diff)
Make clean code
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/Model/CMakeLists.txt7
-rw-r--r--src/Model/Game.cpp54
-rw-r--r--src/Model/Game.hpp8
-rw-r--r--src/Model/Grid.cpp187
-rw-r--r--src/Model/Grid.hpp22
-rw-r--r--src/main.cpp32
7 files changed, 93 insertions, 221 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index da444d2..ed13eb5 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -12,7 +12,7 @@ set_property(GLOBAL PROPERTY SFML_INCLUDE_DIR "${SFML_INCLUDE_DIR}")
#Include "Includes" and "Libraries"
include_directories(${SFML_INCLUDE_DIR})
-target_link_libraries(2P11 ${SFML_LIBRARIES} Model ConsoleController)
+target_link_libraries(2P11 ${SFML_LIBRARIES} Model )
add_subdirectory(./Model)
-add_subdirectory(./Controllers/)
+#add_subdirectory(./Controllers/)
diff --git a/src/Model/CMakeLists.txt b/src/Model/CMakeLists.txt
index 80ea875..888589e 100644
--- a/src/Model/CMakeLists.txt
+++ b/src/Model/CMakeLists.txt
@@ -1,7 +1,2 @@
#Make Model lib
-add_library(Model Grid.cpp Game.cpp )
-
-target_link_libraries(Model Elements)
-
-add_subdirectory(./Elements)
-
+add_library(Model Grid.cpp Game.cpp)
diff --git a/src/Model/Game.cpp b/src/Model/Game.cpp
index 7dc32c6..32482b7 100644
--- a/src/Model/Game.cpp
+++ b/src/Model/Game.cpp
@@ -1,59 +1,9 @@
#include "Game.hpp"
-Game::Game()
-{
- m_grid = new Grid(4);
-}
-
-Game::~Game()
-{
- delete m_grid;
-}
-
-
-
-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<StringElement>(std::to_string(2)));
+Game::Game() : m_grid(){
}
-void Game::swipeRight(){
- m_grid->swipeRight();
-}
-bool Game::isOver()
-{
- if(m_grid->gridIsFull()){
- for(int i=0;i<m_grid->getNRows();i++){
-
- for(int j=0;j<m_grid->getNCols()-1;j++){
- if(m_grid->getCell(i,j)->equals(m_grid->getCell(i,j+1))){
- return false;
- }
- }
- }
-
- }
- else {
- return false;
- }
- return true;
+Game::~Game(){
}
diff --git a/src/Model/Game.hpp b/src/Model/Game.hpp
index c1c636a..ee3a6a9 100644
--- a/src/Model/Game.hpp
+++ b/src/Model/Game.hpp
@@ -8,24 +8,18 @@
* Date : 29/04/2015 */
#include <iostream>
-#include <cstdlib>
#include <string>
-#include "./Elements/StringElement.hpp"
#include "Grid.hpp"
class Game
{
private:
- Grid *m_grid;
+ Grid m_grid;
public:
Game();
~Game();
- void pop();
- void showGrid();
- void swipeRight();
- bool isOver();
};
#endif
diff --git a/src/Model/Grid.cpp b/src/Model/Grid.cpp
index 6fc41c6..92837f6 100644
--- a/src/Model/Grid.cpp
+++ b/src/Model/Grid.cpp
@@ -1,161 +1,100 @@
#include "Grid.hpp"
//Constructor
-Grid::Grid(int size)
-{
- //Create Vector
- m_size = size;
- m_table = std::vector<std::vector<Cell<StringElement>*> >(size);
-
- //Init all of line and cell
- for(int i = 0 ; i < size ; i++)
- {
- m_table[i] = std::vector<Cell<StringElement>*>(size);
- for (int j = 0 ; j < size ; j++)
- {
- Cell<StringElement> * cell = new Cell<StringElement>("");
- m_table[i][j] = cell;
+Grid::Grid(): m_size(4), m_grid(4){
+
+ //Init all cells
+ for(int i=0;i<m_size;i++){
+ for(int j=0;j<m_size;j++){
+ m_grid.at(i).push_back(0);
}
}
-}
-//Destructor
-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()
-{
- std::cout << "_________________" << std::endl;
- std::cout << std::endl;
- for(int i = 0 ; i < m_size ; i++)
- {
- std::cout << "|";
- for(int j = 0 ; j < m_size ; j++)
- {
- std::cout << " " << m_table[i][j]->description() << " |";
- }
- std::cout << std::endl;
-
- if (i != m_size -1)
- std::cout << std::endl;
- }
- std::cout << "_________________" << std::endl;
+//Destructor
+Grid::~Grid(){
}
-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;
-}
+std::string Grid::description(){
-bool Grid::gridIsFull()
-{
+ //Init stringstream description
+ std::stringstream description;
- for (int i = 0; i < m_size ; i++)
- {
- for (int j = 0; j < m_size ; j++)
- {
- if (m_table[i][j]->isEmpty())
- return false;
+ //Start to write description
+ description << "-----------------" << std::endl;
+ for(int i=0;i<m_size;i++){
+ for(int j=0;j<m_size;j++){
+ if(m_grid.at(i).at(j) == 0)
+ description << "| " << " " << " ";
+ else
+ description << "| " << m_grid.at(i).at(j) << " ";
}
+ description << "|";
+ description << std::endl;
}
+ description << "-----------------" << std::endl << std::endl;
- return true;
+ //Return description
+ return description.str();
}
-void Grid::setCell(int i, int j, Cell<StringElement> *cell)
-{
- if (i >= 0 && i < m_size && j >= 0 && j < m_size)
- {
- delete m_table[i][j];
- m_table[i][j] = cell;
- }
+bool Grid::isEmpty(int i, int j){
+ if(m_grid.at(i).at(j) == 0)
+ return true;
+ return false;
}
-Cell<StringElement>* Grid::getCell(short i, short j){
- return m_table[i][j];
-}
+std::tuple<int, int> Grid::getRandomEmptyCellCoord(){
-int Grid::getNRows(){
- return m_table[0].size();
-}
+ //Init list of candidate
+ std::vector<std::tuple<int, int> > candidates;
-int Grid::getNCols(){
- return m_table.size();
-}
+ //Construct list of candidates
+ for(int i=0;i<m_size;i++){
+ for(int j=0;j<m_size;j++){
+ if(this->isEmpty(i,j)){
+ std::tuple<int, int> currentCandidate(i,j);
+ candidates.push_back(currentCandidate);
+ }
+ }
+ }
+ //If no candidate available
+ if(candidates.size() == 0)
+ return std::tuple<int, int>(-1, -1);
-std::vector<Cell<StringElement>* > Grid::swipeLine(std::vector<Cell<StringElement>* > line){
- std::vector<Cell<StringElement>*> newLine = std::vector<Cell<StringElement>*>(4);
+ //Select the candidates
+ int winnerIs(rand() % candidates.size());
+ //Return the candidate
+ return candidates.at(winnerIs);
- for (int j = 0 ; j < 3 ; j++)
- {
- if(j>3)
- break;
- Cell<StringElement> * cell = new Cell<StringElement>(line.at(j)->getElementValue());
- Cell<StringElement> * cellp1 = new Cell<StringElement>(line.at(j+1)->getElementValue());
+}
- int a=atoi(cell->getElementValue().c_str());
- int ap1=atoi(cellp1->getElementValue().c_str());
- std::string s=std::to_string(a);
- std::string sp1=std::to_string(ap1);
- if(a==ap1 && a!=0){
- s="";
- sp1=std::to_string(a+ap1);
- if(ap1 == 0)
- newLine[j+1] = new Cell<StringElement>("");
- else
- newLine[j+1] = new Cell<StringElement>(sp1);
- newLine[j] = new Cell<StringElement>(s);
- j++;
- }
- else{
- if(ap1==0)
- newLine[j+1] = new Cell<StringElement>("");
- else
- newLine[j+1] = new Cell<StringElement>(sp1);
- if(a==0)
- newLine[j] = new Cell<StringElement>("");
- else
- newLine[j] = new Cell<StringElement>(s);
+//Change value of cell
+bool Grid::setCell(std::tuple<int, int> coord, int value){
+ int i=std::get<0>(coord);
+ int j=std::get<1>(coord);
- }
- delete cell;
- delete cellp1;
-
+ if(i>=0 && i<m_size && j>=0 && j<m_size){
+ m_grid.at(i).at(j)=value;
+ return true;
}
+ return false;
+}
+
+//Another setCell method
+bool Grid::setCell(int i, int j, int value){
+ std::tuple<int, int> coord(i,j);
+ return this->setCell(coord, value);
+}
- for (int j = 0 ; j < 3 ; j++){
- if(!newLine[j]->isEmpty()){
- if(newLine[j+1]->isEmpty()){
- newLine[j+1]=new Cell<StringElement>(newLine[j]->getElementValue());
- newLine[j]=new Cell<StringElement>("");
- }
- }
- }
- for(int i=0; i<4;i++){
- std::cout << "|" << newLine[i]->description() << "|";
- }
- std::cout << "done";
- return newLine;
-}
-void Grid::swipeRight(){
- std::vector<Cell<StringElement>*> a=this->swipeLine(m_table.at(0));
- m_table[0]=a;
-}
diff --git a/src/Model/Grid.hpp b/src/Model/Grid.hpp
index 810cb9b..6942188 100644
--- a/src/Model/Grid.hpp
+++ b/src/Model/Grid.hpp
@@ -8,32 +8,26 @@
* Date : 29/04/2015 */
#include <iostream>
+#include <sstream>
#include <vector>
-
-//#include "ModelConstants.hpp"
-#include "Cell.hpp"
-#include "./Elements/StringElement.hpp"
+#include <tuple>
class Grid
{
private:
int m_size;
- std::vector<std::vector<Cell<StringElement>*> > m_table;
+ std::vector<std::vector<int> > m_grid;
public:
- Grid(int size);
+ Grid();
~Grid();
- void show();
+ std::string description();
bool isEmpty(int i, int j);
- bool gridIsFull();
- int getNRows();
- int getNCols();
- std::vector<Cell<StringElement>* > swipeLine(std::vector<Cell<StringElement>* > line);
- void swipeRight();
- void setCell(int i, int j, Cell<StringElement> *cell);
- Cell<StringElement>* getCell(short i, short j);
+ std::tuple<int, int> getRandomEmptyCellCoord();
+ bool setCell(std::tuple<int, int> coord, int value);
+ bool setCell(int i, int j, int value);
};
diff --git a/src/main.cpp b/src/main.cpp
index 24a6af6..a7abcae 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -3,14 +3,13 @@
#include <iostream>
#include <string>
#include <time.h>
+#include <tuple>
//----------------------
//----- Personnal include -----
#include "./Model/Grid.hpp"
-#include "./Controllers/ConsoleController/ConsoleController.hpp"
//-----------------------------
-#include "./Model/Cell.hpp"
//#include "./Model/Elements/StringElement.hpp"
//----- Start -----
@@ -19,28 +18,29 @@
int main()
{
- Cell<StringElement> *cell1 = new Cell<StringElement>("");
- Cell<StringElement> *cell2 = new Cell<StringElement>("i");
-
-
- if(cell2->isEmpty()){
- std::cout << "Empty" << std::endl;
- }
- else{
- std::cout << "Not empty" << std::endl;
- }
-
//Init random
srand(time(NULL));
+
+ Grid a;
+ std::cout << a.description();
+ std::cout << std::get<0>(a.getRandomEmptyCellCoord()) << ","<< std::get<1>(a.getRandomEmptyCellCoord());
+ while(1){
+
+ std::tuple<int, int> c(a.getRandomEmptyCellCoord());
+ a.setCell(1,2, 15);
+ std::cout << a.description();
+ std::string chaine;
+ std::cin >> chaine;
+ }
//Init console controller
- ConsoleController * controller = new ConsoleController();
+ //ConsoleController * controller = new ConsoleController();
//Launch game
- controller->play();
+ //controller->play();
//Remove controlelr
- delete controller;
+ //delete controller;
return 0;
}