forked from jaildesigner-jailgames/jaildoctors_dilemma
Trabajando en el marcador
This commit is contained in:
@@ -15,3 +15,10 @@ speed=8
|
|||||||
loop=0
|
loop=0
|
||||||
frames=0,1,2,3
|
frames=0,1,2,3
|
||||||
[/animation]
|
[/animation]
|
||||||
|
|
||||||
|
[animation]
|
||||||
|
name=walk_menu
|
||||||
|
speed=50
|
||||||
|
loop=0
|
||||||
|
frames=0,1,2,3
|
||||||
|
[/animation]
|
||||||
@@ -15,6 +15,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input)
|
|||||||
this->input = input;
|
this->input = input;
|
||||||
|
|
||||||
// Crea los objetos
|
// Crea los objetos
|
||||||
|
scoreboard = new ScoreBoard(renderer, asset);
|
||||||
itemTracker = new ItemTracker();
|
itemTracker = new ItemTracker();
|
||||||
room = new Room(asset->get(currentRoom), renderer, asset, itemTracker);
|
room = new Room(asset->get(currentRoom), renderer, asset, itemTracker);
|
||||||
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room);
|
player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room);
|
||||||
@@ -38,6 +39,9 @@ Game::~Game()
|
|||||||
input = nullptr;
|
input = nullptr;
|
||||||
|
|
||||||
// Libera la memoria de los objetos
|
// Libera la memoria de los objetos
|
||||||
|
delete scoreboard;
|
||||||
|
scoreboard = nullptr;
|
||||||
|
|
||||||
delete itemTracker;
|
delete itemTracker;
|
||||||
itemTracker = nullptr;
|
itemTracker = nullptr;
|
||||||
|
|
||||||
@@ -134,6 +138,7 @@ void Game::update()
|
|||||||
checkPlayerOnFloor();
|
checkPlayerOnFloor();
|
||||||
checkPlayerAndItems();
|
checkPlayerAndItems();
|
||||||
checkPlayerAndEnemies();
|
checkPlayerAndEnemies();
|
||||||
|
scoreboard->update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,14 +153,8 @@ void Game::render()
|
|||||||
room->renderEnemies();
|
room->renderEnemies();
|
||||||
room->renderItems();
|
room->renderItems();
|
||||||
player->render();
|
player->render();
|
||||||
|
renderRoomName();
|
||||||
// Texto en el centro de la pantalla
|
scoreboard->render();
|
||||||
SDL_Rect rect = {0, 16 * 8, PLAY_AREA_RIGHT, 8};
|
|
||||||
color_t color = stringToColor("light_black");
|
|
||||||
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 0xFF);
|
|
||||||
SDL_RenderFillRect(renderer, &rect);
|
|
||||||
|
|
||||||
text->writeCentered(GAMECANVAS_CENTER_X, 16 * 8, room->getName());
|
|
||||||
|
|
||||||
// Debug info
|
// Debug info
|
||||||
renderDebugInfo();
|
renderDebugInfo();
|
||||||
@@ -204,6 +203,18 @@ void Game::renderDebugInfo()
|
|||||||
debugText->write(0, line += inc, text);
|
debugText->write(0, line += inc, text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Escribe el nombre de la pantalla
|
||||||
|
void Game::renderRoomName()
|
||||||
|
{
|
||||||
|
// Texto en el centro de la pantalla
|
||||||
|
SDL_Rect rect = {0, 16 * BLOCK, PLAY_AREA_WIDTH, BLOCK};
|
||||||
|
color_t color = stringToColor("light_black");
|
||||||
|
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 0xFF);
|
||||||
|
SDL_RenderFillRect(renderer, &rect);
|
||||||
|
|
||||||
|
text->writeCentered(GAMECANVAS_CENTER_X, 16 * 8, room->getName());
|
||||||
|
}
|
||||||
|
|
||||||
// Cambia de habitación
|
// Cambia de habitación
|
||||||
bool Game::changeRoom(std::string file)
|
bool Game::changeRoom(std::string file)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "sprite.h"
|
#include "sprite.h"
|
||||||
#include "movingsprite.h"
|
#include "animatedsprite.h"
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
#include "menu.h"
|
#include "menu.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
#include "item_tracker.h"
|
#include "item_tracker.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "jail_audio.h"
|
#include "jail_audio.h"
|
||||||
|
#include "scoreboard.h"
|
||||||
|
|
||||||
#ifndef GAME_H
|
#ifndef GAME_H
|
||||||
#define GAME_H
|
#define GAME_H
|
||||||
@@ -31,6 +32,7 @@ private:
|
|||||||
Input *input; // Objeto pata gestionar la entrada
|
Input *input; // Objeto pata gestionar la entrada
|
||||||
Text *text; // Objeto para los textos del juego
|
Text *text; // Objeto para los textos del juego
|
||||||
Text *debugText; // Objeto para los textos de debug del juego
|
Text *debugText; // Objeto para los textos de debug del juego
|
||||||
|
ScoreBoard *scoreboard; // Objeto encargado de gestionar el marcador
|
||||||
int ticks; // Contador de ticks para ajustar la velocidad del programa
|
int ticks; // Contador de ticks para ajustar la velocidad del programa
|
||||||
int ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
int ticksSpeed; // Velocidad a la que se repiten los bucles del programa
|
||||||
section_t section; // Seccion actual dentro del juego
|
section_t section; // Seccion actual dentro del juego
|
||||||
@@ -47,6 +49,9 @@ private:
|
|||||||
// Pone la información de debug en pantalla
|
// Pone la información de debug en pantalla
|
||||||
void renderDebugInfo();
|
void renderDebugInfo();
|
||||||
|
|
||||||
|
// Escribe el nombre de la pantalla
|
||||||
|
void renderRoomName();
|
||||||
|
|
||||||
// Cambia de habitación
|
// Cambia de habitación
|
||||||
bool changeRoom(std::string file);
|
bool changeRoom(std::string file);
|
||||||
|
|
||||||
|
|||||||
@@ -163,6 +163,8 @@ void MovingSprite::setPos(SDL_Rect rect)
|
|||||||
{
|
{
|
||||||
x = (float)rect.x;
|
x = (float)rect.x;
|
||||||
y = (float)rect.y;
|
y = (float)rect.y;
|
||||||
|
w = rect.w;
|
||||||
|
h = rect.h;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Establece el valor de la variable
|
// Establece el valor de la variable
|
||||||
|
|||||||
@@ -14,10 +14,8 @@ Player::Player(player_t ini, std::string tileset, std::string animation, SDL_Ren
|
|||||||
|
|
||||||
// Crea objetos
|
// Crea objetos
|
||||||
texture = new LTexture();
|
texture = new LTexture();
|
||||||
sprite = new AnimatedSprite(texture, renderer, animation);
|
|
||||||
|
|
||||||
// Carga la textura
|
|
||||||
loadTextureFromFile(texture, asset->get(tileset), renderer);
|
loadTextureFromFile(texture, asset->get(tileset), renderer);
|
||||||
|
sprite = new AnimatedSprite(texture, renderer, animation);
|
||||||
|
|
||||||
// Inicializa variables
|
// Inicializa variables
|
||||||
color = stringToColor("white");
|
color = stringToColor("white");
|
||||||
@@ -55,8 +53,10 @@ Player::~Player()
|
|||||||
void Player::render()
|
void Player::render()
|
||||||
{
|
{
|
||||||
sprite->getTexture()->setColor(color.r, color.g, color.b);
|
sprite->getTexture()->setColor(color.r, color.g, color.b);
|
||||||
|
//sprite->getTexture()->setBlendMode(SDL_BLENDMODE_INVALID);
|
||||||
sprite->render();
|
sprite->render();
|
||||||
sprite->getTexture()->setColor(255, 255, 255);
|
//sprite->getTexture()->setBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
|
//sprite->getTexture()->setColor(255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Actualiza las variables del objeto
|
// Actualiza las variables del objeto
|
||||||
|
|||||||
@@ -211,30 +211,37 @@ bool Room::setVars(std::string var, std::string value)
|
|||||||
{
|
{
|
||||||
name = value;
|
name = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (var == "bgColor")
|
else if (var == "bgColor")
|
||||||
{
|
{
|
||||||
bgColor = stringToColor(value);
|
bgColor = stringToColor(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (var == "tileset")
|
else if (var == "tileset")
|
||||||
{
|
{
|
||||||
tileset = value;
|
tileset = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (var == "roomUp")
|
else if (var == "roomUp")
|
||||||
{
|
{
|
||||||
roomUp = value;
|
roomUp = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (var == "roomDown")
|
else if (var == "roomDown")
|
||||||
{
|
{
|
||||||
roomDown = value;
|
roomDown = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (var == "roomLeft")
|
else if (var == "roomLeft")
|
||||||
{
|
{
|
||||||
roomLeft = value;
|
roomLeft = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (var == "roomRight")
|
else if (var == "roomRight")
|
||||||
{
|
{
|
||||||
roomRight = value;
|
roomRight = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (var == "tilemap")
|
else if (var == "tilemap")
|
||||||
{
|
{
|
||||||
// Se introducen los valores separados por comas en un vector
|
// Se introducen los valores separados por comas en un vector
|
||||||
@@ -245,9 +252,11 @@ bool Room::setVars(std::string var, std::string value)
|
|||||||
tilemap.push_back(std::stoi(tmp));
|
tilemap.push_back(std::stoi(tmp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (var == "")
|
else if (var == "")
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
success = false;
|
success = false;
|
||||||
@@ -350,7 +359,7 @@ bool Room::setItem(item_t *item, std::string var, std::string value)
|
|||||||
item->tileset = value;
|
item->tileset = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (var == "counter")
|
else if (var == "counter")
|
||||||
{
|
{
|
||||||
item->counter = std::stoi(value);
|
item->counter = std::stoi(value);
|
||||||
}
|
}
|
||||||
|
|||||||
82
source/scoreboard.cpp
Normal file
82
source/scoreboard.cpp
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
#include "scoreboard.h"
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
// Constructor
|
||||||
|
ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset)
|
||||||
|
{
|
||||||
|
// Obten punteros a objetos
|
||||||
|
this->asset = asset;
|
||||||
|
this->renderer = renderer;
|
||||||
|
|
||||||
|
// Reserva memoria para los objetos
|
||||||
|
texture = new LTexture();
|
||||||
|
loadTextureFromFile(texture, asset->get("player01.png"), renderer);
|
||||||
|
sprite = new AnimatedSprite(texture, renderer, asset->get("player01.ani"));
|
||||||
|
sprite->setCurrentAnimation("walk_menu");
|
||||||
|
|
||||||
|
// Inicializa las variables
|
||||||
|
counter = 0;
|
||||||
|
colorChangeSpeed = 4;
|
||||||
|
|
||||||
|
// Inicializa los colores
|
||||||
|
color_t c = stringToColor("blue");
|
||||||
|
color.push_back(c);
|
||||||
|
|
||||||
|
c = stringToColor("red");
|
||||||
|
color.push_back(c);
|
||||||
|
|
||||||
|
c = stringToColor("purple");
|
||||||
|
color.push_back(c);
|
||||||
|
|
||||||
|
c = stringToColor("green");
|
||||||
|
color.push_back(c);
|
||||||
|
|
||||||
|
c = stringToColor("cyan");
|
||||||
|
color.push_back(c);
|
||||||
|
|
||||||
|
c = stringToColor("yellow");
|
||||||
|
color.push_back(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
ScoreBoard::~ScoreBoard()
|
||||||
|
{
|
||||||
|
texture->unload();
|
||||||
|
delete texture;
|
||||||
|
texture = nullptr;
|
||||||
|
|
||||||
|
delete sprite;
|
||||||
|
sprite = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pinta el objeto en pantalla
|
||||||
|
void ScoreBoard::render()
|
||||||
|
{
|
||||||
|
|
||||||
|
const int num_lives = 9;
|
||||||
|
|
||||||
|
// Dibuja el fondo del marcador
|
||||||
|
const SDL_Rect rect = {0, 17 * BLOCK, PLAY_AREA_WIDTH, GAMECANVAS_HEIGHT - PLAY_AREA_HEIGHT};
|
||||||
|
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
|
||||||
|
SDL_RenderFillRect(renderer, &rect);
|
||||||
|
|
||||||
|
sprite->setPosY(18 * BLOCK);
|
||||||
|
int index;
|
||||||
|
int desp = (counter / 40) % 8;
|
||||||
|
|
||||||
|
for (int i = 0; i < num_lives; i++)
|
||||||
|
{
|
||||||
|
sprite->setPosX(8 + (16 * i) + desp);
|
||||||
|
index = i % color.size();
|
||||||
|
sprite->getTexture()->setColor(color[index].r, color[index].g, color[index].b);
|
||||||
|
sprite->render();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actualiza las variables del objeto
|
||||||
|
void ScoreBoard::update()
|
||||||
|
{
|
||||||
|
counter++;
|
||||||
|
sprite->update();
|
||||||
|
}
|
||||||
39
source/scoreboard.h
Normal file
39
source/scoreboard.h
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include "utils.h"
|
||||||
|
#include "asset.h"
|
||||||
|
#include "animatedsprite.h"
|
||||||
|
#include "const.h"
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
#ifndef SCOREBOARD_H
|
||||||
|
#define SCOREBOARD_H
|
||||||
|
|
||||||
|
// Clase ScoreBoard
|
||||||
|
class ScoreBoard
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
LTexture *texture; // Textura con los graficos para las vidas
|
||||||
|
AnimatedSprite *sprite; // Sprite para mostrar las vidas en el marcador
|
||||||
|
SDL_Renderer *renderer; // El renderizador de la ventana
|
||||||
|
Asset *asset; // Objeto con la ruta a todos los ficheros de recursos
|
||||||
|
std::vector<color_t> color; // Vector con los colores del objeto
|
||||||
|
int counter; // Contador interno
|
||||||
|
int colorChangeSpeed; // Cuanto mas alto, mas tarda en cambiar de color
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Constructor
|
||||||
|
ScoreBoard(SDL_Renderer *renderer, Asset *asset);
|
||||||
|
|
||||||
|
// Destructor
|
||||||
|
~ScoreBoard();
|
||||||
|
|
||||||
|
// Pinta el objeto en pantalla
|
||||||
|
void render();
|
||||||
|
|
||||||
|
// Actualiza las variables del objeto
|
||||||
|
void update();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -166,3 +166,9 @@ void Screen::setBorderColor(color_t color)
|
|||||||
{
|
{
|
||||||
borderColor = color;
|
borderColor = color;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cambia el tipo de mezcla
|
||||||
|
void Screen::setBlendMode(SDL_BlendMode blendMode)
|
||||||
|
{
|
||||||
|
SDL_SetRenderDrawBlendMode(renderer, blendMode);
|
||||||
|
}
|
||||||
@@ -60,6 +60,9 @@ public:
|
|||||||
|
|
||||||
// Cambia el color del borde
|
// Cambia el color del borde
|
||||||
void setBorderColor(color_t color);
|
void setBorderColor(color_t color);
|
||||||
|
|
||||||
|
// Cambia el tipo de mezcla
|
||||||
|
void setBlendMode(SDL_BlendMode blendMode);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user