Make clean code

This commit is contained in:
manzerbredes 2015-05-02 19:26:01 +02:00
parent 27d646af15
commit 36d033caee
7 changed files with 103 additions and 231 deletions

View file

@ -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/)

View file

@ -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)

View file

@ -1,59 +1,9 @@
#include "Game.hpp"
Game::Game()
{
m_grid = new Grid(4);
Game::Game() : m_grid(){
}
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)));
}
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(){
}

View file

@ -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

View file

@ -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);
Grid::Grid(): m_size(4), m_grid(4){
//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;
//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];
}
Grid::~Grid(){
}
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::string Grid::description(){
//Init stringstream description
std::stringstream description;
//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) << " ";
}
std::cout << std::endl;
if (i != m_size -1)
std::cout << std::endl;
description << "|";
description << std::endl;
}
std::cout << "_________________" << std::endl;
description << "-----------------" << std::endl << std::endl;
//Return description
return description.str();
}
bool Grid::isEmpty(int i, int j)
{
if (i >= 0 && i < m_size && j >= 0 && j < m_size)
return m_table[i][j]->isEmpty();
bool Grid::isEmpty(int i, int j){
if(m_grid.at(i).at(j) == 0)
return true;
return false;
}
bool Grid::gridIsFull()
{
std::tuple<int, int> Grid::getRandomEmptyCellCoord(){
for (int i = 0; i < m_size ; i++)
{
for (int j = 0; j < m_size ; j++)
{
if (m_table[i][j]->isEmpty())
return false;
}
}
//Init list of candidate
std::vector<std::tuple<int, int> > candidates;
return true;
}
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;
}
}
Cell<StringElement>* Grid::getCell(short i, short j){
return m_table[i][j];
}
int Grid::getNRows(){
return m_table[0].size();
}
int Grid::getNCols(){
return m_table.size();
}
std::vector<Cell<StringElement>* > Grid::swipeLine(std::vector<Cell<StringElement>* > line){
std::vector<Cell<StringElement>*> newLine = std::vector<Cell<StringElement>*>(4);
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);
}
delete cell;
delete cellp1;
}
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>("");
//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);
}
}
}
for(int i=0; i<4;i++){
//If no candidate available
if(candidates.size() == 0)
return std::tuple<int, int>(-1, -1);
std::cout << "|" << newLine[i]->description() << "|";
//Select the candidates
int winnerIs(rand() % candidates.size());
//Return the candidate
return candidates.at(winnerIs);
}
//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);
if(i>=0 && i<m_size && j>=0 && j<m_size){
m_grid.at(i).at(j)=value;
return true;
}
std::cout << "done";
return newLine;
return false;
}
void Grid::swipeRight(){
std::vector<Cell<StringElement>*> a=this->swipeLine(m_table.at(0));
m_table[0]=a;
//Another setCell method
bool Grid::setCell(int i, int j, int value){
std::tuple<int, int> coord(i,j);
return this->setCell(coord, value);
}

View file

@ -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);
};

View file

@ -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;
}