diff --git a/.gitignore b/.gitignore index 5609314..e701c63 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ CMakeCache.txt 2P11 clear.sh *.vim +game_backup.xcf diff --git a/CMakeLists.txt b/CMakeLists.txt index b47e302..01383c5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,14 +1,31 @@ +#==================== PREPROCESSOR DEFINITION ==================== + +#Define which controller use. +#Avalaible controllers are: +# - CONSOLECONTROLLER +# - SFMLCONTROLLER +add_definitions(-DSFMLCONTROLLER) +add_definitions(-DLIVESKINNING) + + + + +#==================== START CMAKE ==================== + + #Defined project name project(2P11) #Assign Modules path set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FGS} -std=c++11") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FGS} -std=c++11 -lpthread") + #Defined project VERSION set(VERSION_MAJOR 0) set(VERSION_MINOR 1) set(VERSION_REV 0) set(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REV}") +set( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) #Minimum cmake VERSION cmake_minimum_required(VERSION 2.6) diff --git a/src/skin/original/Pragmatica-Medium.ttf b/bin/fonts/Pragmatica-Medium.ttf similarity index 100% rename from src/skin/original/Pragmatica-Medium.ttf rename to bin/fonts/Pragmatica-Medium.ttf diff --git a/bin/skin/devil/game.png b/bin/skin/devil/game.png new file mode 100644 index 0000000..2c9f5c4 Binary files /dev/null and b/bin/skin/devil/game.png differ diff --git a/bin/skin/devil/skin.txt b/bin/skin/devil/skin.txt new file mode 100644 index 0000000..d91f098 --- /dev/null +++ b/bin/skin/devil/skin.txt @@ -0,0 +1,31 @@ + +050 050 050 #Background MainWindow +100 100 100 #Background cells +123 0 9 #Background grid color +19 110 101 #2 and 4 font color +143 122 102 #Button color +4 15 58 #other number font Color +238 228 218 186 #Game over color bg + +#Skin 2 et le 4 +238 228 218 #2 +237 224 200 #4 + +#Skin 8 à 64 +242 177 121 #8 +245 149 99 #16 +246 124 95 #32 +246 94 59 #64 + + + +#Skin 128 à 2048 +237 207 114 #128 +237 204 97 #256 +237 200 80 #512 +237 197 63 #1024 +238 194 46 #2048 + +#Skin for other number +60 58 50 #More than 2048 + diff --git a/bin/skin/original/game.png b/bin/skin/original/game.png new file mode 100644 index 0000000..a2db074 Binary files /dev/null and b/bin/skin/original/game.png differ diff --git a/bin/skin/original/skin.txt b/bin/skin/original/skin.txt new file mode 100644 index 0000000..bd00735 --- /dev/null +++ b/bin/skin/original/skin.txt @@ -0,0 +1,31 @@ + +250 248 239 #Background MainWindow +205 192 180 #Background cells +187 173 160 #Background grid color +119 110 101 #2 and 4 font color +143 122 102 #Button color +249 246 242 #other number font Color +238 228 218 186 #Game over color bg + +#Skin 2 et le 4 +238 228 218 #2 +237 224 200 #4 + +#Skin 8 à 64 +242 177 121 #8 +245 149 99 #16 +246 124 95 #32 +246 94 59 #64 + + + +#Skin 128 à 2048 +237 207 114 #128 +237 204 97 #256 +237 200 80 #512 +237 197 63 #1024 +238 194 46 #2048 + +#Skin for other number +60 58 50 #More than 2048 + diff --git a/bin/skin/skinMaker/game.xcf b/bin/skin/skinMaker/game.xcf new file mode 100644 index 0000000..b67bae2 Binary files /dev/null and b/bin/skin/skinMaker/game.xcf differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e7b7f73..6b4b21f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -17,3 +17,5 @@ target_link_libraries(2P11 ${SFML_LIBRARIES} Model ConsoleController View SFMLCo add_subdirectory(./Model) add_subdirectory(./Controllers/) add_subdirectory(./View/) +add_subdirectory(./Helpers/) + diff --git a/src/Controllers/ConsoleController/ConsoleController.cpp b/src/Controllers/ConsoleController/ConsoleController.cpp index 57f626f..bcad873 100644 --- a/src/Controllers/ConsoleController/ConsoleController.cpp +++ b/src/Controllers/ConsoleController/ConsoleController.cpp @@ -1,7 +1,7 @@ #include "./ConsoleController.hpp" #include #include "../../Helpers/Keyboard.hpp" - +#include "../../Model/Stats.hpp" //==================== Constructor and Destructor ==================== @@ -31,7 +31,7 @@ void ConsoleController::run() m_game.popRandomNumber(); //First cout stats - this->coutStats(); + this->coutStats(m_game.getStats()); //First cout grid m_game.coutGrid(); @@ -47,7 +47,7 @@ void ConsoleController::run() bool moveDone=m_game.swipe(keyPress); //Cout stats - this->coutStats(); + this->coutStats(m_game.getStats()); //Cout grid m_game.coutGrid(); @@ -55,7 +55,7 @@ void ConsoleController::run() } //Last cout stats - this->coutStats(); + this->coutStats(m_game.getStats()); //Last cout grid m_game.coutGrid(); @@ -122,8 +122,8 @@ kbdh::Direction ConsoleController::waitArrowKeyPress() //Cout the stats of the game -void ConsoleController::coutStats(){ +void ConsoleController::coutStats(Stats stats){ - std::cout << std::endl << "Score : " << m_game.getScore() << std::endl; - std::cout << "Nombre de coups : " << m_game.getNbMove() << std::endl; + std::cout << std::endl << "Score : " << stats.getScore() << std::endl; + std::cout << "Nombre de coups : " << stats.getNbMove() << std::endl; } diff --git a/src/Controllers/ConsoleController/ConsoleController.hpp b/src/Controllers/ConsoleController/ConsoleController.hpp index f3e9952..67a8483 100644 --- a/src/Controllers/ConsoleController/ConsoleController.hpp +++ b/src/Controllers/ConsoleController/ConsoleController.hpp @@ -24,7 +24,7 @@ class ConsoleController //Helpers void run(); - void coutStats(); + void coutStats(Stats stats); }; #endif diff --git a/src/Controllers/SFMLController/SFMLController.cpp b/src/Controllers/SFMLController/SFMLController.cpp index 1c21753..e2016b4 100644 --- a/src/Controllers/SFMLController/SFMLController.cpp +++ b/src/Controllers/SFMLController/SFMLController.cpp @@ -3,27 +3,31 @@ +//==================== Constructor and Destructor ==================== - +//Constructor SFMLController::SFMLController() : m_game(), m_MainWindow(600,800, "2P11"){ } - +//Destructor SFMLController::~SFMLController(){ } - - +//Run controller void SFMLController::run(){ + //Init keypress kbdh::Direction keyPress; + //First pop m_game.popRandomNumber(); + + //Start game while(m_MainWindow.isOpen()){ - + //Check event sf::Event event; while (m_MainWindow.pollEvent(event)) { @@ -54,71 +58,16 @@ void SFMLController::run(){ } + //Clear window m_MainWindow.clearBG(); - //m_game.swipe(kbdh::Direction::Left); - std::vector > aaa=m_game.getGrid(); - m_MainWindow.drawGame(aaa,m_game.isOver(), m_game.getStats()); + + //Draw the game + m_MainWindow.drawGame(m_game.getGrid(),m_game.isOver(), m_game.getStats()); + + //Display the changements m_MainWindow.display(); - //keyPress=this->waitArrowKeyPress(); - m_game.swipe(keyPress); } } - -//Wait for keypress and return the keyPress. -kbdh::Direction SFMLController::waitArrowKeyPress() -{ - //Initialise keyPress - kbdh::Direction keyPress; - - //White space to remove arrows print by the terminal - std::string spaces=" "; - - //Wait for keypress - while(1){ - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) - { - keyPress=kbdh::Left; - while(sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) - { - //Wait for release and try to remove arrow printed characters - std::cout << "\r" << spaces; - } - break; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) - { - keyPress=kbdh::Right; - while(sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) - { - //Wait for release and try to remove arrow printed characters - std::cout << "\r" << spaces; - } - break; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) - { - keyPress=kbdh::Up; - while(sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) - { - //Wait for release and try to remove arrow printed characters - std::cout << "\r" << spaces; - } - break; - } - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) - { - keyPress=kbdh::Down; - while(sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) - { - //Wait for release and try to remove arrow printed characters - std::cout << "\r" << spaces; - } - break; - } - } - - return keyPress; -} diff --git a/src/Controllers/SFMLController/SFMLController.hpp b/src/Controllers/SFMLController/SFMLController.hpp index 0bb0eea..a695131 100644 --- a/src/Controllers/SFMLController/SFMLController.hpp +++ b/src/Controllers/SFMLController/SFMLController.hpp @@ -1,26 +1,31 @@ - +#ifndef __SFMLCONTROLLER__ +#define __SFMLCONTROLLER__ #include #include + #include +#include + #include "../../View/MainWindow.hpp" #include "../../Model/Game.hpp" #include "../../Helpers/Keyboard.hpp" -#include +#include "../../Helpers/Skin.hpp" + + class SFMLController{ private: MainWindow m_MainWindow; Game m_game; - - public: SFMLController(); ~SFMLController(); - kbdh::Direction waitArrowKeyPress(); void run(); }; + +#endif diff --git a/src/Helpers/CMakeLists.txt b/src/Helpers/CMakeLists.txt new file mode 100644 index 0000000..bde671e --- /dev/null +++ b/src/Helpers/CMakeLists.txt @@ -0,0 +1,3 @@ +#Make Model lib + +add_subdirectory(./Skin/) diff --git a/src/Helpers/Skin.hpp b/src/Helpers/Skin.hpp new file mode 100644 index 0000000..4d020c8 --- /dev/null +++ b/src/Helpers/Skin.hpp @@ -0,0 +1,19 @@ +#include +#include +#include +#include +#include +#include + + +namespace skin{ + + std::vector loadSkin(std::string skinName); + std::vector loadShader(std::string skinName); + + std::vector removeComments(std::vector linesVector); + + bool containOnlySpace(std::string line); + + std::vector extractRGBA(std::string line); +} diff --git a/src/Helpers/Skin/CMakeLists.txt b/src/Helpers/Skin/CMakeLists.txt new file mode 100644 index 0000000..8ad7f17 --- /dev/null +++ b/src/Helpers/Skin/CMakeLists.txt @@ -0,0 +1 @@ +add_library(Skin Skin.cpp) diff --git a/src/Helpers/Skin/Skin.cpp b/src/Helpers/Skin/Skin.cpp new file mode 100644 index 0000000..6b36295 --- /dev/null +++ b/src/Helpers/Skin/Skin.cpp @@ -0,0 +1,167 @@ +#include "../Skin.hpp" + + + +std::vector skin::loadShader(std::string skinName){ + + std::vector skinLoaded; + + std::ifstream skinFile("./bin/skin/"+skinName+"/skin.txt"); + + + try{ + if(!skinFile.is_open()) + throw 1; + + } + catch(int code){ + + std::cout << "Failed to open skin " + skinName + "check the location and the permissions !"; + exit(code); + } + + + std::string line; + std::vector linesVector; + + while (std::getline(skinFile, line)) + { + if(!line.empty() && !skin::containOnlySpace(line)) + linesVector.push_back(line); + } + + linesVector=skin::removeComments(linesVector); + + for(int i=0;i rgba; + rgba=skin::extractRGBA(linesVector.at(i)); + if(rgba.size()==3) + skinLoaded.push_back(sf::Color(rgba.at(0), rgba.at(1), rgba.at(2))); + else + skinLoaded.push_back(sf::Color(rgba.at(0), rgba.at(1), rgba.at(2),rgba.at(3))); + } + + return skinLoaded; +} + +std::vector skin::removeComments(std::vector linesVector){ + + std::vector linesWitouthCom; + + for(int i=0;i skin::extractRGBA(std::string line){ + std::vector rgba; + + std::string numberFound; + + int start=0; + try { + for(int j=0;j<3;j++){ + for(int i=start;i='0' && ch <='9'){ + numberFound.push_back(ch); + } + else if(ch==' ' && numberFound.size() > 0){ + start=i; + break; + } + } + rgba.push_back(std::stoi(numberFound)); + numberFound.clear(); + } + + + if(rgba.size()<3 || rgba.size()>4){ + throw "Invalid thème format"; + exit(1); + } + } + catch(std::string error){ + std::cout << error; + exit(1); + } + + return rgba; + +} +std::vector skin::loadSkin(std::string skinName){ + sf::Image game; + game.loadFromFile("bin/skin/"+skinName+"/game.png"); + + std::vector skin; + + + + //Background + skin.push_back(game.getPixel(0,0)); //Background MainWindow + skin.push_back(game.getPixel(76,243)); //Background cells + skin.push_back(game.getPixel(61,227)); //Background grid color + skin.push_back(game.getPixel(326,58)); //Score bg + skin.push_back(game.getPixel(441,58)); //Best score bg + skin.push_back(sf::Color(143,122,102)); //Button bg + skin.push_back(sf::Color(238,228,218,186)); //Game over color bg + + //Font + skin.push_back(game.getPixel(65,105)); //Title font color + skin.push_back(game.getPixel(348,78)); //Score title fontcolor + skin.push_back(game.getPixel(468,77)); //Best score title font color + skin.push_back(game.getPixel(400,96)); //Score font color + skin.push_back(game.getPixel(484,97)); //Best score font color + skin.push_back(game.getPixel(128,660)); //2 and 4 font color + skin.push_back(game.getPixel(359,661)); //other number font Color + skin.push_back(sf::Color(143,122,102)); //game over font + + //Skin 2 et le 4 + skin.push_back(game.getPixel(70,597)); //2 + skin.push_back(game.getPixel(190,597)); //4 + + //Skin 8 à 64 + skin.push_back(game.getPixel(311,597)); //8 + skin.push_back(game.getPixel(431,597)); //16 + skin.push_back(game.getPixel(71,477)); //32 + skin.push_back(game.getPixel(191,477)); //64 + + //Skin 128 à 2048 + skin.push_back(game.getPixel(312,477)); //128 + skin.push_back(game.getPixel(431,477)); //256 + skin.push_back(game.getPixel(71,358)); //512 + skin.push_back(game.getPixel(191,358)); //1024 + skin.push_back(game.getPixel(311,358)); //2048 + + //Skin for other number + skin.push_back(game.getPixel(432,358)); //More than 2048 + + return skin; +} diff --git a/src/Model/Game.cpp b/src/Model/Game.cpp index 5781f54..58a87fb 100644 --- a/src/Model/Game.cpp +++ b/src/Model/Game.cpp @@ -49,11 +49,6 @@ void Game::coutGrid(){ std::cout << this->description(); } -//Return true if the game is lost. False else. -//bool Game::isOver(){ - //return m_grid.isOver(); -//} - //Pop a random number on the grid void Game::popRandomNumber(){ std::tuple coord(Grid::getRandomEmptyCellCoord()); @@ -69,22 +64,13 @@ void Game::popRandomNumber(){ number=2; } - Grid::setCell(coord, number); } + + //==================== Getters and Setter ==================== //Retrieve the Score Stats Game::getStats(){ return m_stats; } - - -//std::vector > Game::getGrid(){ - //return m_grid.getGrid(); -//} - - -//int Game::maxStrLenInGrid(){ - //return m_grid.maxStrLenInGrid(); -//} diff --git a/src/Model/Game.hpp b/src/Model/Game.hpp index e468176..684c01e 100644 --- a/src/Model/Game.hpp +++ b/src/Model/Game.hpp @@ -9,16 +9,16 @@ #include #include +#include + #include "../Helpers/Keyboard.hpp" #include "Grid.hpp" #include "Stats.hpp" -#include class Game : public Grid { private: //Members - //Grid m_grid; Stats m_stats; public: //Constructor and Destructor @@ -29,12 +29,9 @@ class Game : public Grid bool swipe(kbdh::Direction direction); void coutGrid(); void popRandomNumber(); - //bool isOver(); //Getters and Setters Stats getStats(); - //int maxStrLenInGrid(); - //std::vector > getGrid(); }; #endif diff --git a/src/Model/Grid.cpp b/src/Model/Grid.cpp index 64d8048..a14dd0a 100644 --- a/src/Model/Grid.cpp +++ b/src/Model/Grid.cpp @@ -12,6 +12,22 @@ Grid::Grid(): m_size(4), m_grid(4){ } } //m_grid.at(3).at(0)=2048; + + //m_grid.at(3).at(0)=2; + //m_grid.at(3).at(1)=4; + //m_grid.at(3).at(2)=8; + //m_grid.at(3).at(3)=16; + //m_grid.at(2).at(0)=32; + //m_grid.at(2).at(1)=64; + //m_grid.at(2).at(2)=128; + //m_grid.at(2).at(3)=256; + //m_grid.at(1).at(0)=512; + //m_grid.at(1).at(1)=1024; + //m_grid.at(1).at(2)=2048; + //m_grid.at(1).at(3)=4096; + + + } //Destructor @@ -347,7 +363,7 @@ std::vector Grid::getCol(int col){ return colVect; } - +//Retrieve the grid for the view std::vector > Grid::getGrid(){ return m_grid; } diff --git a/src/Model/Stats.cpp b/src/Model/Stats.cpp index 8bada78..7a473cc 100644 --- a/src/Model/Stats.cpp +++ b/src/Model/Stats.cpp @@ -1,6 +1,10 @@ #include "Stats.hpp" + +//==================== Constructor and destructor ==================== + +//Constructor Stats::Stats() : m_score(0), m_nbMove(0) @@ -8,11 +12,12 @@ Stats::Stats() : } +//Destructor Stats::~Stats(){ } - +//==================== Helpers ==================== void Stats::incScore(int value){ m_score+=value; } @@ -20,7 +25,7 @@ void Stats::incnbMove(){ m_nbMove++; } - +//==================== Getters ==================== int Stats::getScore(){ return m_score; } diff --git a/src/Model/Stats.hpp b/src/Model/Stats.hpp index 49c7356..d55f83f 100644 --- a/src/Model/Stats.hpp +++ b/src/Model/Stats.hpp @@ -4,22 +4,21 @@ #include - - - class Stats{ private: int m_score; int m_nbMove; public: - + //Constructor and destructor Stats(); ~Stats(); + + //Helpers void incScore(int value); void incnbMove(); - + //Getters int getScore(); int getNbMove(); diff --git a/src/View/CMakeLists.txt b/src/View/CMakeLists.txt index 9a13671..81d8b52 100644 --- a/src/View/CMakeLists.txt +++ b/src/View/CMakeLists.txt @@ -1,2 +1,4 @@ #Make Model lib add_library(View ./MainWindow.cpp) + +target_link_libraries(View Skin) diff --git a/src/View/MainWindow.cpp b/src/View/MainWindow.cpp index ea4346d..6152fa3 100644 --- a/src/View/MainWindow.cpp +++ b/src/View/MainWindow.cpp @@ -13,18 +13,15 @@ MainWindow::MainWindow(int width, int height, std::string title): m_gridSize(0,0), m_gridPosition(), m_spaceBetweenCell(15), + m_skinName("original"), m_font() { //Set windows size m_windowSize=RenderWindow::getSize(); - + + //Set default grid position m_gridPosition=sf::Vector2u(0,200); - - - //Load font - m_font.loadFromFile("./src/skin/original/Pragmatica-Medium.ttf"); - //Define original skin: m_skin.push_back(sf::Color(250,248,239)); //Background MainWindow m_skin.push_back(sf::Color(205,192,180)); //Background cells @@ -54,6 +51,9 @@ MainWindow::MainWindow(int width, int height, std::string title): //Skin for other number m_skin.push_back(sf::Color(60,58,50)); //More than 2048 + //Load font + m_font.loadFromFile("./bin/fonts/Pragmatica-Medium.ttf"); + m_skin=skin::loadSkin(m_skinName); } @@ -140,21 +140,22 @@ void MainWindow::drawCell(int x, int y, int value){ text.setFont(m_font); text.setStyle(sf::Text::Bold); text.setCharacterSize(fontSize); - text.setString(valueString); + text.setString(valueString); if(value==2 || value==4) - text.setColor(m_skin.at(3)); + text.setColor(m_skin.at(12)); else - text.setColor(m_skin.at(4)); + text.setColor(m_skin.at(13)); text.setPosition(fontX,fontY); if(value != 0) RenderWindow::draw(text); + } sf::Color MainWindow::getCellColor(int value){ //Id of the first cell color skin - int idStart=7; + int idStart=15; if(value==0){ return m_skin.at(1); @@ -173,7 +174,7 @@ sf::Color MainWindow::getCellColor(int value){ } void MainWindow::drawGameOver(int gridX, int gridY){ - + sf::RectangleShape gridShape(sf::Vector2f(m_gridSize.x,m_gridSize.y)); gridShape.setFillColor(m_skin.at(6)); gridShape.setPosition(gridX,gridY); @@ -187,14 +188,14 @@ void MainWindow::drawATH(Stats stats){ int titleY=m_gridPosition.y-190; - //==================== Draw title ==================== + //==================== Draw title ==================== sf::Text text; text.setFont(m_font); text.setStyle(sf::Text::Bold); text.setCharacterSize(80); - text.setColor(m_skin.at(3)); + text.setColor(m_skin.at(7)); text.setPosition(titleX,titleY); - text.setString("2048"); + text.setString("2048"); RenderWindow::draw(text); @@ -209,19 +210,19 @@ void MainWindow::drawATH(Stats stats){ int bestScoreY=titleY+25; sf::RectangleShape bestScoreShape(sf::Vector2f(bestScoreSizeX,bestScoreSizeY)); - bestScoreShape.setFillColor(m_skin.at(2)); + bestScoreShape.setFillColor(m_skin.at(4)); bestScoreShape.setPosition(bestScoreX,bestScoreY); RenderWindow::draw(bestScoreShape); text.setString("BEST"); text.setPosition(bestScoreX+bestScoreSizeY-scoreAndBestScoreFontSize-5,bestScoreY+12); text.setCharacterSize(scoreAndBestScoreFontSize-5); - text.setColor(m_skin.at(7)); + text.setColor(m_skin.at(9)); RenderWindow::draw(text); //==================== Draw score ==================== - + int scoreX=bestScoreX-bestScoreSizeX-5; int scoreY=bestScoreY; int scoreSizeX=bestScoreSizeX; @@ -229,7 +230,7 @@ void MainWindow::drawATH(Stats stats){ int scoreLength=std::to_string(stats.getScore()).size(); sf::RectangleShape scoreShape(sf::Vector2f(scoreSizeX,scoreSizeY)); - scoreShape.setFillColor(m_skin.at(2)); + scoreShape.setFillColor(m_skin.at(3)); scoreShape.setPosition(scoreX,scoreY); RenderWindow::draw(scoreShape); @@ -237,19 +238,23 @@ void MainWindow::drawATH(Stats stats){ text.setString("SCORE"); text.setPosition(scoreX+scoreSizeY-scoreAndBestScoreFontSize-10,scoreY+12); text.setCharacterSize(scoreAndBestScoreFontSize-5); - text.setColor(m_skin.at(7)); + text.setColor(m_skin.at(8)); RenderWindow::draw(text); text.setString(std::to_string(stats.getScore())); text.setPosition(scoreX+scoreSizeY-((scoreLength+20)/2)-scoreAndBestScoreFontSize+10,scoreY+scoreSizeY - scoreAndBestScoreFontSize-10); text.setCharacterSize(scoreAndBestScoreFontSize); - text.setColor(sf::Color::White); + text.setColor(m_skin.at(10)); RenderWindow::draw(text); } void MainWindow::drawGame(std::vector > grid, bool gameIsOver, Stats stats){ +#ifdef LIVESKINNING + m_skin=skin::loadSkin(m_skinName); +#endif this->drawGrid(grid,gameIsOver); this->drawATH(stats); } + diff --git a/src/View/MainWindow.hpp b/src/View/MainWindow.hpp index 072a7ec..3eacd54 100644 --- a/src/View/MainWindow.hpp +++ b/src/View/MainWindow.hpp @@ -6,10 +6,10 @@ #include #include #include "../Model/Stats.hpp" +#include "../Helpers/Skin.hpp" #include #include - class MainWindow : public sf::RenderWindow{ private: @@ -26,6 +26,8 @@ class MainWindow : public sf::RenderWindow{ sf::Vector2u m_gridPosition; int m_spaceBetweenCell; + std::string m_skinName; + public: MainWindow(int width, int height, std::string title); ~MainWindow(); @@ -39,5 +41,6 @@ class MainWindow : public sf::RenderWindow{ void drawATH(Stats stats); + void MoveCell(); void drawGame(std::vector > grid, bool gameIsOver, Stats stats); }; diff --git a/src/main.cpp b/src/main.cpp index 70f3a6b..92cee05 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,12 +7,12 @@ //----- Personnal include ----- #include "./Controllers/SFMLController/SFMLController.hpp" +#include "./Controllers/ConsoleController/ConsoleController.hpp" //----------------------------- - //----- Start ----- int main() { @@ -20,8 +20,13 @@ int main() srand(time(NULL)); //Init controller +#if defined(CONSOLECONTROLLER) + ConsoleController controller; +#elif defined(SFMLCONTROLLER) SFMLController controller; - +#else +#error Please defined which controller to use in CMakeList.txt +#endif //Run the game controller.run();