#include "racket.h" Racket* Racket_init(int screen_width, int screen_height, int posX, int posY, SDL_Keycode up, SDL_Keycode down) { Racket *r = malloc(sizeof(Racket)); *(int *)&r->SCREEN_WIDTH = screen_width; *(int *)&r->SCREEN_HEIGHT = screen_height; *(int *)&r->posX = posX; r->posY = posY; r->score = Score_init(r->posX - SCORE_WIDTH/2 + RACKET_WIDTH/2, RACKET_WIDTH); if (r->score == NULL) { free(r); return NULL; } *(SDL_Keycode *)&r->up = up; *(SDL_Keycode *)&r->down = down; r->updown = 0; return r; } void Racket_free(Racket *r) { Score_free(r->score); free(r); } int Racket_render(const Racket *r, SDL_Renderer *renderer) { SDL_Rect rect = { r->posX, r->posY, RACKET_WIDTH, RACKET_HEIGHT }; if (SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255) < 0) { printf("SDL_SetRenderDrawColor failed! SDL_Error: %s\n", SDL_GetError()); return 1; } SDL_RenderFillRect(renderer, &rect); if (Score_render(r->score, renderer) > 0) { return 1; } return 0; } void Racket_handle_event(Racket *r, const Uint8 *keystate) { if (keystate[r->up]) r->updown = -1; else if (keystate[r->down]) r->updown = 1; else r->updown = 0; } void Racket_move(Racket *r) { r->posY += r->updown * RACKET_VELOCITY; if ((r->posY < 0) || (r->posY + RACKET_HEIGHT > r->SCREEN_HEIGHT)) { r->posY -= r->updown * RACKET_VELOCITY; } r->updown = 0; }