Compare commits

..

3 Commits

4 changed files with 16 additions and 48 deletions

View File

@@ -63,7 +63,7 @@ Game::Game(int playerID, int currentStage, Screen *screen, Asset *asset, Lang *l
Game::~Game()
{
saveScoreFile();
//saveScoreFile();
#ifdef RECORDING
saveDemoFile();
#endif
@@ -690,16 +690,16 @@ bool Game::loadScoreFile()
// Establece el valor de la máxima puntuación a partir del vector con los datos
if (scoreDataFile[0] == 0)
{
hiScore = 10000;
hiScore.score = 10000;
}
// Comprueba el checksum para ver si se ha modificado el fichero
else if (scoreDataFile[0] % 43 == scoreDataFile[1])
{
hiScore = scoreDataFile[0];
hiScore.score = scoreDataFile[0];
}
else
{
hiScore = 10000;
hiScore.score = 10000;
}
return success;
@@ -786,8 +786,8 @@ bool Game::loadDemoFile(std::string f, demoKeys_t (*dataFile)[TOTAL_DEMO_DATA])
bool Game::saveScoreFile()
{
// Almacena la máxima puntuación en el fichero junto con un checksum
scoreDataFile[0] = hiScore;
scoreDataFile[1] = hiScore % 43;
scoreDataFile[0] = hiScore.score;
scoreDataFile[1] = hiScore.score % 43;
bool success = true;
const std::string p = asset->get("score.bin");
@@ -916,10 +916,10 @@ void Game::updateHiScore()
{
// Si la puntuación actual es mayor que la máxima puntuación
for (auto player : players)
if (player->getScore() > hiScore)
if (player->getScore() > hiScore.score)
{
// Actualiza la máxima puntuación
hiScore = player->getScore();
hiScore.score = player->getScore();
// Si se supera la máxima puntuación emite sonido
if (hiScoreAchieved == false)
@@ -2815,9 +2815,10 @@ void Game::reloadTextures()
void Game::setHiScore()
{
// Carga el fichero de puntos
loadScoreFile();
//loadScoreFile();
hiScoreName = "";
hiScore.score = options->game.hiScoreTable[0].score;
hiScore.name = options->game.hiScoreTable[0].name;
}
// Actualiza el marcador
@@ -2832,8 +2833,8 @@ void Game::updateScoreboard()
// Resto de marcador
scoreboard->setStage(enemyFormations->getStage(currentStage).number);
scoreboard->setPower((float)currentPower / (float)enemyFormations->getStage(currentStage).powerToComplete);
scoreboard->setHiScore(hiScore);
scoreboard->setHiScoreName(hiScoreName);
scoreboard->setHiScore(hiScore.score);
scoreboard->setHiScoreName(hiScore.name);
// Lógica del marcador
scoreboard->update();

View File

@@ -166,9 +166,8 @@ private:
// Variables
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
int hiScore; // Puntuación máxima
bool hiScoreAchieved; // Indica si se ha superado la puntuación máxima
std::string hiScoreName; // Nombre del jugador que ostenta la máxima puntuación
hiScoreEntry_t hiScore; // Máxima puntuación y nombre de quien la ostenta
int currentStage; // Indica la fase actual
int stageBitmapCounter; // Contador para el tiempo visible del texto de Stage
float stageBitmapPath[STAGE_COUNTER]; // Vector con los puntos Y por donde se desplaza el texto

View File

@@ -2,40 +2,8 @@
Código fuente creado por JailDesigner (2020)
Empezado en Castalla el 15/07/2020.
Descripción del enfoque utilizado para crear el juego.
El programa contine una serie de clases/objetos básicos: la clase sprite
permite dibujar partes de un fichero png en pantalla. La clase AnimatedSprite
contiene funcionalidad adicional para crear animaciones. La clase text permite
dibujar letras de un png en pantalla a partir de una cadena de texto. La clase
menu permite crear una estructura con diferentes elementos, escribirlos en
pantalla y seleccionar uno de ellos.
A continuación tenemos las clases enfocadas a la lógica del juego, la clase player
contiene la información del jugador, la clase balloon la de los enemigos y la
clase bullet para las balas que dispara el jugador. La clase background es
muy simple y sirve para pintar el fondo de la pantalla. Por ultimo, la clase
mDirector es la que realiza toda la lógica y se encarga de hacer interactuar
al resto de objetos entre si.
El objeto mDirector tiene tres estados: titulo, juego y pausa. Segun su estado
el bucle que recorre es distinto. En el bucle juego, el objeto mDirector
tiene un objeto jugador, un vector con los objetos globo y un vector con los
objetos bala. Se encarga de comprobar las entradas de teclado o gamepad para
cerrar la aplicacion, saltar al estado de pausa y para mover al jugador. Recorre
el vector de globos y de balas y si tienen algun tipo asignado las gestiona.
Comprueba las colisiones entre los globos y el jugador y entre las balas y los
globos. Tiene ademas un nivel de amenaza que calcula en funcion del número de globos
en pantalla y que se va incrementando conforme aumenta la puntuación del jugador.
Los objetos globo tienen varios contadores para alternar de un estado a otro.
En los vectores que contienen objetos, se considera activos los objetos que tienen
un tipo asociado diferente a NO_KIND
*** TODO ESTO ya no es valido, pero lo dejo como referencia
Reescribiendo el código el 27/09/2022
Actualizando a la versión "Arcade Edition" en 08/05/2024
*/

View File

@@ -269,7 +269,7 @@ void Scoreboard::fillPanelTextures()
// HI-SCORE
textScoreBoard->writeCentered(slot4_3.x, slot4_3.y, lang->getText(56));
textScoreBoard->writeCentered(slot4_4.x, slot4_4.y, hiScoreName + updateScoreText(hiScore));
textScoreBoard->writeCentered(slot4_4.x, slot4_4.y, hiScoreName + " - " +updateScoreText(hiScore));
break;
case SCOREBOARD_MODE_CONTINUE: