begin process at 2012 05 27 16:19:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > LE FEU QUI VA CONSUMMER VOTRE ECRAN

LE FEU QUI VA CONSUMMER VOTRE ECRAN


 Information sur la source

 Description

Cliquez pour voir la capture en taille normale
Cette petite source génére un effet de feu dans une fenêtre SDL, bon j'avou las technique n'est pas de moi mais je l'ai transposé a ma sauce.
ce code fonctionne seulement avec une profondeur de couleur de 24 bits, car je trouve qu'un octet par composante de couleur est la plus logique et le plus simple à gérer.
J'ai éssayé de l'optimiser au mieux, si vous avez des suggestions, je suis preneur.


 Conclusion

#include <SDL/SDL.h>
#include <stdlib.h>

const int WIDTH = 400; /* largeur de l'ecran */
const int HEIGHT = 300; /* hauteur de l'ecran */
const int BPP = 24; /* profondeur de couleur */
char loop = 1; /* flag de boucle*/
Uint8 c; /*variable pour la couleur choisie au hazard sur les deux lignes du bas*/
SDL_Surface *screen; /*surface ecran*/
SDL_Event event;/*pour la gestion des événements*/

int main()
{
int WIDTH3 = 3 * WIDTH; /* Décalage d'un pixel vers le bas */
long tot = WIDTH * (HEIGHT - 2); /* adresse maximum de l'affichage des flammes*/
long k;/*compteur parcourant l'ecran moins deux lignes*/
long dec;/*décalage d'un pixel vers la bas pour k*/
int red;/* composante rouge*/
int green;/*composante verte*/
int blue;/*composante rouge*/
SDL_Init(SDL_INIT_VIDEO);/*Initialisation de SDL pour l'affichage*/
SDL_WM_SetCaption("FIRE", NULL);/*Texte de la fenêtre*/
    screen = SDL_SetVideoMode(WIDTH, HEIGHT, BPP, SDL_DOUBLEBUF | SDL_HWSURFACE);/*Définition de la surface primaire*/
SDL_FillRect(screen, NULL, 0);/* on peint tout en noir*/

while(loop)
{
while(SDL_PollEvent(&event))
        {
            switch(event.type)
            {
                case SDL_QUIT:
                 loop = 0;
                 break;
                case SDL_KEYDOWN:
                 if(event.key.keysym.sym == SDLK_q) loop = 0; /* si on appuie sur q, on quitte*/
break;
default:
                 break;
            }
        }
/*SDL_LockSurface(screen);*/
for(k = tot; k < (WIDTH * HEIGHT); k++) /*boucle parcourant l'adresse des deux derniéres ligne de l'ecran*/
{
c = (rand() / (RAND_MAX /155)) + 100;
*((Uint8*)(screen->pixels) + k * 3 + 2) = c; /*on positionne à cette adresse qui correspond à la composante rouge, une valeur choisie au hazard entre 100 et 255*/
*((Uint8*)(screen->pixels) + k * 3 + 1) = c;/* """"" verte """"*/
*((Uint8*)(screen->pixels) + k * 3) = c;/*"""" bleu """""*/
}
for(k = 0; k < tot; k++)
{
red = 0; /* a chaque passage dans la boucle, on initialise les couleurs qui vont etre calculé à 0*/
green = 0;
blue = 0;
dec = 3 * (k + WIDTH); /*calcul du décalage qui correspond à l'adresse du pixel situé une ligne en dessous*/
red += *((Uint8*)(screen->pixels) + dec + 2); /*on lit la composante rouge du pixel en dessous du pixel courant*/
green += *((Uint8*)(screen->pixels) + dec + 1);/*idem pour le vert*/
blue += *((Uint8*)(screen->pixels) + dec);/*idem pour le bleu*/
red += *((Uint8*)(screen->pixels) + dec + WIDTH3  + 2);/* on lit la composante rouge du pixel 2 * en dessous du pixel courant*/
green += *((Uint8*)(screen->pixels) + dec + WIDTH3 + 1);/* idem pour le vert*/
blue += *((Uint8*)(screen->pixels) + dec + WIDTH3);/* idem pour le bleu*/
red += *((Uint8*)(screen->pixels) + dec + 5);/*on lit la composante rouge du pixel en dessous à droite du pixel courant*/
green += *((Uint8*)(screen->pixels) + dec + 4);/*idem pour le vert*/
blue += *((Uint8*)(screen->pixels) + dec + 3);/*idem pour le bleu*/
red += *((Uint8*)(screen->pixels) + dec - 1);/* on lit la composante rouge du pixel situé en dessoua à gauche*/
green += *((Uint8*)(screen->pixels) + dec - 2);/*idem pour le vert*/
blue += *((Uint8*)(screen->pixels) + dec - 3);/*idem pour le bleu*/
if(red > 1) red -= 1; else red = 0; /* si la composante rouge clculé on la décrémente de 2 ce qui à pour effet d'attenuer la couleur du feu plus il monte*/
if(green > 5) green -= 5; else green = 0;
if(blue > 100) blue -= 100; else blue = 0;
red >>= 2; /*calcul de la moyenne du rouge red /= 4  = red >>= 2 (décalage de 2 bits vers la droite (normalement c'est plus rapide)*/
green >>= 2;
blue >>=2;
*((Uint8*)(screen->pixels) + k * 3 + 2) = red; /*on ecrit le pixel courant avec les composantes calculées*/
*((Uint8*)(screen->pixels) + k * 3 + 1) = green;
*((Uint8*)(screen->pixels) + k * 3) = blue;
}

SDL_Flip(screen);

}
return 0;
}




 Sources du même auteur

Source avec Zip Source avec une capture LE JEU DU SNAKE AVEC SDL

 Sources de la même categorie

Source avec Zip Source avec une capture PLANNING D'EQUIPE par grephit
Source avec Zip APPLICATION DE DESSIN DE QUELQUES FIGURES par laguchori
Source avec Zip Source avec une capture HDR EXPOSURE FUSION par mecrosoft
Source avec Zip Source avec une capture IRC CLIENT MULTISERVEUR EN MFC (TXIRC) par TeniX
Source avec Zip ENTETE DU FICHIER BMP (BIPMAP) par k.Lutchi

 Sources en rapport avec celle ci

Source avec Zip EVALUATEUR D'EXPRESSION ARITHMÉTIQUE par matrx180vTitanium
Source avec Zip Source avec une capture CONTACTS MANAGER par eapaceinfo
Source avec Zip Source avec une capture OPENCL : CALCUL ET AFFICHAGE DU GRADIENT COULEUR D'UNE WEBCA... par ciddiju
Source avec Zip FEUDIRECTX par f_l_a_s_h_b_a_c_k
Source avec Zip Source avec une capture EFFET MATRIX EN SDL [CODE EN C] par omer9311

Commentaires et avis

Commentaire de xman_genius le 26/09/2006 16:04:39

salut j'aimerai bien avoir la biblio <SDL/SDL.h> pour compiler la source et merci

Commentaire de remram44 le 02/10/2006 17:57:29

www.libsdl.org

Commentaire de Mal_au_DOS le 21/10/2006 20:35:45

Pas mal c'est vrai que ça fait style...
C'est important d'avoir quelques programmes comme ça créés pour la beauté artistique :)

Commentaire de z189632 le 31/05/2007 15:25:40

j ai l'impression du DEJA VU !! ptet quelque part par ici : http://www.gnurou.org/writing/linuxmag/sdl/partie4 ; lol sinon je voudrais savoir si vous travaillez encore sur cet effet (optimisation, visuel, texture, scanline ...)  ;;

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

effet graphique pour aide contextuelle [ par bloobird0 ] salut tout le monde,je viens de d&#233;couvrir Visual Assist pour Visual Studio que je trouve assez pratique.Dans la fen&#234;tre des options de ce pl SOS Interface Graphique SOS [ par abdoulax ] Salut, j'ai besoin de r&#233;aliser une interface graphique en C++, je sais kil est possible de la r&#233;aliser en faisant glisser les &#233;l&#233;m interface graphique [ par fredd_07 ] Salut, est-ce que quelqu'un sait comment installer les librairies GTK+ sur MAC OSX? Merci d'avance Graphique Graphic.h en langage C [ par hicham246 ] Salut ,,, svp , j'ai un projet en C , et je veux inserer des image et annimation dans les fenetres du Dos dans les quelles&nbsp; est compil&#233;s un MSchart graphique sous Visual C++ [ par The WidoW ] Bonjour,Je suis en stage dans un grand laboratoire de recherche...On m'a demand&#233; de cr&#233;er un logiciel pour une manip...J'ai du mal avec le c Composant PNG C++Builder [ par K0rr1gan ] Bonjour, je suis a la recherche d'un composant graphique TImage supportant le PNG pour BCB6. Je sais que ce composant existe pour Delphi, mais je n'a interface graphique style vc6 [ par cesdejong ] Bonjour,j'ai une question &#224; laquelle bon nombre d'entre vous sauront sans doute facilement r&#233;pondre. Je souhaite r&#233;aliser une interface Un graphique simple à mettre en place [ par Oeil_de_taupe ] Bonjour les codeurs, J'ai fait un prog qui r&#233;cup&#232;re le son depuis une entr&#233;e audio, jusqu'&#224; la aucun probl&#232;me (je r&#233;cup graphique cpp [ par gabriel_jm ] bonjour,je suis en train de&nbsp;faire un programme qui g&#233;n&#232;re des points &#224; l'aide de devcpp, ces points pourront avoir jusqu'&#224; 6 Editeur de map->interface graphique [ par dletozeun ] Bonjour,Je voudrais faire une interface grphique windows pour un editeur de map.Cet edtiteur serait compos&#233; de plusieurs fenetres OpenGL avec aut


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,232 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales