Téléverser les fichiers vers "/"
This commit is contained in:
314
glisseur_10.c
Normal file
314
glisseur_10.c
Normal file
@@ -0,0 +1,314 @@
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include "SDL.h"
|
||||
|
||||
|
||||
/*
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
Version 2, December 2004
|
||||
|
||||
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim or modified
|
||||
copies of this license document, and changing it is allowed as long
|
||||
as the name is changed.
|
||||
|
||||
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. You just DO WHAT THE FUCK YOU WANT TO.
|
||||
*/
|
||||
|
||||
|
||||
/// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// ///
|
||||
/// COMPILING (SDL and SDL-dev or -devel librairies needed: ///
|
||||
/// $ gcc `sdl-config --cflags --libs` glisseur_10.c -o glisseur_10 ///
|
||||
/// ///
|
||||
/// RUNING: ///
|
||||
/// $ ./sdl-glisseur_10 ///
|
||||
/// ///
|
||||
/// STOPING: ///
|
||||
/// $ top ---> get PID of the glider proccess ///
|
||||
/// $ kill -9 PID ///
|
||||
/// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// /// ///
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Uint32 getpixel(SDL_Surface *surface,int x,int y)
|
||||
{
|
||||
int bpp = surface->format->BytesPerPixel;
|
||||
/* Here p is the address to the pixel we want to retrieve */
|
||||
Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
|
||||
|
||||
switch(bpp) {
|
||||
case 1:
|
||||
return *p;
|
||||
case 2:
|
||||
return *(Uint16 *)p;
|
||||
case 3:
|
||||
if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
|
||||
return p[0] << 16 | p[1] << 8 | p[2];
|
||||
else
|
||||
return p[0] | p[1] << 8 | p[2] << 16;
|
||||
case 4:
|
||||
return *(Uint32 *)p;
|
||||
default:
|
||||
return 0; /* shouldn't happen, but avoids warnings */
|
||||
}
|
||||
}
|
||||
|
||||
void putPixel(SDL_Surface * surface, Uint16 x, Uint16 y, Uint32 color)
|
||||
{
|
||||
/* Nombre de bits par pixels de la surface d'ecran */
|
||||
Uint8 bpp = surface->format->BytesPerPixel;
|
||||
/* Pointeur vers le pixel a remplacer (pitch correspond a la taille
|
||||
d'une ligne d'ecran, c'est a dire (longueur * bitsParPixel)
|
||||
pour la plupart des cas) */
|
||||
Uint8 * p = ((Uint8 *)surface->pixels) + y * surface->pitch + x * bpp;
|
||||
|
||||
switch(bpp)
|
||||
{
|
||||
case 1:
|
||||
*p = (Uint8) color;
|
||||
break;
|
||||
case 2:
|
||||
*(Uint16 *)p = (Uint16) color;
|
||||
break;
|
||||
case 3:
|
||||
if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
|
||||
{
|
||||
*(Uint16 *)p = ((color >> 8) & 0xff00) | ((color >> 8) & 0xff);
|
||||
*(p + 2) = color & 0xff;
|
||||
}
|
||||
else
|
||||
{
|
||||
*(Uint16 *)p = color & 0xffff;
|
||||
*(p + 2) = ((color >> 16) & 0xff) ;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
*(Uint32 *)p = color;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[])
|
||||
{
|
||||
SDL_Surface * screen;
|
||||
// SDL_Surface * image, * tmp;
|
||||
SDL_Rect blitrect = {0, 0, 0, 0};
|
||||
int i, j;
|
||||
int n, direction, couleur, new_couleur;
|
||||
unsigned char r,g,b;
|
||||
int nr, ng, nb;
|
||||
|
||||
if (SDL_Init(SDL_INIT_VIDEO) == -1)
|
||||
{
|
||||
printf("Erreur lors de l'initialisation de SDL: %s\n", SDL_GetError());
|
||||
return 1;
|
||||
}
|
||||
#define SDL_VIDEO_FLAGS (SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_ANYFORMAT)
|
||||
|
||||
screen = SDL_SetVideoMode(640, 480, 24, SDL_VIDEO_FLAGS);
|
||||
// screen = SDL_SetVideoMode(270, 16, 24, SDL_VIDEO_FLAGS);
|
||||
|
||||
printf("Mode video: %dx%dx%d\n", screen->w, screen->h,
|
||||
screen->format->BitsPerPixel);
|
||||
//SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 0xff, 0xff, 0xff));
|
||||
SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 254, 254, 254));
|
||||
|
||||
i=320;
|
||||
j=240;
|
||||
direction=1;
|
||||
//for (j = 0; j < screen->h; j++) {
|
||||
//for (i = 0; i < screen->w; i++) {
|
||||
|
||||
// for (n = 0; n < 2000; n++) {
|
||||
while (0!=1) {
|
||||
|
||||
//SDL_LockSurface(screen);
|
||||
//r=0;
|
||||
//GetPixelColor(screen,i,j,r,g,b);
|
||||
//r=getpixel(screen,i,j);
|
||||
SDL_GetRGB(getpixel(screen,i,j),screen->format,&r,&g,&b);
|
||||
//printf("direction=%i - ",direction);
|
||||
/* printf("n=%i - ",n);
|
||||
printf("i=%i - ",i);
|
||||
printf("j=%i - ",j);
|
||||
printf("r=%i - ",r);
|
||||
printf("g=%i - ",g);
|
||||
printf("b=%i - ",b);
|
||||
*/
|
||||
if ((r==254) && (g==254) && (b==254))
|
||||
couleur=0;
|
||||
else if (r==254 && g==0 && b==0)
|
||||
couleur=1;
|
||||
else if (r==0 && g==254 && b==0)
|
||||
couleur=2;
|
||||
else if (r==0 && g==0 && b==254)
|
||||
couleur=3;
|
||||
|
||||
|
||||
// printf("couleur=%i - ",couleur);
|
||||
//printf("direction=%i - ",direction);
|
||||
|
||||
|
||||
/// /// /// /// /// /// /// /// /// /// /// /// /// ///
|
||||
/// for different gliders ///
|
||||
/// on each 4 following cases ///
|
||||
/// change new_couleur from 0 to 3 ///
|
||||
/// change direction from direction+0 to direction+3 ///
|
||||
// /// /// /// /// /// /// /// /// /// /// /// /// ///
|
||||
/// ///
|
||||
/// examples: ///
|
||||
/// ///
|
||||
/// --- 1: geometric shape: ///
|
||||
/// case 0: new_couleur=1 / direction=direction+3 ///
|
||||
/// case 1: new_couleur=2 / direction=direction+1 ///
|
||||
/// case 2: new_couleur=3 / direction=direction+1 ///
|
||||
/// case 3: new_couleur=0 / direction=direction+3 ///
|
||||
/// ///
|
||||
/// --- 2: center fractal with up down left right arms ///
|
||||
/// case 0: new_couleur=1 / direction=direction+3 ///
|
||||
/// case 1: new_couleur=2 / direction=direction+1 ///
|
||||
/// case 2: new_couleur=3 / direction=direction+1 ///
|
||||
/// case 3: new_couleur=0 / direction=direction+3 ///
|
||||
/// ///
|
||||
/// --- 2: center fractal then canon ///
|
||||
/// case 0: new_couleur=1 / direction=direction+2 ///
|
||||
/// case 1: new_couleur=2 / direction=direction+3 ///
|
||||
/// case 2: new_couleur=3 / direction=direction+2 ///
|
||||
/// case 3: new_couleur=0 / direction=direction+1 ///
|
||||
// /// /// /// /// /// /// /// /// /// /// /// /// ///
|
||||
|
||||
|
||||
/// --- 1: geometric shape: ///
|
||||
switch(couleur){
|
||||
case 0:
|
||||
new_couleur=1;
|
||||
direction=direction+3;
|
||||
break;
|
||||
case 1:
|
||||
new_couleur=2;
|
||||
direction=direction+1;
|
||||
break;
|
||||
case 2:
|
||||
new_couleur=3;
|
||||
direction=direction+1;
|
||||
break;
|
||||
case 3:
|
||||
new_couleur=0;
|
||||
direction=direction+3;
|
||||
break;
|
||||
}
|
||||
|
||||
/// --- 2: center fractal with up down left right arms ///
|
||||
/*
|
||||
switch(couleur){
|
||||
case 0:
|
||||
new_couleur=1;
|
||||
direction=direction+1;
|
||||
break;
|
||||
case 1:
|
||||
new_couleur=2;
|
||||
direction=direction+1;
|
||||
break;
|
||||
case 2:
|
||||
new_couleur=3;
|
||||
direction=direction+1;
|
||||
break;
|
||||
case 3:
|
||||
new_couleur=0;
|
||||
direction=direction+2;
|
||||
break;
|
||||
}
|
||||
*/
|
||||
|
||||
/// --- 3: center fractal then canon ///
|
||||
/*
|
||||
switch(couleur){
|
||||
case 0:
|
||||
new_couleur=1;
|
||||
direction=direction+2;
|
||||
break;
|
||||
case 1:
|
||||
new_couleur=2;
|
||||
direction=direction+3;
|
||||
break;
|
||||
case 2:
|
||||
new_couleur=3;
|
||||
direction=direction+2;
|
||||
break;
|
||||
case 3:
|
||||
new_couleur=0;
|
||||
direction=direction+1;
|
||||
break;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
direction = direction % 4;
|
||||
// printf("direction=%i\n",direction);
|
||||
nr=0;
|
||||
ng=0;
|
||||
nb=0;
|
||||
//SDL_LockSurface(screen);
|
||||
switch(new_couleur){
|
||||
case 0:
|
||||
nr=254;
|
||||
ng=254;
|
||||
nb=254;
|
||||
break;
|
||||
case 1:
|
||||
nr=254;
|
||||
ng=0;
|
||||
nb=0;
|
||||
break;
|
||||
case 2:
|
||||
nr=0;
|
||||
ng=254;
|
||||
nb=0;
|
||||
break;
|
||||
case 3:
|
||||
nr=0;
|
||||
ng=0;
|
||||
nb=254;
|
||||
break;
|
||||
}
|
||||
putPixel(screen, i, j, SDL_MapRGB(screen->format, nr, ng, nb));
|
||||
//putPixel(screen, i, j, SDL_MapRGB(screen->format, 0xfe, 0, 0));
|
||||
|
||||
switch(direction){
|
||||
case 0:
|
||||
j=j-1;
|
||||
if (j<0)
|
||||
j=479;
|
||||
break;
|
||||
case 1:
|
||||
i=i+1;
|
||||
if (i>639)
|
||||
i=0;
|
||||
break;
|
||||
case 2:
|
||||
j=j+1;
|
||||
if (j>479)
|
||||
j=0;
|
||||
break;
|
||||
case 3:
|
||||
i=i-1;
|
||||
if (i<0)
|
||||
i=639;
|
||||
break;
|
||||
}
|
||||
//SDL_UnlockSurface(screen);
|
||||
SDL_Flip(screen);
|
||||
}
|
||||
//}
|
||||
//sleep(5);
|
||||
SDL_Quit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user