Bonjour tout le monde, j'avais crée un projet qui était bien parti mais j'ai décidé de l'optimiser car j'avais fais pas mal de conneries ( plein de variables globales, pas d'argument pour les fonctions...)
Donc j'ai décidé d'ajouter des arguments pour mes fonctions en les modifiant une par une mais je suis bloquer car la ça ne fonctionne plus....j'ai écrasé le projet précédent comme un con...)
Donc ce qui fonctionne et ce qui fonctionne pas:
Mes images de bateaux fonctionnent bien, la fenêtre et l'image "ecran" ( le fond de la fenêtre en gros) fonctionne bien avec la couleur que je veux
Pour ce qui ne fonctionne pas c'est le quadrillage, j'ai crée des colonnes et lignes mais mon programme ne les affichent pas.... je suis quasi sûr que ça vient de la fonction jeu qui gère les touches du clavier et le "flip" de la fenêtre, voici le code:
Fonction main:
int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL; // varaible de la fenetre
SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL
if(TTF_Init() == -1) // si il y a eu une erreur lors du démarrage de SDL ttf
{
fprintf(stderr, "Erreur d'initialisation de TTF_Init : %s\n", TTF_GetError());
exit(EXIT_FAILURE);
}
SDL_WM_SetIcon(SDL_LoadBMP("pirate.bmp"), NULL); // Chargement de l'icône AVANT SDL_SetVideoMode ( icone du programme)
ecran = SDL_SetVideoMode(1250, 750, 32, SDL_SWSURFACE | SDL_DOUBLEBUF); // Ouverture de la fenêtre avec les paramètre de hauteur et largeur
SDL_WM_SetCaption("Bataille Navale", NULL); // nom de la fenetre
// Coloration de la surface ecran en gris
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 110, 110, 110));
jeu(ecran);
if (ecran == NULL) // Si l'ouverture a échoué, on le note et on arrête , gestion erreur ouverture fenetre
{
fprintf(stderr, "Impossible de charger le mode vidéo : %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
SDL_Flip(ecran); // Mise à jour de l'écran avec sa nouvelle couleur //
TTF_CloseFont(police); // Fermeture de la police du ttf
TTF_Quit(); // Arrêt du ttf SDL
SDL_Quit(); // Arrêt de la SDL
return EXIT_SUCCESS; // Fermeture du programme
}
Fonction quadrillage (qui gère le quadrillage évidemment...):
void quadrillage(SDL_Surface *ecran)
{
int i2,j2,i3,j3,j4=0;
float i4=0;
SDL_Rect position; // variable position des colonnes
SDL_Rect position2; // variable position des lignes
SDL_Surface *colonne[25] = {NULL}; // variable tableau des colonne ( surface ajouter sur l'écran)
SDL_Surface *ligne[14] = {NULL}; // variable tableau des lignes ( surface ajouter sur l'écran)
//boucle création colonne
for(i2=0;i2<=24;i2++)
{
colonne[i2]= SDL_CreateRGBSurface(SDL_SWSURFACE, 1, 750, 32, 0, 0, 0, 0); // Paramètre des colonne avec sa taille
}
//boucle placement des colonnes
for(i3=0;i3<=24;i3++)
{
position.x = i4; // Les coordonnées de la surface colonne
position.y = 0;
SDL_FillRect(colonne[i3], NULL, SDL_MapRGB(ecran->format, 32, 32, 32)); // on rempli les colonne avec la couleur prédéfinie
SDL_BlitSurface(colonne[i3], NULL, ecran, &position); // Collage de la surface sur l'écran
i4+=50;
}
//boucle création ligne
for(j2=0;j2<=14;j2++)
{
ligne[j2]= SDL_CreateRGBSurface(SDL_SWSURFACE, 1250, 1, 32, 0, 0, 0, 0); // Paramètre des lignes avec sa taille
}
//boucle placement des lignes
for(j3=0;j3<=14;j3++)
{
position2.x = 0; // Les coordonnées de la surface lignes
position2.y = j4;
SDL_FillRect(ligne[j3], NULL, SDL_MapRGB(ecran->format, 32, 32, 32)); // on rempli les lignes avec la couleur prédéfinie
SDL_BlitSurface(ligne[j3], NULL, ecran, &position2); // Collage de la surface sur l'écran
j4+=50;
}
SDL_Flip(ecran);
}
Et la fonction jeu qui gère les touches+ le flip de l'écran:
void jeu(SDL_Surface *ecran) // fonction quadrillage
{
SDL_Surface *bateau = NULL; // varaible du bateau joueur
SDL_Surface *bateaupirR = NULL; // varaible du bateau ennemi
SDL_Surface *mer[49] = {NULL}; // variable surface mer
SDL_Surface *ile = NULL; // varaible surface ile
SDL_Rect position; // variable position des colonnes
SDL_Rect position2; // variable position des lignes
SDL_Rect position3; // variable position bateau joueur
SDL_Rect positionbatr; // variable position bateau ennemi
SDL_Rect positioneau; // variable position texture mer
SDL_Rect positionIle; // variable position surface ile
SDL_Event event1;
SDL_EnableKeyRepeat(0, 0);
int i2,o3,j2,i3=0,j3=0,j4=0,continuer=1;
float i4=0;
bateau = SDL_LoadBMP("Bateau_pirate.bmp"); //chargement du bateau joueur sur la surface
bateaupirR = SDL_LoadBMP("Bateau_pirate_rouge.bmp"); //chargement du bateau ennemi sur la surface
ile = SDL_LoadBMP("test.bmp"); //chargement de la surface ile
SDL_SetColorKey(bateau, SDL_SRCCOLORKEY, SDL_MapRGB(bateau->format, 255, 255, 255)); // Définir couleur derrière le bateau en transparent
SDL_SetColorKey(bateaupirR, SDL_SRCCOLORKEY, SDL_MapRGB(bateaupirR->format, 255, 255, 255)); // Définir couleur derrière le bateau pirate en transparent
SDL_SetColorKey(ile, SDL_SRCCOLORKEY, SDL_MapRGB(ile->format, 255, 255, 255)); // Définir couleur derrière la surface ile en transparent
positionIle.x=250;
positionIle.y=250;
position3.x = 210;
position3.y = 210; // position bateau joueur
positionbatr.x=410;
positionbatr.y=310; // position 1 bateau pirate
//boucle création texture mer
for(o3=0;o3<=48;o3++)
{
mer[o3] = SDL_LoadBMP("Texture_eau2.bmp");
}
while(continuer)
{
while( SDL_PollEvent( &event1 ) )
{
switch (event1.type)
{
case SDL_QUIT:
continuer = 0;
break;
case SDL_KEYDOWN:
switch (event1.key.keysym.sym)
{
case SDLK_ESCAPE:
continuer = 0;
break;
case SDLK_LEFT:
t1=2;
Movebat(position3);
t1=0;
break;
case SDLK_RIGHT:
t1=1;
Movebat(position3);
t1=0;
break;
case SDLK_UP:
t1=3;
Movebat(position3);
t1=0;
break;
case SDLK_DOWN:
t1=4;
Movebat(position3);
t1=0;
break;
default:
break;
}
break;
}
}
// Coloration de la surface ecran en gris
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 110, 110, 110));
void quadrillage(ecran);
compteur=0;
compteur2='a';
SDL_BlitSurface(bateau, NULL, ecran, &position3); // Collage de la surface bateau joueur sur l'écran
SDL_BlitSurface(bateaupirR, NULL, ecran, &positionbatr); // Collage de la surface bateau ennemi sur l'écran
SDL_BlitSurface(ile, NULL, ecran, &positionIle); // Collage de la surface ile sur l'écran
SDL_Flip(ecran); // mettre à jour l'affichage
void quadrillage(ecran);
}
}
Il y a aussi une fonction movebat qui gère le déplacement du bateau en fonction des touches mais de toute façon elle gène ne rien le reste ( et elle fonctionne pas non plus d'ailleurs...)
Je précise que j'ai essayé de mettre l'appel de ma fonction quadrillage un peu partout dans ma fonction jeu pour voir mais ça change pas grand chose.....
Donc si quelqu'un saurait ou est le problème je serais ravi d'être débloquer
dans ta fonction jeu, plusieurs fois tu déclares un prototype au lieu d'appeler ta fonction
void quadrillage(ecran);
Oui j'ai fais 2 fois
void quadrillage(ecran);
pour faire des test mais je peux le placer n'importe ou dans la fonction jeu ça affiche pas le quadrillage....
sauf que
void quadrillage(ecran);
est un prototype contrairement a
quadrillage(ecran);
qui est un appel de fonction.
Ah oui pas faux
Bon j'ai retiré le void je voie le quadrillage mais j'ai 2 problèmes:
-Si je met
quadrillage(ecran); avant le
SDL_Flip(ecran);
Ca me fait clignoter toutes mes images sauf le quadrillage....
Et si je le met après le flip ça me fais clignoter que le quadrillage.....
J'avais pas eu ce problème la sur mon projet mal optimisé ou est ce que j'ai fais une connerie svp?
A mon avis ça vient de ces lignes:
SDL_BlitSurface(bateau, NULL, ecran, &position3); // Collage de la surface bateau joueur sur l'écran
SDL_BlitSurface(bateaupirR, NULL, ecran, &positionbatr); // Collage de la surface bateau ennemi sur l'écran
SDL_BlitSurface(ile, NULL, ecran, &positionIle); // Collage de la surface ile sur l'écran
Qui sont juste avant le flip mais le problème c'est que si je les met pas dans la boucle
while(continuer) ça me les affichent pas et si je les met dans cette boucle ces images font que de clignoter à cause du flip...