70 lines
1.9 KiB
C
70 lines
1.9 KiB
C
#include <SDL2/SDL.h>
|
|
#include <ball.h>
|
|
#include <game.h>
|
|
#include <player.h>
|
|
|
|
struct render_data
|
|
{
|
|
SDL_Renderer* renderer;
|
|
SDL_Window* window;
|
|
};
|
|
|
|
struct render_data* render_init(int width, int height)
|
|
{
|
|
// Initialize SDL2
|
|
struct render_data* data = malloc(sizeof(struct render_data));
|
|
memset(data, 0, sizeof(struct render_data));
|
|
|
|
printf("Start initializing SDL2\n");
|
|
if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
|
|
fprintf(stderr, "Could not initialize SDL2: '%s'\n", SDL_GetError());
|
|
|
|
data->window =
|
|
SDL_CreateWindow("Pong", 50, 50, width, height, SDL_WINDOW_SHOWN);
|
|
if (!data->window)
|
|
fprintf(stderr, "Could not create window: '%s'\n", SDL_GetError());
|
|
|
|
data->renderer =
|
|
SDL_CreateRenderer(data->window, -1, SDL_RENDERER_PRESENTVSYNC);
|
|
|
|
printf("Finished initializing SDL2\n");
|
|
return data;
|
|
}
|
|
|
|
static void player_render(struct player* player, struct render_data* data)
|
|
{
|
|
SDL_Rect rect;
|
|
rect.x = player->x_location;
|
|
rect.y = player->y_location;
|
|
rect.w = PLAYER_WIDTH;
|
|
rect.h = PLAYER_HEIGHT;
|
|
|
|
SDL_SetRenderDrawColor(data->renderer, 0xFF, 0xFF, 0xFF, 0xFF);
|
|
SDL_RenderDrawRect(data->renderer, &rect);
|
|
}
|
|
|
|
static void ball_render(struct ball* ball, struct render_data* data)
|
|
{
|
|
SDL_Rect rect;
|
|
rect.x = ball->x_location;
|
|
rect.y = ball->y_location;
|
|
rect.w = ball->width;
|
|
rect.h = ball->width;
|
|
|
|
SDL_SetRenderDrawColor(data->renderer, 0xFF, 0xFF, 0xFF, 0xFF);
|
|
SDL_RenderDrawRect(data->renderer, &rect);
|
|
}
|
|
|
|
void render(struct game_data* game)
|
|
{
|
|
// Clear the screen of the game
|
|
SDL_SetRenderDrawColor(game->render_data->renderer, 0, 0, 0, 0xFF);
|
|
SDL_RenderClear(game->render_data->renderer);
|
|
|
|
player_render(game->player1, game->render_data);
|
|
player_render(game->player2, game->render_data);
|
|
ball_render(game->ball, game->render_data);
|
|
|
|
// Show the newly rendered screen
|
|
SDL_RenderPresent(game->render_data->renderer);
|
|
} |