diff --git a/media/sound/item.ogg b/media/sound/item.ogg deleted file mode 100644 index 9da2832..0000000 Binary files a/media/sound/item.ogg and /dev/null differ diff --git a/source/game.cpp b/source/game.cpp index f3440a0..016e51c 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -15,9 +15,9 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input) this->input = input; // Crea los objetos - scoreboard = new ScoreBoard(renderer, asset); + scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked); itemTracker = new ItemTracker(); - room = new Room(asset->get(currentRoom), renderer, asset, itemTracker); + room = new Room(asset->get(currentRoom), renderer, asset, itemTracker,&itemsPicked); player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room); eventHandler = new SDL_Event(); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); @@ -27,6 +27,8 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input) // Inicializa variables ticks = 0; ticksSpeed = 15; + playerLives = 9; + itemsPicked = 0; section.name = SECTION_PROG_GAME; section.subsection = SUBSECTION_GAME_PLAY; @@ -239,7 +241,7 @@ bool Game::changeRoom(std::string file) room = nullptr; // Crea un objeto habitación nuevo a partir del fichero - room = new Room(asset->get(file), renderer, asset, itemTracker); + room = new Room(asset->get(file), renderer, asset, itemTracker, &itemsPicked); success = true; } @@ -381,11 +383,13 @@ void Game::checkPlayerAndItems() // Mata al jugador void Game::killPlayer() { + playerLives--; + // Destruye la habitacion y el jugador delete room; delete player; // Crea la nueva habitación y el nuevo jugador - room = new Room(asset->get(currentRoom), renderer, asset, itemTracker); + room = new Room(asset->get(currentRoom), renderer, asset, itemTracker, &itemsPicked); player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room); } \ No newline at end of file diff --git a/source/game.h b/source/game.h index 495ead0..3c641d1 100644 --- a/source/game.h +++ b/source/game.h @@ -40,6 +40,8 @@ private: std::string currentRoom; // Fichero de la habitación actual player_t spawnPoint; // Lugar de la habitación donde aparece el jugador bool debug; // Indica si el modo debug está activo + int playerLives; // Lleva la cuenta de ls vidas restantes del jugador + int itemsPicked; // Lleva la cuenta de los objetos recogidos // Actualiza el juego, las variables, comprueba la entrada, etc. void update(); diff --git a/source/room.cpp b/source/room.cpp index 0304c11..050c14c 100644 --- a/source/room.cpp +++ b/source/room.cpp @@ -4,12 +4,13 @@ #include // Constructor -Room::Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTracker *itemTracker) +Room::Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTracker *itemTracker, int *items) { // Copia los punteros a objetos this->asset = asset; this->renderer = renderer; this->itemTracker = itemTracker; + this->itemsPicked = items; // Crea los objetos texture = new LTexture(); @@ -551,19 +552,10 @@ bool Room::itemCollision(SDL_Rect &rect) delete items[i]; items.erase(items.begin()+i); JA_PlaySound(itemSound); + *itemsPicked = *itemsPicked + 1; collision = true; } } - //for (auto item : items) - //{ - // if (checkCollision(rect, item->getCollider())) - // { - // itemTracker->addItem(name, item->getPos()); - // item->pick(); - // JA_PlaySound(itemSound); - // collision = true; - // } - //} return collision; } \ No newline at end of file diff --git a/source/room.h b/source/room.h index dcd0f89..c4dceb1 100644 --- a/source/room.h +++ b/source/room.h @@ -53,6 +53,7 @@ private: SDL_Renderer *renderer; // El renderizador de la ventana SDL_Texture *mapTexture; // Textura para dibujar el mapa de la habitación JA_Sound itemSound; // Sonido producido al coger un objeto + int *itemsPicked; // Puntero a la cantidad de items recogidos que lleva el juego // Carga las variables desde un fichero bool load(std::string file_path); @@ -71,7 +72,7 @@ private: public: // Constructor - Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTracker *item_tracker); + Room(std::string file_path, SDL_Renderer *renderer, Asset *asset, ItemTracker *item_tracker, int *items); // Destructor ~Room(); diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index bb19e55..407a17d 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -3,11 +3,13 @@ #include // Constructor -ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset) +ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items) { // Obten punteros a objetos this->asset = asset; this->renderer = renderer; + this->lives = lives; + this->items = items; // Reserva memoria para los objetos texture = new LTexture(); @@ -96,7 +98,7 @@ void ScoreBoard::render() const int frame = desp % 4; sprite->setCurrentFrame(frame); - for (int i = 0; i < num_lives; i++) + for (int i = 0; i < *lives; i++) { sprite->setPosX(8 + (16 * i) + desp); index = i % color.size(); @@ -105,7 +107,8 @@ void ScoreBoard::render() } // Escribe los textos - const std::string text = "Items collected 008 Time 88875"; + // const std::string text = "Items collected 008 Time 88875"; + std::string text = "Items collected " + std::to_string(*items / 100) + std::to_string((*items % 100) / 10) + std::to_string(*items % 10) + " Time 88875"; const color_t color = stringToColor("white"); this->text->writeColored(BLOCK, 21 * BLOCK, text, color); } diff --git a/source/scoreboard.h b/source/scoreboard.h index c4fed89..dd5c26e 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -23,10 +23,12 @@ private: std::vector color; // Vector con los colores del objeto int counter; // Contador interno int colorChangeSpeed; // Cuanto mas alto, mas tarda en cambiar de color + int *lives; // Número ara mostrar en el marcador de vidas + int *items; // Número para mostrar en el marcador de items public: // Constructor - ScoreBoard(SDL_Renderer *renderer, Asset *asset); + ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items); // Destructor ~ScoreBoard();