This code contains the game Starship designed for the STM32F429i-DISC1 board. It requires a keyboard to play.
Dependencies: Starship LCD_DISCO_F429ZI USBHost mbed
Diff: PowerUp.c
- Revision:
- 1:527a11035e0b
diff -r c9afe145b57b -r 527a11035e0b PowerUp.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PowerUp.c Fri Nov 17 02:23:33 2017 +0000 @@ -0,0 +1,95 @@ +#include "PowerUp.h" + +struct PowerUp * powerUpPTR; +int16_t powerUpCount; + +enum PowerUpType getRandomType()//fix!!! +{ + int randVal = randomInt(0,NUMBER_OF_POWER_UPS_TYPES-1); + switch(randVal) + { + case 0: return PU_RapidFire; + case 1: return PU_PowerShot; + case 2: return PU_FreezeEnemies; + case 3: return PU_WideShot; + case 4: return PU_Explosion; + case 5: return PU_BonusHealth; + case 6: return PU_Shield; + } + return PU_BonusHealth; +} +void addPowerUp(int16_t x_pos, int16_t y_pos) +{ + struct PowerUp * newPowerUp = (struct PowerUp *) malloc(sizeof(struct PowerUp)); + newPowerUp->x_pos = x_pos; + newPowerUp->y_pos = y_pos; + newPowerUp->type = getRandomType(); + newPowerUp->expirationTimer = POWER_UP_EXPERATION_TIME; + powerUpCount++; + if(powerUpCount==1) + { + newPowerUp->prev = newPowerUp; + newPowerUp->next = newPowerUp; + powerUpPTR = newPowerUp; + return; + } + struct PowerUp * tempNext = powerUpPTR->next; + powerUpPTR->next = newPowerUp; + newPowerUp->prev = powerUpPTR; + tempNext->prev = newPowerUp; + newPowerUp->next = tempNext; +} + +void removePowerUp(struct PowerUp * removePTR) +{ + if(powerUpCount<=0) + return; + powerUpCount--; + if(powerUpCount == 0) + powerUpPTR = (struct PowerUp *) 0; + else + { + powerUpPTR = removePTR->prev; + struct PowerUp * tempNext = removePTR->next; + powerUpPTR->next = tempNext; + tempNext->prev = powerUpPTR; + } + free(removePTR); +} +void clearPowerUps() +{ + while(powerUpCount) + removePowerUp(powerUpPTR); +} +void updatePowerUpTimer(struct PowerUp * powerUp) +{ + powerUp->expirationTimer = powerUp->expirationTimer ? (powerUp->expirationTimer - 1) : 0; +} +void updatePowerUpTimer_All() +{ + int i; + for(i = powerUpCount; i; i--) + { + updatePowerUpTimer(powerUpPTR); + powerUpPTR = powerUpPTR->next; + } +} +void removePowerUpIfExpired(struct PowerUp * powerUp) +{ + if(!(powerUp->expirationTimer)) + removePowerUp(powerUp); +} +void removePowerUpIfExpired_All() +{ + int i; + for(i = powerUpCount; i; i--) + { + powerUpPTR = powerUpPTR->next; + removePowerUpIfExpired(powerUpPTR); + } +} +void callMultiFuncPowerUp() +{ + removePowerUpIfExpired_All(); + updatePowerUpTimer_All(); +} \ No newline at end of file