Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL changer taille d'une image

Anonyme
    21 janvier 2010 à 12:17:40

    Bonjour!

    Comment je peux changer la taille d'une image en SDL?
    Je veux qu'une SDL_Surface aie une taille proportionnelle à la taille variable de la fenêtre.

    Merci en avance pour vos réponses
    Kalsan
    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2010 à 13:54:02

      Pour changer la taille d'une surface, il suffit de changer son attribut h ou w :

      SDL_Surface *test = NULL;
      test = Load_BMP("monImage.bmp");
      
      test->w = 100; /* Change la longueur */
      test->h = 100; /* Change la hauteur */
      


      Cependant cela tronque l'image pour arriver à la bonne taille, si tu souhaites la garder entière en la redimensionnant alors je te conseil d'utiliser SDL_gfx et sa fonction rotozoom. ;)
      • Partager sur Facebook
      • Partager sur Twitter
        21 janvier 2010 à 14:19:45

        Citation : Taurre

        Pour changer la taille d'une surface, il suffit de changer son attribut h ou w :

        SDL_Surface *test = NULL;
        test = Load_BMP("monImage.bmp");
        
        test->w = 100; /* Change la longueur */
        test->h = 100; /* Change la hauteur */
        



        Cependant cela tronque l'image pour arriver à la bonne taille, si tu souhaites la garder entière en la redimensionnant alors je te conseil d'utiliser SDL_gfx et sa fonction rotozoom. ;)



        Ce que tu proposes est extrêmement déconseillé : tu perds la cohérence entre l'image pure (le tableau de pixels ne bouge pas) et les données w et h. Meme si - je pense - le pitch peut te sauver, c'est a éviter absolument.

        Pour tronquer un bout d'image, on preferera recréer une surface, et faire un blit partiel dessus.

        Quand au redimensionnement, il faut calculer ça sur les pixels. J'ai un exemple a la main sur mon site web, sinon, la lib SDL_gfx te permet de faire ça.
        • Partager sur Facebook
        • Partager sur Twitter

        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

          21 janvier 2010 à 17:56:53

          Citation : Fvirtman


          Ce que tu proposes est extrêmement déconseillé : tu perds la cohérence entre l'image pure (le tableau de pixels ne bouge pas) et les données w et h. Meme si - je pense - le pitch peut te sauver, c'est a éviter absolument.

          Pour tronquer un bout d'image, on preferera recréer une surface, et faire un blit partiel dessus.



          Je l'ignorais, merci pour cette précision ;)
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            30 janvier 2010 à 11:21:42

            La solution du site web de fvirtman est pas mal et fonctionne.
            MAIS: La fonction a des problèmes à traitre la transparance. Quand j'ai ajouté un canal alpha à la fonction Strechblit juste avant le blit, seulement une partie de l'image est rendue transparente. Voici au zoom normal: Echecs_zoom_normal


            Et voici en zoom agrandi:
            Echecs_zomm_agrandi

            Tout le bleu devrait être supprimé. Comment faire?
            • Partager sur Facebook
            • Partager sur Twitter
              4 juillet 2010 à 15:54:21

              ouvrez l'image dans paint supprimer le bleu et enregistrer l'mage sous format gif.
              Cela devrait marcher je crois
              • Partager sur Facebook
              • Partager sur Twitter
                4 juillet 2010 à 15:59:48

                ca depend du format.
                Deja, sous paint, par default l'enregistrement est destructeur. Preferer un autre logiciel, style photophiltre.

                Ensuite, il aura beau avoir le meilleur logiciel, s'il enregistre en format jpg, il y aura degradation.

                Le mieux, c'est png je pense. bmp aussi, mais bon, c'est pas compresser.

                Note : peut etre que les derniere version de paint peuvent enregistrer sans degradation, je ne suis pas au courant.
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  5 juillet 2010 à 10:42:15

                  Hm, les PNG ne sont pas déformés correctement...
                  n.b. Paint.NET fait très bien de telles modificaitions.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 juillet 2010 à 11:26:34

                    Je revois cette question revenir de temps en temps.
                    "Redimensionnement avec SDL en fonction de la résolution."

                    Ce qui cloche, c'est le "en fonction de la résolution". Les programmes avec choix de résolution ont été inventés (démocratisés pour être exact), avec l'arrivée de la 3D.

                    En effet, en 3D, la résolution, on s'en tape : la carte graphique adapte, la résolution n'est qu'un paramètre, tout s'adapte.
                    SDL, c'est la vieille école, bien 2D. A l'époque, les jeux et applications définissaient une résolution "standard" une fois pour toutes, et a part quelques exceptions, on ne la changeait pas.

                    Le problème est que les programmeurs actuels utilisent un SDL de la vieille école, et essaient de reproduire ce qu'ils voient qui est fait avec des librairies 3D :) Anachronisme...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                      5 juillet 2010 à 11:46:29

                      ton probleme est que lorsque tu demande de rendre le bleu transparent, tu demande UN bleu. Or, les couleur dans ton image sont des NUANCE de bleu, nuance introduit par paint (a moins que paint.net ne fasse pas ca).

                      Prend un .png ou .bmp carrement, met un bleu uniforme tout autour et tu devrai plus avoir de pb
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        5 juillet 2010 à 12:37:49

                        C'est un bleu constant... :S
                        Si je n'utilise pas la fonction pour retailler, la transparence marche parfaitement. Mais avec la fonction, ça donne cet aspect difficile.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 juillet 2010 à 12:55:27

                          fais nous voir le code stp.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            5 juillet 2010 à 17:05:07

                            Bon c'était sensé être un jeu d'échec, mais c'était un échec :p
                            Voici le CS:

                            #include <cstdlib>
                            #include <iostream>
                            #include <SDL/SDL.h>
                            #include <SDL/SDL_image.h>
                            
                            using namespace std;
                            
                            
                            void UpdateEvents(char* key,SDL_Surface** pscreen)
                            {
                            	SDL_Event event;
                            	while(SDL_PollEvent(&event))
                            	{
                            		switch (event.type)
                            		{
                            		case SDL_KEYDOWN:
                            			key[event.key.keysym.sym]=1;
                            			break;
                            		case SDL_KEYUP:
                            			key[event.key.keysym.sym]=0;
                            			break;
                            		case SDL_VIDEORESIZE:
                            			*pscreen = SDL_SetVideoMode(event.resize.w,event.resize.h,32,SDL_SWSURFACE|SDL_DOUBLEBUF|SDL_VIDEORESIZE);  
                            			break;
                            		}
                            	}
                            }
                            
                            SDL_Rect Rect(int x,int y,int w=0,int h=0)		// pour faire un rectangle plus vite
                            {
                            	SDL_Rect r;
                            	r.x=x;
                            	r.y=y;
                            	r.w=w;
                            	r.h=h;
                            	return r;
                            }
                            
                            SDL_Surface* LoadBMP(char* fichier,int vram=1)  // voir tutorial 2.1.2
                            {
                            	SDL_Surface* f = SDL_LoadBMP(fichier);	// charge l'image dans f en RAM
                            	if (!f)
                            	{
                            		printf("Echec chargement %s\n",fichier);
                            		SDL_Quit();
                            		exit(-1);
                            	}
                            	SDL_Surface* r=NULL;
                            	if (vram)
                            		r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);// cree une image en VRAM
                            	if (r==NULL) vram=0;	// Si plus de place en VRAM, alors r= NULL.
                            	if (!vram)
                            		r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);  // cree une image en RAM
                            	SDL_Rect R=Rect(0,0,f->w,f->h);
                            	SDL_BlitSurface(f,NULL,r,&R);	// copie l'image f de la RAM vers firstscreen en VRAM
                            	SDL_FreeSurface(f);      // supprime la surface f : inutile maintenant --> libere la mémoire
                            	return r;
                            }
                            
                            unsigned char GetPixelComp32(SDL_Surface* surface,int x,int y,int c)
                            { // recupere le pixel x,y de la surfece "surface", la composante c (3 composantes RGB)
                            	unsigned char *p = ((unsigned char*)surface->pixels) + y * surface->pitch + x * 4;
                            	return p[c];
                            }
                            
                            void PutPixelComp32(SDL_Surface* surface,int x,int y,int c,unsigned char val)
                            { // ecrit la composante c (3 composantes RGB) sur le pixel x,y de la surface "surface"
                            	unsigned char *p = ((unsigned char*)surface->pixels) + y * surface->pitch + x * 4;
                            	p[c] = val;
                            }
                            
                            void Stretch_Nearest(SDL_Surface* src,SDL_Surface* dest)
                            {
                            	int i,j,k;
                            	double rx,ry;
                            	rx = dest->w*1.0/src->w;
                            	ry = dest->h*1.0/src->h;
                            	for(i=0;i<dest->w;i++)
                            		for(j=0;j<dest->h;j++)
                            			for(k=0;k<3;k++)
                            			{
                            				unsigned char pix;
                            				pix = GetPixelComp32(src,(int)(i/rx),(int)(j/ry),k);
                            				PutPixelComp32(dest,i,j,k,pix);
                            			}
                            }
                            
                            void Stretch_Linear(SDL_Surface* src,SDL_Surface* dest)
                            {
                            	int i,j,k;
                            	double rx,ry;
                            	rx = dest->w*1.0/src->w;
                            	ry = dest->h*1.0/src->h;
                            	for(i=0;i<dest->w;i++)
                            		for(j=0;j<dest->h;j++)
                            		{
                            			unsigned char pix;
                            			double valx,valy,fx,fy;
                            			int minx,miny,maxx,maxy;
                            			valx = i/rx;
                            			valy = j/ry;
                            			minx = (int)valx;
                            			miny = (int)valy;
                            			maxx = minx+1;
                            			if (maxx>=src->w)
                            				maxx--;
                            			maxy = miny+1;
                            			if (maxy>=src->h)
                            				maxy--;
                            			fx = valx-minx;  // garde partie flottante
                            			fy = valy-miny;
                            			for(k=0;k<3;k++)
                            			{
                            				pix = (unsigned char)(GetPixelComp32(src,minx,miny,k)*(1-fx)*(1-fy) + GetPixelComp32(src,maxx,miny,k)*fx*(1-fy)
                            					+ GetPixelComp32(src,minx,maxy,k)*(1-fx)*fy + GetPixelComp32(src,maxx,maxy,k)*fx*fy);
                            				PutPixelComp32(dest,i,j,k,pix);
                            			}
                            		}
                            }
                            
                            void Strechblit(SDL_Surface* src,SDL_Surface* dest,int skalW,int skalH,SDL_Rect pos)
                            {
                            	SDL_Surface* img = SDL_CreateRGBSurface(SDL_SWSURFACE,skalW,skalH,32,0,0,0,0);
                            	//Stretch_Nearest(src,img);
                            	Stretch_Linear(src,img);
                                SDL_SetColorKey(img,SDL_SRCCOLORKEY,SDL_MapRGB(dest->format,0,0,255));
                            	SDL_BlitSurface(img,NULL,dest,&pos);
                            	SDL_FreeSurface(img);
                            }
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            
                            enum {BAUER,SPRINGER,LAUFER,TURM,DAME,KONIG};
                            enum {BW,BS,GW,GS};  // B=belegt durch Figur         G=Gefährdet durch Figur         W=Weiss S=Schwarz
                            
                            struct figur
                            {
                              int typ;
                              int pi;
                              int pj;
                              bool aktiv;
                            };
                            
                            struct feld
                            {
                              int status;
                              bool markiert;
                            };
                            
                            struct Mark
                            {
                              int i;
                              int j;
                              bool a;
                            };
                            
                            bool pc=false;
                            figur sf[2][16];  // 0=Schwarz 1=Weiss
                            feld fld[8][8];
                            Mark mark1,mark2;
                            
                            int main(int argc, char *argv[])
                            {
                                // Initialize
                                SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER);
                                
                                // Variables
                                SDL_Surface *screen,*sfeld;
                                SDL_Rect rscreen,rfeld;
                                SDL_Surface *sbauerS,*sbauerW,*sdameS,*sdameW,*skonigS,*skonigW,*slauferS,*slauferW,*sspringerS,*sspringerW,*sturmS,*sturmW;
                                SDL_Rect rbauerS,rbauerW,rdameS,rdameW,rkonigS,rkonigW,rlauferS,rlauferW,rspringerS,rspringerW,rturmS,rturmW;
                                SDL_Event event;
                                bool quit=false;
                                
                                const int prgw=680,prgh=680;
                                int pw=prgw,ph=prgh;
                                const char prgname[500]="Schach_1-1";
                                
                                for(int n=0;n<8;n++)
                                {
                                  for(int m=0;m<8;m++)
                                  {
                                    fld[n][m].status=0;
                                    fld[n][m].markiert=false;
                                  }
                                }
                                
                                
                                // Figuren einstellen
                                // Schwarz
                                sf[0][0].aktiv=true;
                                sf[0][0].typ=TURM;
                                sf[0][0].pi=0;
                                sf[0][0].pj=0;
                                
                                sf[0][1].aktiv=true;
                                sf[0][1].typ=SPRINGER;
                                sf[0][1].pi=1;
                                sf[0][1].pj=0;
                                
                                sf[0][2].aktiv=true;
                                sf[0][2].typ=LAUFER;
                                sf[0][2].pi=2;
                                sf[0][2].pj=0;
                                
                                sf[0][3].aktiv=true;
                                sf[0][3].typ=DAME;
                                sf[0][3].pi=3;
                                sf[0][3].pj=0;
                                
                                sf[0][4].aktiv=true;
                                sf[0][4].typ=KONIG;
                                sf[0][4].pi=4;
                                sf[0][4].pj=0;
                                
                                sf[0][5].aktiv=true;
                                sf[0][5].typ=LAUFER;
                                sf[0][5].pi=5;
                                sf[0][5].pj=0;
                                
                                sf[0][6].aktiv=true;
                                sf[0][6].typ=SPRINGER;
                                sf[0][6].pi=6;
                                sf[0][6].pj=0;
                                
                                sf[0][7].aktiv=true;
                                sf[0][7].typ=TURM;
                                sf[0][7].pi=7;
                                sf[0][7].pj=0;
                                
                                sf[0][8].aktiv=true;
                                sf[0][8].typ=BAUER;
                                sf[0][8].pi=0;
                                sf[0][8].pj=1;
                                
                                sf[0][9].aktiv=true;
                                sf[0][9].typ=BAUER;
                                sf[0][9].pi=1;
                                sf[0][9].pj=1;
                                
                                sf[0][10].aktiv=true;
                                sf[0][10].typ=BAUER;
                                sf[0][10].pi=2;
                                sf[0][10].pj=1;
                                
                                sf[0][11].aktiv=true;
                                sf[0][11].typ=BAUER;
                                sf[0][11].pi=3;
                                sf[0][11].pj=1;
                                
                                sf[0][12].aktiv=true;
                                sf[0][12].typ=BAUER;
                                sf[0][12].pi=4;
                                sf[0][12].pj=1;
                                
                                sf[0][13].aktiv=true;
                                sf[0][13].typ=BAUER;
                                sf[0][13].pi=5;
                                sf[0][13].pj=1;
                                
                                sf[0][14].aktiv=true;
                                sf[0][14].typ=BAUER;
                                sf[0][14].pi=6;
                                sf[0][14].pj=1;
                                
                                sf[0][15].aktiv=true;
                                sf[0][15].typ=BAUER;
                                sf[0][15].pi=7;
                                sf[0][15].pj=1;
                                
                                
                                // Weiss
                                sf[1][0].aktiv=true;
                                sf[1][0].typ=TURM;
                                sf[1][0].pi=0;
                                sf[1][0].pj=7;
                                
                                sf[1][1].aktiv=true;
                                sf[1][1].typ=SPRINGER;
                                sf[1][1].pi=1;
                                sf[1][1].pj=7;
                                
                                sf[1][2].aktiv=true;
                                sf[1][2].typ=LAUFER;
                                sf[1][2].pi=2;
                                sf[1][2].pj=7;
                                
                                sf[1][3].aktiv=true;
                                sf[1][3].typ=DAME;
                                sf[1][3].pi=3;
                                sf[1][3].pj=7;
                                
                                sf[1][4].aktiv=true;
                                sf[1][4].typ=KONIG;
                                sf[1][4].pi=4;
                                sf[1][4].pj=7;
                                
                                sf[1][5].aktiv=true;
                                sf[1][5].typ=LAUFER;
                                sf[1][5].pi=5;
                                sf[1][5].pj=7;
                                
                                sf[1][6].aktiv=true;
                                sf[1][6].typ=SPRINGER;
                                sf[1][6].pi=6;
                                sf[1][6].pj=7;
                                
                                sf[1][7].aktiv=true;
                                sf[1][7].typ=TURM;
                                sf[1][7].pi=7;
                                sf[1][7].pj=7;
                                
                                sf[1][8].aktiv=true;
                                sf[1][8].typ=BAUER;
                                sf[1][8].pi=0;
                                sf[1][8].pj=6;
                                
                                sf[1][9].aktiv=true;
                                sf[1][9].typ=BAUER;
                                sf[1][9].pi=1;
                                sf[1][9].pj=6;
                                
                                sf[1][10].aktiv=true;
                                sf[1][10].typ=BAUER;
                                sf[1][10].pi=2;
                                sf[1][10].pj=6;
                                
                                sf[1][11].aktiv=true;
                                sf[1][11].typ=BAUER;
                                sf[1][11].pi=3;
                                sf[1][11].pj=6;
                                
                                sf[1][12].aktiv=true;
                                sf[1][12].typ=BAUER;
                                sf[1][12].pi=4;
                                sf[1][12].pj=6;
                                
                                sf[1][13].aktiv=true;
                                sf[1][13].typ=BAUER;
                                sf[1][13].pi=5;
                                sf[1][13].pj=6;
                                
                                sf[1][14].aktiv=true;
                                sf[1][14].typ=BAUER;
                                sf[1][14].pi=6;
                                sf[1][14].pj=6;
                                
                                sf[1][15].aktiv=true;
                                sf[1][15].typ=BAUER;
                                sf[1][15].pi=7;
                                sf[1][15].pj=6;
                                
                                
                                // Make Screen
                                screen=SDL_SetVideoMode(prgw,prgh,32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
                                SDL_WM_SetCaption(prgname,NULL);
                                SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,200,200,200));
                                
                                rbauerS.x=0; rbauerS.y=0;
                                sbauerS=SDL_LoadBMP("images/bauerS.bmp");
                                SDL_BlitSurface(sbauerS,NULL,screen,&rbauerS);
                                
                                rbauerW.x=0; rbauerW.y=85;
                                sbauerW=SDL_LoadBMP("images/bauerW.bmp");
                                SDL_BlitSurface(sbauerW,NULL,screen,&rbauerW);
                                
                                rdameS.x=85; rdameS.y=0;
                                sdameS=SDL_LoadBMP("images/dameS.bmp");
                                SDL_BlitSurface(sdameS,NULL,screen,&rdameS);
                                
                                rdameW.x=85; rdameW.y=85;
                                sdameW=SDL_LoadBMP("images/dameW.bmp");
                                SDL_BlitSurface(sdameW,NULL,screen,&rdameW);
                                
                                rkonigS.x=170; rkonigS.y=0;
                                skonigS=SDL_LoadBMP("images/konigS.bmp");
                                SDL_BlitSurface(skonigS,NULL,screen,&rkonigS);
                                
                                rkonigW.x=170; rkonigW.y=85;
                                skonigW=SDL_LoadBMP("images/konigW.bmp");
                                SDL_BlitSurface(skonigW,NULL,screen,&rkonigW);
                                
                                rlauferS.x=255; rlauferS.y=0;
                                slauferS=SDL_LoadBMP("images/lauferS.bmp");
                                SDL_BlitSurface(slauferS,NULL,screen,&rlauferS);
                                
                                rlauferW.x=255; rlauferW.y=85;
                                slauferW=SDL_LoadBMP("images/lauferW.bmp");
                                SDL_BlitSurface(slauferW,NULL,screen,&rlauferW);
                                
                                rspringerS.x=340; rspringerS.y=0;
                                sspringerS=SDL_LoadBMP("images/springerS.bmp");
                                SDL_BlitSurface(sspringerS,NULL,screen,&rspringerS);
                                
                                rspringerW.x=340; rspringerW.y=85;
                                sspringerW=SDL_LoadBMP("images/springerW.bmp");
                                SDL_BlitSurface(sspringerW,NULL,screen,&rspringerW);
                                
                                rturmS.x=425; rturmS.y=0;
                                sturmS=SDL_LoadBMP("images/turmS.bmp");
                                SDL_BlitSurface(sturmS,NULL,screen,&rturmS);
                                
                                rturmW.x=425; rturmW.y=85;
                                sturmW=SDL_LoadBMP("images/turmW.bmp");
                                SDL_BlitSurface(sturmW,NULL,screen,&rturmW);
                                
                                SDL_Flip(screen);
                                
                                
                                
                                
                                
                                mark1.a=false;
                                mark2.a=false;
                                
                                // Main Event Routine
                                event.type=SDL_MOUSEMOTION;
                                bool akt=true;
                                char key[SDLK_LAST]={0};
                                while(!quit)
                                {
                                  // events abfragen
                                  SDL_WaitEvent(&event);
                                  switch(event.type)
                                  {
                                    case SDL_KEYDOWN:
                                         {
                                           switch(event.key.keysym.sym)
                                           {
                                             case SDLK_ESCAPE:
                                                  quit=true;
                                                  break;
                                             
                                             case SDLK_F4:
                                                  quit=true;
                                                  break;
                                                  
                                             case SDLK_w:
                                                  screen=SDL_SetVideoMode(prgw,prgh, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
                                                  pw=prgw;
                                                  ph=prgh;
                                                  akt=true;
                                                  break;
                                                  
                                             case SDLK_a:
                                                  akt=true;
                                                  break;
                                           }
                                         }
                                         break;
                                         
                                    case SDL_MOUSEBUTTONDOWN:
                                         {
                                           if(!mark1.a)  // Falls die erste Markierung noch nicht gesetzt wurde
                                           {
                                             mark1.a=true;
                                             mark1.i=int(8*event.button.x/pw);
                                             mark1.j=int(8*event.button.y/ph);
                                           }else{
                                             if(!mark2.a)  // Falls dies der zweite Klick ist
                                             {
                                               if((mark1.i==int(8*event.button.x/pw))&&(mark1.j==int(8*event.button.y/ph))) // Falls zweiter Klick == erster Klick -> Annullieren
                                               {
                                                 mark1.a=false;
                                                 mark2.a=false;
                                               }else{  // Falls zweiter Klick -> Markierung setzen
                                                 mark2.a=true;
                                                 mark2.i=int(8*event.button.x/pw);
                                                 mark2.j=int(8*event.button.y/ph);
                                               }
                                             }else{ // Drei Klicks -> unmöglich
                                               mark1.a=false;
                                               mark2.a=false;
                                             }
                                           }
                                           akt=true;
                                         }
                                         break;
                                    
                                    case SDL_VIDEORESIZE:
                                         screen=SDL_SetVideoMode(event.resize.w, event.resize.h, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
                                         pw=event.resize.w;
                                         ph=event.resize.h;
                                         akt=true;
                                         break;
                                    
                                    case SDL_QUIT:
                                         quit=true;
                                         break;
                                  }
                                  
                                  
                                  
                                  
                                  if(akt)
                                  {
                                    // Anzeige aktualisieren
                                    
                                    //Kacheln
                                    int sw=1,mark;
                                    for(int j=0;j<8;j++)
                                    {
                                      for(int i=0;i<8;i++)
                                      {
                                        if((mark1.i==i)&&(mark1.j==j)||(mark2.i==i)&&(mark2.j==j)){if(!sw){mark=128;}else{mark=-127;}}else{mark=0;}
                                        
                                        rfeld.x=int((double)pw/8+((i-1)*int((double)pw/8)));
                                        //rfeld.x=int(pw*i/8);
                                        rfeld.y=int((double)ph/8+((j-1)*int((double)ph/8)));
                                        //rfeld.y=int(pw*j/8);
                                        sfeld=SDL_CreateRGBSurface(SDL_HWSURFACE, int((double)pw/8), int((double)ph/8), 32, 0, 0, 0, 0);
                                        SDL_FillRect(sfeld,NULL,SDL_MapRGB(screen->format,sw*255,sw*255+mark,sw*255));
                                        SDL_BlitSurface(sfeld,NULL,screen,&rfeld);
                                        if(sw){sw=0;}else{sw=1;}
                                      }
                                      if(sw){sw=0;}else{sw=1;}
                                    }
                                    
                                    //Figuren
                                    for(int n=0;n<16;n++)
                                    {
                                        SDL_Rect poss,posw;
                                        poss.x=int((double)pw/8+((sf[0][n].pi-1)*int((double)pw/8)));
                                        poss.y=int((double)ph/8+((sf[0][n].pj-1)*int((double)ph/8)));
                                        posw.x=int((double)pw/8+((sf[1][n].pi-1)*int((double)pw/8)));
                                        posw.y=int((double)ph/8+((sf[1][n].pj-1)*int((double)ph/8)));
                                        
                                        UpdateEvents(key,&screen);
                                        
                                        if(sf[0][n].aktiv&&sf[0][n].typ==BAUER){Strechblit(sbauerS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                        if(sf[1][n].aktiv&&sf[1][n].typ==BAUER){Strechblit(sbauerW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                        if(sf[0][n].aktiv&&sf[0][n].typ==DAME){Strechblit(sdameS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                        if(sf[1][n].aktiv&&sf[1][n].typ==DAME){Strechblit(sdameW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                        if(sf[0][n].aktiv&&sf[0][n].typ==KONIG){Strechblit(skonigS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                        if(sf[1][n].aktiv&&sf[1][n].typ==KONIG){Strechblit(skonigW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                        if(sf[0][n].aktiv&&sf[0][n].typ==LAUFER){Strechblit(slauferS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                        if(sf[1][n].aktiv&&sf[1][n].typ==LAUFER){Strechblit(slauferW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                        if(sf[0][n].aktiv&&sf[0][n].typ==SPRINGER){Strechblit(sspringerS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                        if(sf[1][n].aktiv&&sf[1][n].typ==SPRINGER){Strechblit(sspringerW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                        if(sf[0][n].aktiv&&sf[0][n].typ==TURM){Strechblit(sturmS,screen,int(screen->w/8),int(screen->h/8),poss);;}
                                        if(sf[1][n].aktiv&&sf[1][n].typ==TURM){Strechblit(sturmW,screen,int(screen->w/8),int(screen->h/8),posw);;}
                                        
                                    }
                                                    
                                    
                                    SDL_Flip(screen);
                                    akt=false;
                                  }
                                         
                                  
                                }
                                
                                
                                
                                // Free and Close
                                SDL_FreeSurface(sfeld);
                                SDL_FreeSurface(sbauerS);
                                SDL_FreeSurface(sbauerW);
                                SDL_FreeSurface(sdameS);
                                SDL_FreeSurface(sdameW);
                                SDL_FreeSurface(skonigS);
                                SDL_FreeSurface(skonigW);
                                SDL_FreeSurface(slauferS);
                                SDL_FreeSurface(slauferW);
                                SDL_FreeSurface(sspringerS);
                                SDL_FreeSurface(sspringerW);
                                SDL_FreeSurface(sturmS);
                                SDL_FreeSurface(sturmW);
                                SDL_Quit();
                                
                                
                                return EXIT_SUCCESS;
                            }
                            
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              5 juillet 2010 à 17:09:49

                              Vive les balises code et secret ! \o/
                              • Partager sur Facebook
                              • Partager sur Twitter
                                5 juillet 2010 à 17:15:10

                                Le code indenté et entre balises (merci Emacs :p ) :


                                #include <cstdlib>
                                #include <iostream>
                                #include <SDL/SDL.h>
                                #include <SDL/SDL_image.h>
                                
                                using namespace std;
                                
                                
                                void UpdateEvents(char* key,SDL_Surface** pscreen)
                                {
                                  SDL_Event event;
                                  while(SDL_PollEvent(&event))
                                    {
                                      switch (event.type)
                                	{
                                	case SDL_KEYDOWN:
                                	  key[event.key.keysym.sym]=1;
                                	  break;
                                	case SDL_KEYUP:
                                	  key[event.key.keysym.sym]=0;
                                	  break;
                                	case SDL_VIDEORESIZE:
                                	  *pscreen = SDL_SetVideoMode(event.resize.w,event.resize.h,32,SDL_SWSURFACE|SDL_DOUBLEBUF|SDL_VIDEORESIZE);
                                	  break;
                                	}
                                    }
                                }
                                
                                SDL_Rect Rect(int x,int y,int w=0,int h=0) // pour faire un rectangle plus vite
                                {
                                  SDL_Rect r;
                                  r.x=x;
                                  r.y=y;
                                  r.w=w;
                                  r.h=h;
                                  return r;
                                }
                                
                                SDL_Surface* LoadBMP(char* fichier,int vram=1) // voir tutorial 2.1.2
                                {
                                  SDL_Surface* f = SDL_LoadBMP(fichier); // charge l'image dans f en RAM
                                  if (!f)
                                    {
                                      printf("Echec chargement %s\n",fichier);
                                      SDL_Quit();
                                      exit(-1);
                                    }
                                  SDL_Surface* r=NULL;
                                  if (vram)
                                    r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);// cree une image en VRAM
                                  if (r==NULL) vram=0; // Si plus de place en VRAM, alors r= NULL.
                                  if (!vram)
                                    r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0); // cree une image en RAM
                                  SDL_Rect R=Rect(0,0,f->w,f->h);
                                  SDL_BlitSurface(f,NULL,r,&R); // copie l'image f de la RAM vers firstscreen en VRAM
                                  SDL_FreeSurface(f); // supprime la surface f : inutile maintenant --> libere la mémoire
                                  return r;
                                }
                                
                                unsigned char GetPixelComp32(SDL_Surface* surface,int x,int y,int c)
                                { // recupere le pixel x,y de la surfece "surface", la composante c (3 composantes RGB)
                                  unsigned char *p = ((unsigned char*)surface->pixels) + y * surface->pitch + x * 4;
                                  return p[c];
                                }
                                
                                void PutPixelComp32(SDL_Surface* surface,int x,int y,int c,unsigned char val)
                                { // ecrit la composante c (3 composantes RGB) sur le pixel x,y de la surface "surface"
                                  unsigned char *p = ((unsigned char*)surface->pixels) + y * surface->pitch + x * 4;
                                  p[c] = val;
                                }
                                
                                void Stretch_Nearest(SDL_Surface* src,SDL_Surface* dest)
                                {
                                  int i,j,k;
                                  double rx,ry;
                                  rx = dest->w*1.0/src->w;
                                  ry = dest->h*1.0/src->h;
                                  for(i=0;i<dest->w;i++)
                                    for(j=0;j<dest->h;j++)
                                      for(k=0;k<3;k++)
                                	{
                                	  unsigned char pix;
                                	  pix = GetPixelComp32(src,(int)(i/rx),(int)(j/ry),k);
                                	  PutPixelComp32(dest,i,j,k,pix);
                                	}
                                }
                                
                                void Stretch_Linear(SDL_Surface* src,SDL_Surface* dest)
                                {
                                  int i,j,k;
                                  double rx,ry;
                                  rx = dest->w*1.0/src->w;
                                  ry = dest->h*1.0/src->h;
                                  for(i=0;i<dest->w;i++)
                                    for(j=0;j<dest->h;j++)
                                      {
                                	unsigned char pix;
                                	double valx,valy,fx,fy;
                                	int minx,miny,maxx,maxy;
                                	valx = i/rx;
                                	valy = j/ry;
                                	minx = (int)valx;
                                	miny = (int)valy;
                                	maxx = minx+1;
                                	if (maxx>=src->w)
                                	  maxx--;
                                	maxy = miny+1;
                                	if (maxy>=src->h)
                                	  maxy--;
                                	fx = valx-minx; // garde partie flottante
                                	fy = valy-miny;
                                	for(k=0;k<3;k++)
                                	  {
                                	    pix = (unsigned char)(GetPixelComp32(src,minx,miny,k)*(1-fx)*(1-fy) + GetPixelComp32(src,maxx,miny,k)*fx*(1-fy)
                                				  + GetPixelComp32(src,minx,maxy,k)*(1-fx)*fy + GetPixelComp32(src,maxx,maxy,k)*fx*fy);
                                	    PutPixelComp32(dest,i,j,k,pix);
                                	  }
                                      }
                                }
                                
                                void Strechblit(SDL_Surface* src,SDL_Surface* dest,int skalW,int skalH,SDL_Rect pos)
                                {
                                  SDL_Surface* img = SDL_CreateRGBSurface(SDL_SWSURFACE,skalW,skalH,32,0,0,0,0);
                                  //Stretch_Nearest(src,img);
                                  Stretch_Linear(src,img);
                                  SDL_SetColorKey(img,SDL_SRCCOLORKEY,SDL_MapRGB(dest->format,0,0,255));
                                  SDL_BlitSurface(img,NULL,dest,&pos);
                                  SDL_FreeSurface(img);
                                }
                                
                                
                                enum {BAUER,SPRINGER,LAUFER,TURM,DAME,KONIG};
                                enum {BW,BS,GW,GS}; // B=belegt durch Figur G=Gefährdet durch Figur W=Weiss S=Schwarz
                                
                                struct figur
                                {
                                  int typ;
                                  int pi;
                                  int pj;
                                  bool aktiv;
                                };
                                
                                struct feld
                                {
                                  int status;
                                  bool markiert;
                                };
                                
                                struct Mark
                                {
                                  int i;
                                  int j;
                                  bool a;
                                };
                                
                                bool pc=false;
                                figur sf[2][16]; // 0=Schwarz 1=Weiss
                                feld fld[8][8];
                                Mark mark1,mark2;
                                
                                int main(int argc, char *argv[])
                                {
                                  // Initialize
                                  SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER);
                                
                                  // Variables
                                  SDL_Surface *screen,*sfeld;
                                  SDL_Rect rscreen,rfeld;
                                  SDL_Surface *sbauerS,*sbauerW,*sdameS,*sdameW,*skonigS,*skonigW,*slauferS,*slauferW,*sspringerS,*sspringerW,*sturmS,*sturmW;
                                  SDL_Rect rbauerS,rbauerW,rdameS,rdameW,rkonigS,rkonigW,rlauferS,rlauferW,rspringerS,rspringerW,rturmS,rturmW;
                                  SDL_Event event;
                                  bool quit=false;
                                
                                  const int prgw=680,prgh=680;
                                  int pw=prgw,ph=prgh;
                                  const char prgname[500]="Schach_1-1";
                                
                                  for(int n=0;n<8;n++)
                                    {
                                      for(int m=0;m<8;m++)
                                	{
                                	  fld[n][m].status=0;
                                	  fld[n][m].markiert=false;
                                	}
                                    }
                                
                                
                                  // Figuren einstellen
                                  // Schwarz
                                  sf[0][0].aktiv=true;
                                  sf[0][0].typ=TURM;
                                  sf[0][0].pi=0;
                                  sf[0][0].pj=0;
                                
                                  sf[0][1].aktiv=true;
                                  sf[0][1].typ=SPRINGER;
                                  sf[0][1].pi=1;
                                  sf[0][1].pj=0;
                                
                                  sf[0][2].aktiv=true;
                                  sf[0][2].typ=LAUFER;
                                  sf[0][2].pi=2;
                                  sf[0][2].pj=0;
                                
                                  sf[0][3].aktiv=true;
                                  sf[0][3].typ=DAME;
                                  sf[0][3].pi=3;
                                  sf[0][3].pj=0;
                                
                                  sf[0][4].aktiv=true;
                                  sf[0][4].typ=KONIG;
                                  sf[0][4].pi=4;
                                  sf[0][4].pj=0;
                                
                                  sf[0][5].aktiv=true;
                                  sf[0][5].typ=LAUFER;
                                  sf[0][5].pi=5;
                                  sf[0][5].pj=0;
                                
                                  sf[0][6].aktiv=true;
                                  sf[0][6].typ=SPRINGER;
                                  sf[0][6].pi=6;
                                  sf[0][6].pj=0;
                                
                                  sf[0][7].aktiv=true;
                                  sf[0][7].typ=TURM;
                                  sf[0][7].pi=7;
                                  sf[0][7].pj=0;
                                
                                  sf[0][8].aktiv=true;
                                  sf[0][8].typ=BAUER;
                                  sf[0][8].pi=0;
                                  sf[0][8].pj=1;
                                
                                  sf[0][9].aktiv=true;
                                  sf[0][9].typ=BAUER;
                                  sf[0][9].pi=1;
                                  sf[0][9].pj=1;
                                
                                  sf[0][10].aktiv=true;
                                  sf[0][10].typ=BAUER;
                                  sf[0][10].pi=2;
                                  sf[0][10].pj=1;
                                
                                  sf[0][11].aktiv=true;
                                  sf[0][11].typ=BAUER;
                                  sf[0][11].pi=3;
                                  sf[0][11].pj=1;
                                
                                  sf[0][12].aktiv=true;
                                  sf[0][12].typ=BAUER;
                                  sf[0][12].pi=4;
                                  sf[0][12].pj=1;
                                
                                  sf[0][13].aktiv=true;
                                  sf[0][13].typ=BAUER;
                                  sf[0][13].pi=5;
                                  sf[0][13].pj=1;
                                
                                  sf[0][14].aktiv=true;
                                  sf[0][14].typ=BAUER;
                                  sf[0][14].pi=6;
                                  sf[0][14].pj=1;
                                
                                  sf[0][15].aktiv=true;
                                  sf[0][15].typ=BAUER;
                                  sf[0][15].pi=7;
                                  sf[0][15].pj=1;
                                
                                
                                  // Weiss
                                  sf[1][0].aktiv=true;
                                  sf[1][0].typ=TURM;
                                  sf[1][0].pi=0;
                                  sf[1][0].pj=7;
                                
                                  sf[1][1].aktiv=true;
                                  sf[1][1].typ=SPRINGER;
                                  sf[1][1].pi=1;
                                  sf[1][1].pj=7;
                                
                                  sf[1][2].aktiv=true;
                                  sf[1][2].typ=LAUFER;
                                  sf[1][2].pi=2;
                                  sf[1][2].pj=7;
                                
                                  sf[1][3].aktiv=true;
                                  sf[1][3].typ=DAME;
                                  sf[1][3].pi=3;
                                  sf[1][3].pj=7;
                                
                                  sf[1][4].aktiv=true;
                                  sf[1][4].typ=KONIG;
                                  sf[1][4].pi=4;
                                  sf[1][4].pj=7;
                                
                                  sf[1][5].aktiv=true;
                                  sf[1][5].typ=LAUFER;
                                  sf[1][5].pi=5;
                                  sf[1][5].pj=7;
                                
                                  sf[1][6].aktiv=true;
                                  sf[1][6].typ=SPRINGER;
                                  sf[1][6].pi=6;
                                  sf[1][6].pj=7;
                                
                                  sf[1][7].aktiv=true;
                                  sf[1][7].typ=TURM;
                                  sf[1][7].pi=7;
                                  sf[1][7].pj=7;
                                
                                  sf[1][8].aktiv=true;
                                  sf[1][8].typ=BAUER;
                                  sf[1][8].pi=0;
                                  sf[1][8].pj=6;
                                
                                  sf[1][9].aktiv=true;
                                  sf[1][9].typ=BAUER;
                                  sf[1][9].pi=1;
                                  sf[1][9].pj=6;
                                
                                  sf[1][10].aktiv=true;
                                  sf[1][10].typ=BAUER;
                                  sf[1][10].pi=2;
                                  sf[1][10].pj=6;
                                
                                  sf[1][11].aktiv=true;
                                  sf[1][11].typ=BAUER;
                                  sf[1][11].pi=3;
                                  sf[1][11].pj=6;
                                
                                  sf[1][12].aktiv=true;
                                  sf[1][12].typ=BAUER;
                                  sf[1][12].pi=4;
                                  sf[1][12].pj=6;
                                
                                  sf[1][13].aktiv=true;
                                  sf[1][13].typ=BAUER;
                                  sf[1][13].pi=5;
                                  sf[1][13].pj=6;
                                
                                  sf[1][14].aktiv=true;
                                  sf[1][14].typ=BAUER;
                                  sf[1][14].pi=6;
                                  sf[1][14].pj=6;
                                
                                  sf[1][15].aktiv=true;
                                  sf[1][15].typ=BAUER;
                                  sf[1][15].pi=7;
                                  sf[1][15].pj=6;
                                
                                
                                  // Make Screen
                                  screen=SDL_SetVideoMode(prgw,prgh,32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
                                  SDL_WM_SetCaption(prgname,NULL);
                                  SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format,200,200,200));
                                
                                  rbauerS.x=0; rbauerS.y=0;
                                  sbauerS=SDL_LoadBMP("images/bauerS.bmp");
                                  SDL_BlitSurface(sbauerS,NULL,screen,&rbauerS);
                                
                                  rbauerW.x=0; rbauerW.y=85;
                                  sbauerW=SDL_LoadBMP("images/bauerW.bmp");
                                  SDL_BlitSurface(sbauerW,NULL,screen,&rbauerW);
                                
                                  rdameS.x=85; rdameS.y=0;
                                  sdameS=SDL_LoadBMP("images/dameS.bmp");
                                  SDL_BlitSurface(sdameS,NULL,screen,&rdameS);
                                
                                  rdameW.x=85; rdameW.y=85;
                                  sdameW=SDL_LoadBMP("images/dameW.bmp");
                                  SDL_BlitSurface(sdameW,NULL,screen,&rdameW);
                                
                                  rkonigS.x=170; rkonigS.y=0;
                                  skonigS=SDL_LoadBMP("images/konigS.bmp");
                                  SDL_BlitSurface(skonigS,NULL,screen,&rkonigS);
                                
                                  rkonigW.x=170; rkonigW.y=85;
                                  skonigW=SDL_LoadBMP("images/konigW.bmp");
                                  SDL_BlitSurface(skonigW,NULL,screen,&rkonigW);
                                
                                  rlauferS.x=255; rlauferS.y=0;
                                  slauferS=SDL_LoadBMP("images/lauferS.bmp");
                                  SDL_BlitSurface(slauferS,NULL,screen,&rlauferS);
                                
                                  rlauferW.x=255; rlauferW.y=85;
                                  slauferW=SDL_LoadBMP("images/lauferW.bmp");
                                  SDL_BlitSurface(slauferW,NULL,screen,&rlauferW);
                                
                                  rspringerS.x=340; rspringerS.y=0;
                                  sspringerS=SDL_LoadBMP("images/springerS.bmp");
                                  SDL_BlitSurface(sspringerS,NULL,screen,&rspringerS);
                                
                                  rspringerW.x=340; rspringerW.y=85;
                                  sspringerW=SDL_LoadBMP("images/springerW.bmp");
                                  SDL_BlitSurface(sspringerW,NULL,screen,&rspringerW);
                                
                                  rturmS.x=425; rturmS.y=0;
                                  sturmS=SDL_LoadBMP("images/turmS.bmp");
                                  SDL_BlitSurface(sturmS,NULL,screen,&rturmS);
                                
                                  rturmW.x=425; rturmW.y=85;
                                  sturmW=SDL_LoadBMP("images/turmW.bmp");
                                  SDL_BlitSurface(sturmW,NULL,screen,&rturmW);
                                
                                  SDL_Flip(screen);
                                
                                  mark1.a=false;
                                  mark2.a=false;
                                
                                  // Main Event Routine
                                  event.type=SDL_MOUSEMOTION;
                                  bool akt=true;
                                  char key[SDLK_LAST]={0};
                                  while(!quit)
                                    {
                                      // events abfragen
                                      SDL_WaitEvent(&event);
                                      switch(event.type)
                                	{
                                	case SDL_KEYDOWN:
                                	  {
                                	    switch(event.key.keysym.sym)
                                	      {
                                	      case SDLK_ESCAPE:
                                		quit=true;
                                		break;
                                
                                	      case SDLK_F4:
                                		quit=true;
                                		break;
                                
                                	      case SDLK_w:
                                		screen=SDL_SetVideoMode(prgw,prgh, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
                                		pw=prgw;
                                		ph=prgh;
                                		akt=true;
                                		break;
                                
                                	      case SDLK_a:
                                		akt=true;
                                		break;
                                	      }
                                	  }
                                	  break;
                                
                                	case SDL_MOUSEBUTTONDOWN:
                                	  {
                                	    if(!mark1.a) // Falls die erste Markierung noch nicht gesetzt wurde
                                	      {
                                		mark1.a=true;
                                		mark1.i=int(8*event.button.x/pw);
                                		mark1.j=int(8*event.button.y/ph);
                                	      }else{
                                	      if(!mark2.a) // Falls dies der zweite Klick ist
                                		{
                                		  if((mark1.i==int(8*event.button.x/pw))&&(mark1.j==int(8*event.button.y/ph))) // Falls zweiter Klick == erster Klick -> Annullieren
                                		    {
                                		      mark1.a=false;
                                		      mark2.a=false;
                                		    }else{ // Falls zweiter Klick -> Markierung setzen
                                		    mark2.a=true;
                                		    mark2.i=int(8*event.button.x/pw);
                                		    mark2.j=int(8*event.button.y/ph);
                                		  }
                                		}else{ // Drei Klicks -> unmöglich
                                		mark1.a=false;
                                		mark2.a=false;
                                	      }
                                	    }
                                	    akt=true;
                                	  }
                                	  break;
                                
                                	case SDL_VIDEORESIZE:
                                	  screen=SDL_SetVideoMode(event.resize.w, event.resize.h, 32, SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_RESIZABLE);
                                	  pw=event.resize.w;
                                	  ph=event.resize.h;
                                	  akt=true;
                                	  break;
                                
                                	case SDL_QUIT:
                                	  quit=true;
                                	  break;
                                	}
                                
                                
                                
                                
                                      if(akt)
                                	{
                                	  // Anzeige aktualisieren
                                
                                	  //Kacheln
                                	  int sw=1,mark;
                                	  for(int j=0;j<8;j++)
                                	    {
                                	      for(int i=0;i<8;i++)
                                		{
                                		  if((mark1.i==i)&&(mark1.j==j)||(mark2.i==i)&&(mark2.j==j)){if(!sw){mark=128;}else{mark=-127;}}else{mark=0;}
                                
                                		  rfeld.x=int((double)pw/8+((i-1)*int((double)pw/8)));
                                		  //rfeld.x=int(pw*i/8);
                                		  rfeld.y=int((double)ph/8+((j-1)*int((double)ph/8)));
                                		  //rfeld.y=int(pw*j/8);
                                		  sfeld=SDL_CreateRGBSurface(SDL_HWSURFACE, int((double)pw/8), int((double)ph/8), 32, 0, 0, 0, 0);
                                		  SDL_FillRect(sfeld,NULL,SDL_MapRGB(screen->format,sw*255,sw*255+mark,sw*255));
                                		  SDL_BlitSurface(sfeld,NULL,screen,&rfeld);
                                		  if(sw){sw=0;}else{sw=1;}
                                		}
                                	      if(sw){sw=0;}else{sw=1;}
                                	    }
                                
                                	  //Figuren
                                	  for(int n=0;n<16;n++)
                                	    {
                                	      SDL_Rect poss,posw;
                                	      poss.x=int((double)pw/8+((sf[0][n].pi-1)*int((double)pw/8)));
                                	      poss.y=int((double)ph/8+((sf[0][n].pj-1)*int((double)ph/8)));
                                	      posw.x=int((double)pw/8+((sf[1][n].pi-1)*int((double)pw/8)));
                                	      posw.y=int((double)ph/8+((sf[1][n].pj-1)*int((double)ph/8)));
                                
                                	      UpdateEvents(key,&screen);
                                
                                	      if(sf[0][n].aktiv&&sf[0][n].typ==BAUER){Strechblit(sbauerS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                	      if(sf[1][n].aktiv&&sf[1][n].typ==BAUER){Strechblit(sbauerW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                	      if(sf[0][n].aktiv&&sf[0][n].typ==DAME){Strechblit(sdameS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                	      if(sf[1][n].aktiv&&sf[1][n].typ==DAME){Strechblit(sdameW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                	      if(sf[0][n].aktiv&&sf[0][n].typ==KONIG){Strechblit(skonigS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                	      if(sf[1][n].aktiv&&sf[1][n].typ==KONIG){Strechblit(skonigW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                	      if(sf[0][n].aktiv&&sf[0][n].typ==LAUFER){Strechblit(slauferS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                	      if(sf[1][n].aktiv&&sf[1][n].typ==LAUFER){Strechblit(slauferW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                	      if(sf[0][n].aktiv&&sf[0][n].typ==SPRINGER){Strechblit(sspringerS,screen,int(screen->w/8),int(screen->h/8),poss);}
                                	      if(sf[1][n].aktiv&&sf[1][n].typ==SPRINGER){Strechblit(sspringerW,screen,int(screen->w/8),int(screen->h/8),posw);}
                                	      if(sf[0][n].aktiv&&sf[0][n].typ==TURM){Strechblit(sturmS,screen,int(screen->w/8),int(screen->h/8),poss);;}
                                	      if(sf[1][n].aktiv&&sf[1][n].typ==TURM){Strechblit(sturmW,screen,int(screen->w/8),int(screen->h/8),posw);;}
                                
                                	    }
                                
                                
                                	  SDL_Flip(screen);
                                	  akt=false;
                                	}
                                
                                
                                    }
                                
                                
                                
                                  // Free and Close
                                  SDL_FreeSurface(sfeld);
                                  SDL_FreeSurface(sbauerS);
                                  SDL_FreeSurface(sbauerW);
                                  SDL_FreeSurface(sdameS);
                                  SDL_FreeSurface(sdameW);
                                  SDL_FreeSurface(skonigS);
                                  SDL_FreeSurface(skonigW);
                                  SDL_FreeSurface(slauferS);
                                  SDL_FreeSurface(slauferW);
                                  SDL_FreeSurface(sspringerS);
                                  SDL_FreeSurface(sspringerW);
                                  SDL_FreeSurface(sturmS);
                                  SDL_FreeSurface(sturmW);
                                  SDL_Quit();
                                
                                
                                  return EXIT_SUCCESS;
                                }
                                



                                Au fait c'est du C++ pas du C ;)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  6 juillet 2010 à 10:19:04

                                  Désolé j'avais remarqué trop tard. Je vais le changer tout de suite.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  SDL changer taille d'une image

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown