fenetre=SDL_SetVideoMode(399,399,32,SDL_HWSURFACE); SDL_FillRect(fenetre,NULL,SDL_MapRGB(fenetre->format,100,100,100));// CHANGEMENT DE LES COULEUR NOIR DES CASES EN GRIS
positionPionN8.x=350; positionPionN8.y=50; PionN8=SDL_LoadBMP("pion_Noir.bmp"); SDL_BlitSurface(PionN8,NULL,fenetre,&positionPionN8); // FIN DU REMPLISSAGE DES PIONS NOIRS---------------------------------------------------------------------
// POSITION DES PIONS NOIRS DU DAMIER--------------------------------------------------------------------------
il faut lire les règles du forum et mettre ton code entre balises </> pour qu'il soit lisible.
Personne ne se donnera la peine de lire ton code dans ces conditions.
Au delà de ça, ton code est très mal conçu. Il faut automatiser au maximum, tu ne fais que du cas par cas. Il faut utiliser des tables et des boucles. Pourquoi charger 8 fois la même image ? il suffit de ré-afficher la même à différents endroits...
j'ai chargé 8 fois parce que à la base c'était un jeu d'échec que je voulais faire et je ne voyais pas comment automatiser autant de pions différents les uns des autres.
int main ( int argc, char** argv )
{
SDL_Surface *fenetre=NULL, *rectangle=NULL;
int continuer;
int souris;
SDL_Event event;
// CREATION ET MANIPULAION DES PIONS NOIRS ET BLANCS--------------------------------------------------------------
SDL_Surface *PionN=NULL,*PionN2=NULL,*PionN3=NULL,*PionN4=NULL,*PionN5=NULL,*PionN6=NULL,*PionN7=NULL,*PionN8=NULL;
SDL_Surface *PionB=NULL,*PionB2=NULL,*PionB3=NULL,*PionB4=NULL,*PionB5=NULL,*PionB6=NULL,*PionB7=NULL,*PionB8=NULL;
SDL_Rect positionPionN,positionPionN2,positionPionN3,positionPionN4,positionPionN5,positionPionN6,positionPionN7, positionPionN8;
SDL_Rect positionPionB,positionPionB2,positionPionB3,positionPionB4,positionPionB5,positionPionB6,positionPionB7, positionPionB8;
SDL_Rect position;
int i, j;
SDL_Init(SDL_INIT_VIDEO);
fenetre=SDL_SetVideoMode(399,399,32,SDL_HWSURFACE);
SDL_FillRect(fenetre,NULL,SDL_MapRGB(fenetre->format,100,100,100));// CHANGEMENT DE LES COULEUR NOIR DES CASES EN GRIS
rectangle=SDL_CreateRGBSurface(SDL_HWSURFACE,50,50,32,0,0,0,0);
SDL_WM_SetCaption("DAMIER",NULL);
SDL_FillRect(rectangle, NULL, SDL_MapRGB(fenetre->format,255,255,255));
for(i=0;i<=8;i++)
{
for(j=0;j<=8;j++)
{
if((i+j)%2)
{
position.x=(i-1)*50;
position.y=(j-1)*50;
SDL_BlitSurface(rectangle,NULL,fenetre,&position);
}
}
}
// POSITION DES PIONS NOIRS DU DAMIERL--------------------------------------------------------------------------
// PionN1
positionPionN.x=0;
positionPionN.y=0;
PionN=SDL_LoadBMP("pion_Noir.bmp");
//SDL_SetColorKey(PionN1,SDL_SRCCOLORKEY,SDL_MapRGB(PionN1->format,0,0,0));
SDL_BlitSurface(PionN,NULL,fenetre,&positionPionN);
// PionN2
positionPionN2.x=100;
positionPionN2.y=0;
PionN2=SDL_LoadBMP("pion_Noir.bmp");
SDL_BlitSurface(PionN2,NULL,fenetre,&positionPionN2);
// PionN3
positionPionN3.x=200;
positionPionN3.y=0;
PionN3=SDL_LoadBMP("pion_Noir.bmp");
SDL_BlitSurface(PionN3,NULL,fenetre,&positionPionN3);
// PionN4
positionPionN4.x=300;
positionPionN4.y=0;
PionN4=SDL_LoadBMP("pion_Noir.bmp");
SDL_BlitSurface(PionN4,NULL,fenetre,&positionPionN4);
// PionN5
positionPionN5.x=50;
positionPionN5.y=50;
PionN5=SDL_LoadBMP("pion_Noir.bmp");
SDL_BlitSurface(PionN5,NULL,fenetre,&positionPionN5);
// PionN6
positionPionN6.x=150;
positionPionN6.y=50;
PionN6=SDL_LoadBMP("pion_Noir.bmp");
SDL_BlitSurface(PionN6,NULL,fenetre,&positionPionN6);
// PionN7
positionPionN7.x=250;
positionPionN7.y=50;
PionN7=SDL_LoadBMP("pion_Noir.bmp");
SDL_BlitSurface(PionN7,NULL,fenetre,&positionPionN7);
// PionN8
positionPionN8.x=350;
positionPionN8.y=50;
PionN8=SDL_LoadBMP("pion_Noir.bmp");
SDL_BlitSurface(PionN8,NULL,fenetre,&positionPionN8);
// FIN DU REMPLISSAGE DES PIONS NOIRS---------------------------------------------------------------------
// POSITION DES PIONS NOIRS DU DAMIER--------------------------------------------------------------------------
// PionB1
positionPionB.x=0;
positionPionB.y=350;
PionB=SDL_LoadBMP("pion_Blanc.bmp");
SDL_BlitSurface(PionB,NULL,fenetre,&positionPionB);
// PionB2
positionPionB2.x=100;
positionPionB2.y=350;
PionB2=SDL_LoadBMP("pion_Blanc.bmp");
SDL_BlitSurface(PionB2,NULL,fenetre,&positionPionB2);
// PionB3
positionPionB3.x=200;
positionPionB3.y=350;
PionB3=SDL_LoadBMP("pion_Blanc.bmp");
SDL_BlitSurface(PionB3,NULL,fenetre,&positionPionB3);
// PionB4
positionPionB4.x=300;
positionPionB4.y=350;
PionB4=SDL_LoadBMP("pion_Blanc.bmp");
SDL_BlitSurface(PionB4,NULL,fenetre,&positionPionB4);
// PionB5
positionPionB5.x=50;
positionPionB5.y=300;
PionB5=SDL_LoadBMP("pion_Blanc.bmp");
SDL_BlitSurface(PionB5,NULL,fenetre,&positionPionB5);
// PionB6
positionPionB6.x=150;
positionPionB6.y=300;
PionB6=SDL_LoadBMP("pion_Blanc.bmp");
SDL_BlitSurface(PionB6,NULL,fenetre,&positionPionB6);
// PionB7
positionPionB7.x=250;
positionPionB7.y=300;
PionB7=SDL_LoadBMP("pion_Blanc.bmp");
SDL_BlitSurface(PionB7,NULL,fenetre,&positionPionB7);
// PionB8
positionPionB8.x=350;
positionPionB8.y=300;
PionB8=SDL_LoadBMP("pion_Blanc.bmp");
SDL_BlitSurface(PionB8,NULL,fenetre,&positionPionB8);
// FIN DU REMPLISSAGE DES PIONS NOIRS---------------------------------------------------------------------
SDL_WM_SetCaption("DAMIER SDL",NULL);
SDL_Flip(fenetre);
SDL_EnableKeyRepeat(50,50);
while(continuer)
{
SDL_Event fermer;
SDL_WaitEvent(&fermer);
switch(event.type)
{
case SDL_QUIT:
continuer=0;
break;
case SDL_KEYDOWN:
switch(fermer.key.keysym.sym)
{
case SDLK_ESCAPE:
continuer=0;
break;
case SDLK_UP:
positionPionB8.y=positionPionB8.y-1;
break;
case SDLK_DOWN:
positionPionB8.y=positionPionB8.y+1;
break;
case SDLK_LEFT:
positionPionB8.x=positionPionB8.x-1;
break;
case SDLK_RIGHT:
positionPionB8.x=positionPionB8.x+1;
break;
default:
break;
}
break;
case SDL_MOUSEBUTTONDOWN:
souris=1;
break;
case SDL_MOUSEBUTTONUP:
souris= 0;
break;
default: break;
}
if(souris)
{
positionPionB8.x=event.motion.x;
positionPionB8.y=event.motion.y;
}
SDL_BlitSurface(PionB8,NULL,fenetre,&positionPionB8);
SDL_Flip(fenetre);
}
// CREATION D'UNE BOUCLE PSEUDO INFINIE POUR FERMER LA FENETRE CREE----------------------------------------------
SDL_FreeSurface(fenetre);
SDL_FreeSurface(rectangle);
SDL_Quit();
return 0;
}
Juste , pour te simplifier la vie , crée toi un tableau de 10case X 10 !
Pour déplacer le pion , t'aura juste un test à faire
Si BPSourisCliquer == caseAMoi
alors attendreBPSourisRelacher
si SourisRelacher == caseX+1 || SourisRelacher = caseX-1 && case!= caseAMoi
alors déplacerLePion
je te conseil de t'inspirer du code source du TP de mathéo (mario Sokoban), pour comprendre ce principe de case
edit : je crois que ta bien fais 1 tableau dans un autre fichier , mais tu doit mal l'exploiter :/
je suis toujours entrain de continuer mon jeux et je sui bloqué. Je veux déplacer un pion avec la souris mais je n'y arrive pas. Ce que je veux c'est quand je clique sur mon pion et que je clique quelque part dans ma fenêtre, mon pion se déplace vers la position du second clique. Je vous joins mon code, et merci de me dire si il y'a des erreurs de syntaxe ou autres.
Init(); // Chargement des surfaces
while (continuer)
{
while (SDL_PollEvent(&event))
{
switch(event.type) // Traitement des évènements
{
// ..
}
}
Actualisation(); // Mise à jour des positions en fonction du traitement des évènements
Affichage(); // Blit puis Flip
GesFrame(); // Gestion du nombre d'affichages / seconde
}
Fin(); // Free, Quit ...
Avec un while{} pour PollEvent et un seul switch à l'intérieur.
C'était pas mal parti avec le if(souris) ...
Si tu veux déplacer le pion avec la souris pendant le clic, il faut mettre cette partie à l'intérieur du case SDL_MOUSEMOTION
cette fois ci l'objet (qui est en fait une image) se déplace bien, mais quand je clique dans ma fenêtre pour déplacer mon objet, l'objet à sa position précédente est toujours présente et au final j'ai deux objets à deux positions différentes et ainsi de suite.
Tu cliques sur l'objet, et tu le déplaces. Ok. Si l'endroit où tu déposes ton objet est un endroit valide (suivant les règles de ton jeu), alors tu dois
blitter l'objet au nouvel endroit
effacer l'objet là où il était (=blitter une 'case' vide, de couleur, avec un motif, etc)
afficher le tout (sdl_flip ou 2 x sdl_updateRect, au choix)
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
SDL
× 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.
Bonhomme !! | Jeu de plateforme : Prototype.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent