Hi everyone,
I’m trying to make a pong game with SDL2 in C.
I’m actually having an issue while trying to move rectangles during the game loop :
#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
#define DEBUG 1
int main(int argc, char **argv)
{
// Starting game
if(SDL_Init(SDL_INIT_VIDEO) != 0)
{
fprintf(stderr,"ERROR : Failed to initialize SDL2\n");
exit(EXIT_FAILURE);
}
SDL_Window *game_window = NULL;
SDL_Renderer *game_renderer = NULL;
game_window = SDL_CreateWindow("Pong",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
800,
600,
SDL_WINDOW_SHOWN);
if(game_window == NULL)
{
fprintf(stderr,"ERROR : Failed to create game window \n");
exit(EXIT_FAILURE);
}
game_renderer = SDL_CreateRenderer(game_window,-1,SDL_RENDERER_ACCELERATED);
if(game_renderer == NULL)
{
fprintf(stderr,"ERROR : Failed to create game renderer\n");
exit(EXIT_FAILURE);
}
#if DEBUG
printf("============\n");
printf("GAME STARTED\n");
printf("============\n");
#endif
// Creating entities
SDL_Rect player = {x:0,y:0,h:200,w:50};
SDL_Rect computer = {x:750,y:0,h:200,w:50};
SDL_Rect players[] = {player, computer};
//Game loop
int isRunning = 1;
while(isRunning == 1)
{
// Event handling
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
isRunning = 0;
break;
case SDL_KEYDOWN:
switch(event.key.keysym.sym)
{
case SDLK_ESCAPE:
isRunning = 0;
break;
case SDLK_UP:
player.y -= 50;
#if DEBUG
printf("PLAYER Y = %d\n", player.y);
#endif
break;
case SDLK_DOWN:
player.y += 50;
#if DEBUG
printf("PLAYER Y = %d\n", player.y);
#endif
break;
default:
break;
}
break;
default:
break;
}
}
SDL_Delay(500);
#if DEBUG
printf("UPDATING...\n");
#endif
SDL_SetRenderDrawColor(game_renderer,0,0,0,1);
SDL_RenderClear(game_renderer);
SDL_SetRenderDrawColor(game_renderer,255,255,255,1);
SDL_RenderFillRects(game_renderer,players,2);
SDL_RenderPresent(game_renderer);
}
#if DEBUG
printf("==========\n");
printf("GAME ENDED\n");
printf("==========\n");
#endif
// End
SDL_DestroyWindow(game_window);
SDL_DestroyRenderer(game_renderer);
SDL_Quit();
return EXIT_SUCCESS;
}
I do get the “UPDATING…” text but the screen stays the same.
Does someone have an idea ?
Thanks in advance for your help