This repository has been archived on 2026-05-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
spaceshooter/cpp/GameLogic.cpp

111 lines
3.6 KiB
C++
Raw Permalink Normal View History

#include "GameLogic.h"
ControlMap::ControlMap()
{
this->controlType = CONTROL_TYPE_KEYBOARD;
this->joystick = NULL;
this->moveUp = CONTROL_KEY_MOVEUP;
this->moveDown = CONTROL_KEY_MOVEDOWN;
this->moveLeft = CONTROL_KEY_MOVELEFT;
this->moveRight = CONTROL_KEY_MOVERIGHT;
this->fire = CONTROL_KEY_FIRE;
this->lastFireButtonState = 0;
}
GameOptions::GameOptions()
{
this->enemyBaseShootChance = 2;
this->difficultyLevel = 1;
this->bossExplodeLength = 5000;
this->playerBaseSpeed.x = 3;
this->playerBaseSpeed.y = 3;
this->playerBaseSpeed.z = 0;
this->enemyBaseSpeed.x = 1;
this->enemyBaseSpeed.y = 1;
this->enemyBaseSpeed.z = 0;
this->playerStartLives = 3;
this->playerStartHealth = 100;
this->playerBaseDamage = 5;
this->playMusic = 0;
this->playSound = 0;
this->playerShieldTime = 5000;
this->bossBaseTrip = 10000;
this->playerFailTime = 5000;
this->musicVolume = 80;
this->soundVolume = 60;
this->enemyBaseSpawnInterval = 1000;
this->enemyBaseSpawnChance = 5;
}
GameStatus::GameStatus()
{
this->enemyVelocity.x = 0;
this->enemyVelocity.y = 0;
this->enemyVelocity.z = 0;
this->status = GAMESTATE_TITLEMENU;
this->curLevel = 0;
this->levelTimer = 0;
this->levelScore = 0;
this->levelPowerups = 0;
this->levelLives = 0;
this->bossOnScreen = 0;
this->enemyShootChance = 2;
this->weaponSpeed = 100;
this->enemySpawnChance = 5;
this->enemySpawnInterval = 1000;
this->enemyLastSpawned = 0;
this->powerDropChance = 100;
this->bossExplodeTimer = 0;
this->running = 1;
}
void GameStatus::nextLevel(Player *player1, Player *player2, int curLevel)
{
GameOptions &opts = GameOptions::NewSingleton();
Player *player = player1;
if ( curLevel != -1 ) {
this->curLevel = curLevel;
}
this->enemyShootChance = (opts.enemyBaseShootChance * (curLevel+1));
this->enemyWeaponSpeed = (opts.enemyBaseWeaponSpeed * (curLevel+1)) + opts.difficultyLevel;
this->enemySpawnChance = (opts.enemyBaseSpawnChance + (curLevel+1)) + opts.difficultyLevel;
this->enemySpawnInterval = opts.enemyBaseSpawnInterval - (curLevel * -50);
this->enemyVelocity.x = opts.enemyBaseSpeed.x + ((curLevel+1)/3) + opts.difficultyLevel;
this->enemyVelocity.y = opts.enemyBaseSpeed.y + ((curLevel+1)/3) + opts.difficultyLevel;
this->enemyVelocity.z = opts.enemyBaseSpeed.z + ((curLevel+1)/3) + opts.difficultyLevel;
this->powerDropChance = (curLevel+1);
if ( player2 == NULL ) {
this->levelScore = player1->score;
} else {
this->levelScore = (player1->score + player2->score)/2;
}
while ( player != NULL ) {
if ( curLevel == 0 ) {
player->score = 0;
player->setVelocity((Vector){opts.playerBaseSpeed.x + opts.difficultyLevel, opts.playerBaseSpeed.y + opts.difficultyLevel, 0} );
player->health = opts.playerStartHealth;
player->lives = opts.playerStartLives;
this->enemySpawnChance *= opts.difficultyLevel;
this->enemyWeaponSpeed *= opts.difficultyLevel;
this->enemySpawnInterval /= opts.difficultyLevel;
this->enemyVelocity.y += opts.difficultyLevel;
} else {
player->score += 100 * this->levelPowerups;
player->score -= ( 200 * this->levelLives);
player->score -= (unsigned int)(1000 * ((float)(SDL_GetTicks() - this->levelTimer) / 60000));
player->score += 10000 * this->curLevel;
}
if ( player == player2 ) {
break;
}
player = player2;
}
this->levelTimer = SDL_GetTicks();
this->levelLives = 0;
this->levelPowerups = 0;
if ( curLevel != 0 )
this->curLevel += 1;
else
this->curLevel = curLevel;
}