Score calculation added

This commit is contained in:
Michael Chen 2018-01-23 11:08:15 +01:00
parent fc805e5c31
commit 9088047c68
3 changed files with 17 additions and 5 deletions

View File

@ -77,9 +77,11 @@ Scenery BREAKOUT_CreateDefault(){
scenery.paddle = PADDLE_CreateDefault(); scenery.paddle = PADDLE_CreateDefault();
scenery.blocks = malloc(scenery.BlockCount * sizeof(Block)); scenery.blocks = malloc(scenery.BlockCount * sizeof(Block));
scenery.Frames = 0; scenery.Frames = 0;
scenery.Score = 0;
if (!(scenery.blocks)) printf("FATAL! Memory allocation failed!\n"); if (!(scenery.blocks)) printf("FATAL! Memory allocation failed!\n");
scenery.IsPaused = false; scenery.IsPaused = false;
scenery.Lives = 3; scenery.Lives = 3;
scenery.DestroyedBlocks = 0;
int index; int index;
for (int y = 0; y < 9; y++) { for (int y = 0; y < 9; y++) {
index = 15 * y; index = 15 * y;
@ -92,6 +94,13 @@ Scenery BREAKOUT_CreateDefault(){
return scenery; return scenery;
} /* BREAKOUT_CreateDefault */ } /* BREAKOUT_CreateDefault */
int BREAKOUT_RefreshScore(Scenery * scenery){
(scenery->Score) = (int)round((double)(scenery->Frames) * 0.005f * ((scenery->ball).Speed) + (double)(50 * (scenery->DestroyedBlocks)));
printf("Score: %d\n", (scenery->Score));
return (scenery->Score);
}
// This Function is obsolete! Do not use it! // This Function is obsolete! Do not use it!
void BREAKOUT_ChangeSize(int width, int height){ void BREAKOUT_ChangeSize(int width, int height){
BREAKOUT_BoxWidth = width; BREAKOUT_BoxWidth = width;
@ -108,6 +117,7 @@ void BREAKOUT_Update(Scenery * scenery, const Uint8 * keystate){
return; return;
} }
(scenery->Frames)++; (scenery->Frames)++;
BREAKOUT_RefreshScore(scenery);
if (scenery->IsGameOver) { if (scenery->IsGameOver) {
BALL_ResetPosition(&(scenery->ball)); BALL_ResetPosition(&(scenery->ball));
PADDLE_ResetPosition(&(scenery->paddle)); PADDLE_ResetPosition(&(scenery->paddle));
@ -138,8 +148,6 @@ void BREAKOUT_Draw(Scenery * scenery, SDL_Renderer * renderer){
SDL_Rect target = *rect; SDL_Rect target = *rect;
target.x = ((BREAKOUT_BoxWidth - (rect->w)) / 2); target.x = ((BREAKOUT_BoxWidth - (rect->w)) / 2);
target.y = ((BREAKOUT_BoxHeight - (rect->h)) / 2); target.y = ((BREAKOUT_BoxHeight - (rect->h)) / 2);
printf("Texture From: %d, %d, %d, %d\n", rect->x, rect->y, rect->w, rect->h);
printf("Texture To: %d, %d, %d, %d\n", target.x, target.y, target.w, target.h);
SDL_RenderCopy(renderer, GAME_CountdownTexture, rect, &target); SDL_RenderCopy(renderer, GAME_CountdownTexture, rect, &target);
} }
} }
@ -359,6 +367,8 @@ void BALL_Update(Ball * obj, Scenery * scenery){
oldLocation = obj->Location; oldLocation = obj->Location;
if (BALL_CollideWithRect(obj, &(blocks[i].TargetRect))) { if (BALL_CollideWithRect(obj, &(blocks[i].TargetRect))) {
BLOCK_DealDamage(blocks + i, 1); BLOCK_DealDamage(blocks + i, 1);
if (blocks[i].HP <= 0)
(scenery->DestroyedBlocks)++;
(obj->Location) = VECTOR_Add(oldLocation, (obj->Momentum)); (obj->Location) = VECTOR_Add(oldLocation, (obj->Momentum));
BALL_MoveAwayFromBoundaries(obj); BALL_MoveAwayFromBoundaries(obj);
RECT_SetTargetPos(&(obj->TargetRect), &(obj->Location)); RECT_SetTargetPos(&(obj->TargetRect), &(obj->Location));

View File

@ -39,15 +39,15 @@ typedef struct sceneryStruct {
Ball ball; Ball ball;
Paddle paddle; Paddle paddle;
Block * blocks; Block * blocks;
int BlockCount, Lives, StartCountdown; int BlockCount, Lives, StartCountdown, Frames, Score, DestroyedBlocks;
bool IsPaused, IsGameOver; bool IsPaused, IsGameOver;
int Frames;
} Scenery; // Objekt für die Objekte und Eigenschaften einer Szenerie } Scenery; // Objekt für die Objekte und Eigenschaften einer Szenerie
// End Structs // End Structs
// Prototypes // Prototypes
void BREAKOUT_INITIALIZE(SDL_Renderer * renderer, int width, int height); void BREAKOUT_INITIALIZE(SDL_Renderer * renderer, int width, int height);
Scenery BREAKOUT_CreateDefault(); Scenery BREAKOUT_CreateDefault();
int BREAKOUT_RefreshScore(Scenery * scenery);
void BREAKOUT_ChangeSize(int width, int height); void BREAKOUT_ChangeSize(int width, int height);
void BREAKOUT_Update(Scenery * scenery, const Uint8 * keystate); void BREAKOUT_Update(Scenery * scenery, const Uint8 * keystate);
void BREAKOUT_Draw(Scenery * scenery, SDL_Renderer * renderer); void BREAKOUT_Draw(Scenery * scenery, SDL_Renderer * renderer);
@ -65,6 +65,7 @@ SDL_Point BALL_GetCenter(Ball * obj);
void BALL_CollideWithBorders(Ball * obj); void BALL_CollideWithBorders(Ball * obj);
void BALL_MoveAwayFromBoundaries(Ball * obj); void BALL_MoveAwayFromBoundaries(Ball * obj);
bool BALL_CollideWithPaddle(Ball * obj, Paddle * paddle); bool BALL_CollideWithPaddle(Ball * obj, Paddle * paddle);
void BALL_AdaptSpeedGradient(Ball * obj, int FrameCount);
void BALL_Update(Ball * obj, Scenery * scenery); void BALL_Update(Ball * obj, Scenery * scenery);
void BALL_DestroyObject(Ball * obj); void BALL_DestroyObject(Ball * obj);
void BALL_Deinitialize(); void BALL_Deinitialize();
@ -75,6 +76,7 @@ void PADDLE_Draw(SDL_Renderer * renderer, Paddle * obj);
bool KeyPressed(const Uint8 * keystate, Uint8 * keyArray); bool KeyPressed(const Uint8 * keystate, Uint8 * keyArray);
void INT_Constrain(int * variable, int min, int max); void INT_Constrain(int * variable, int min, int max);
void DOUBLE_Constrain(double * variable, double min, double max); void DOUBLE_Constrain(double * variable, double min, double max);
void PADDLE_MoveSmooth(Paddle * obj);
void PADDLE_Update(Paddle * obj, const Uint8 * keystate); void PADDLE_Update(Paddle * obj, const Uint8 * keystate);
void PADDLE_DestroyObject(Paddle * obj); void PADDLE_DestroyObject(Paddle * obj);
void PADDLE_Deinitialize(); void PADDLE_Deinitialize();

View File

@ -67,7 +67,7 @@ void HIGHSCORES_Deinitialize(){
void HIGHSCORES_GenerateTexture(SDL_Renderer * renderer){ void HIGHSCORES_GenerateTexture(SDL_Renderer * renderer){
char * buffer = calloc(100, sizeof(char)); char * buffer = calloc(100, sizeof(char));
int count = 0; int count = 0;
char format[20] = "| %-58s | %-10s |"; char format[20] = "| %-54s | %-14s |";
SDL_Rect Message_rect; SDL_Rect Message_rect;
SDL_Surface * HIGHSCORES_TableSurface = SDL_CreateRGBSurface(0, 1920, 1080, 32, 0, 0, 0, 0); SDL_Surface * HIGHSCORES_TableSurface = SDL_CreateRGBSurface(0, 1920, 1080, 32, 0, 0, 0, 0);