We are going to see, with this tutorial, how to create a shape on a window and how to move it with keyboard arrows.
We need, for this example, three files that we are going to create to dispatch the code:
Of course, you can add a Makefile to easily compile and link files.
	But to link the .o, you need to add the -lSDL command.
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include "h.h"
int init(t_sdl *sdl)
{
if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
{
fprintf(stderr, "Error: %s\n", strerror(errno));
return (1);
}
if ((sdl->screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE)) == NULL)
{
fprintf(stderr, "Error: %s", SDL_GetError());
return (1);
}
SDL_WM_SetCaption("Hello World! :D", NULL);
if (SDL_FillRect(sdl->screen, NULL, SDL_MapRGB(sdl->screen->format, 255, 32, 45)) == -1)
{
fprintf(stderr, "Error: %s\n", SDL_GetError());
return (1);
}
if (SDL_Flip(sdl->screen) == -1)
{
fprintf(stderr, "Error: %s\n", SDL_GetError());
return (1);
}
sdl->position->x = 0;
sdl->position->y = 0;
if (manager_event(sdl))
{
fprintf(stderr, "Error: %s\n", SDL_GetError());
return (1);
}
SDL_FreeSurface(sdl->rectangle);
return (0);
}
int main ()
{
t_sdl sdl;
sdl.screen = NULL;
if(init(&sdl))
return (1);
return (0);
}
#include <stdio.h>
#include <string.h>
#include <SDL/SDL.h>
#include "h.h"
int manager_event(t_sdl *sdl)
{
int gogogo;
SDL_Event  event;
gogogo = 1;
while (gogogo)
{
 SDL_WaitEvent(&event);
 if (event.type == SDL_QUIT)
 gogogo = 0;
 else if (event.type == SDL_KEYDOWN)
 {
 if (event.key.keysym.sym == SDLK_ESCAPE)
 {
 printf("ESC\n");
 gogogo = 0;
 }
 if (event.key.keysym.sym == SDLK_RIGHT)
 {
 printf("RIGHT\n");
 sdl->position->x += 10;
 }
 if (event.key.keysym.sym == SDLK_LEFT)
 {
 printf("LEFT\n");
 sdl->position->x -= 10;
 }
 if (event.key.keysym.sym == SDLK_UP)
 {
 printf("UP\n");
 sdl->position->y -= 10;
 }
 if (event.key.keysym.sym == SDLK_DOWN)
 {
 printf("DOWN\n");
 sdl->position->y += 10;
 }
       }
 creation_rect(sdl);
}
return (0);
}
int creation_rect(t_sdl *sdl)
{
sdl->rectangle = NULL;
if (SDL_FillRect(sdl->screen, NULL, SDL_MapRGB(sdl->screen->format, 255, 32, 45)) == -1)
{
fprintf(stderr, "Error: %s\n", SDL_GetError());
return (1);
}
if ((sdl->rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 220, 180, 32, 0, 0, 0, 0)) == NULL)
{
fprintf(stderr, "Error: %s\n", SDL_GetError());
return (1);
}
if (SDL_FillRect(sdl->rectangle, NULL, SDL_MapRGB(sdl->screen->format, 255, 255, 45)) == -1)
{
fprintf(stderr, "Error: %s\n", SDL_GetError());
return (1);
}
if (SDL_BlitSurface(sdl->rectangle, NULL, sdl->screen, sdl->position) == -1)
{
fprintf(stderr, "Error: %s\n", SDL_GetError());
return (1);
}
if (SDL_Flip(sdl->screen) == -1)
{
fprintf(stderr, "Error: %s\n", SDL_GetError());
return (1);
}
return (0);
}
#ifndef H_H_
#define H_H_
/**
 * STRUCTURE
 */
typedef struct s_sdl
{
SDL_Surface *screen;
SDL_Surface *rectangle;
SDL_Rect *position;
} t_sdl;
/**
 * PROTOTYPE
 */
/* main.c */
int init(t_sdl *sdl);
/* manager_sdl.c */
int manager_event(t_sdl *sdl);
int creation_rect(t_sdl *sdl);
#endif /* H_H_ */$ gcc main.c manager_sdl.c -c ; gcc main.o manager_sdl.o -lSDL -o go ; ./go
Well done, you made it. 
Add new comment