1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <SDL.h> /*Si sa ne marche pas essayer SDL/SDL.h*/
#define WIN_W 320
#define WIN_H 240
#define BPP 32
#define FLAGS SDL_HWSURFACE|SDL_DOUBLEBUF
#define TRUE 1
#define FALSE 0
typedef char boul;
typedef unsigned int color;
/*Création du sprite*/
typedef struct _sprite *sprite;
struct _sprite
{
int w;
int h;
SDL_Rect pos;
SDL_Surface *surface;
};
/* Fonction d'initialisation de la fenêtre SDL*/
SDL_Surface *init_sdl()
{
SDL_Surface *screen=NULL;
if(SDL_Init (SDL_INIT_VIDEO)==-1)
{
fprintf(stderr,"init not SDL : %s\n",SDL_GetError());
exit(EXIT_FAILURE);
}
atexit(SDL_Quit);
screen=SDL_SetVideoMode(WIN_W, WIN_H, BPP, FLAGS);
if(screen == NULL)
{
fprintf(stderr,"Error display Window : %s\n",SDL_GetError());
exit(EXIT_FAILURE);
}
SDL_WM_SetCaption ("Collision",NULL);
return screen;
}
/*Libération de la mémoire pour les surfaces*/
void My_SDL_FreeSurface(SDL_Surface *I)
{
SDL_FreeSurface(I);
}
/*Création des sprite*/
sprite sprite_create(int w, int h, int x, int y,int a,int b, int c)
{
sprite I=(sprite)malloc(sizeof(struct _sprite));
I->w=w;
I->h=h;
I->pos.x=x;
I->pos.y=y;
I->surface=NULL;
I->surface=SDL_CreateRGBSurface(SDL_HWSURFACE,I->w,I->h,32,0,0,0,0);
SDL_FillRect(I->surface,NULL,SDL_MapRGB(I->surface->format,a,b,c));
return I;
}
/*Liberation de la mémoire pour les sprites*/
void sprite_destroy(sprite I)
{
My_SDL_FreeSurface(I->surface);
free(I);
}
/*La boucle des événement*/
void loop_event()
{
SDL_Event event;
boul stop = TRUE;
do
{
while(SDL_PollEvent(&event))
{
if(event.type==SDL_QUIT ||(
event.button.button==SDL_BUTTON_RIGHT && event.type==SDL_MOUSEBUTTONUP))
stop=FALSE;
}
}while(stop);
}
int main(int argc, char *argv[])
{
SDL_Surface *screen;
sprite rectwhite;
int i=5000;
int vx=1, vy=1;
screen=init_sdl();
rectwhite=sprite_create(10,10,50,50,255,255,255);
while(i>0)
{
rectwhite->pos.x+=vx;
rectwhite->pos.y+=vy;
if(rectwhite->pos.x<=0 && vx<0)
vx=-vx;
if(rectwhite->pos.x+rectwhite->w>=320 && vx>0)
vx=-vx;
if(rectwhite->pos.y<0 && vy<0)
vy=-vy;
if(rectwhite->pos.y+rectwhite->h>=240 && vy>0)
vy=-vy;
SDL_BlitSurface(rectwhite->surface,NULL,screen,&(rectwhite->pos));
SDL_Flip(screen);
SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,0,0,0));
SDL_Delay(5);
i--;
printf("i == %d \n", i);
}
loop_event();
sprite_destroy(rectwhite);
My_SDL_FreeSurface(screen);
if(argc<-1) printf(argv[0]);
return EXIT_SUCCESS;
} |
Partager