CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Mon programme sdl/c++ ne se lance pas

JeanYvesYves
JeanYvesYves
Niveau 10
01 septembre 2005 à 09:35:48

Est ce que tu as lu mon chapitre sur les fonctions, ou est ce que tu recopies betement ce que j´ai fait ?

En effet, j´ai fait une faute en écrivant la fonction !
Il y a quelque chose a mettre devant Blit, pour la déclaration : un indice, la fonction ne retourne rien...

A toi de trouver !

N_Cortex
N_Cortex
Niveau 7
01 septembre 2005 à 09:49:09

Oui, j´avais mu ton chapitre sur les fonctions, et j´ai donc rajouter void devant, mais il me dit :

Blit(balle,NULL,screen,ball.x, ball.y);
Erreurs :
1-invalid conversion from `SDL_Surface*´ to `int´
2-at this point in file

Et a la fonction blit :

void Blit(SDL_Surface* source, SDL_Surface* dest, int X, int Y)
{
SDL_Rect R;
R.x = X;
R.y = Y;
R.w=R.h=0;
SDL_BlitSurface(source,NULL,dest,&R);
}
too many arguments to function `void Blit(SDL_Surface*, SDL_Surface*, int, int)´

Mais comme je sais pas trop ce que je dois faire, j´aimerais bien que tu m´aides un petit peu, s´il te plait.

JeanYvesYves
JeanYvesYves
Niveau 10
01 septembre 2005 à 09:59:59

et ben alors ?

void Blit(SDL_Surface* source, SDL_Surface* dest, int X, int Y)

Compte combien la fonction attend d´argument ?
4 n´est ce pas ?

et ton appel ?
Blit(balle,NULL,screen,ball.x, ball.y);

Combien tu lui en donnes ?
4 ? recompte donc :-)

Que viens foutre ce "NULL" ??
le but de cette fonction est de simplifier les appels, toute une histoire de logique !

N_Cortex
N_Cortex
Niveau 7
01 septembre 2005 à 10:02:44

LOL je viens de comprendre grace a toi !! En fait je sais pas trop ce que j´ai foutu puisque j´avais bien recompté et j´avais trouvé 5... :hum:

Enfin bon, merci !! !

N_Cortex
N_Cortex
Niveau 7
01 septembre 2005 à 10:04:59

C´est sur, ça a simplifié mon programme (c´est plus lisible maintenant ^^) mais ça bug toujours...

je vais essayer de retrouver une ancienne dversion de mon programme que j´avais foutue sur le net pour voir...

JeanYvesYves
JeanYvesYves
Niveau 10
01 septembre 2005 à 10:12:46

toujours se simplifier la vie :)
si une fonction t´emmerde, t´en crée une autre qui l´englobe (comme Blit qui englobe SDL_Blit et ces vieux Rect)
et tu te simplifies mortel la vie :-)

JeanYvesYves
JeanYvesYves
Niveau 10
01 septembre 2005 à 10:16:26

et pour info, il faut savoir lire les messages d´erreurs :

too many arguments to function `void Blit(SDL_Surface*, SDL_Surface*, int, int)´

--> explicite !! :) t´en mets trop :)

invalid conversion from `SDL_Surface*´ to `int´

--> en fait, il évalue les arguments dans l´ordre : toi tu lui donnais :

Blit(balle,NULL,screen,ball.x, ball.y);
et il y rangeais dans :
void Blit(SDL_Surface* source, SDL_Surface* dest, int X, int Y)

Alors balle, il le met dans "source"
NULL, il le met dans "dest"
screen, c´est le 3e, donc il essaie de le mettre dans int X

--> screen est un SDL_Surface*, tu essaies de le ranger dans un int ?

la ça gueule ! il te le dit :
"je ne peux pas convertir un SDL_Surface* en int !! "

c´est ça qu´il te dit :-)

savoir lire les messages d´erreur, ça aide !

N_Cortex
N_Cortex
Niveau 7
01 septembre 2005 à 10:21:29

Putin j´y crois pas. J´ai retrouver l´ancienne version de mon prog, mais CA FAIT COMME LA VERSION ACTUELLE, CA RAME !! !!

Je suis dégouté et je comprends rien, avant ça marchait parfaitement...

Je vais reboot mon pc pour voir si ça vient de la...

Vous pouvez tester mon ancien prog plz ? Juste pour voir si ça rame chez vous...

--> http://membres.lycos.fr/ncortex/

A la ligne "CasseBriqueAlpha.zip"

JeanYvesYves
JeanYvesYves
Niveau 10
01 septembre 2005 à 10:29:15

vérifie que tu n´as pas de loadbmp dans ta boucle
refait ton prog en clair, puis je regarderai

jejej
jejej
Niveau 9
01 septembre 2005 à 10:38:14

C´est quoi l´ancienne version de ton prog ?
parceque , si elle est comme la premiere ( de ton premier post sur le topic ) , c´est pas etonnant que ça rame... reposte ton code si il est different , si tu veux .

jejej
jejej
Niveau 9
01 septembre 2005 à 10:39:57

C´est quoi l´ancienne version de ton prog ?
parceque , si elle est comme la premiere ( de ton premier post sur le topic ) , c´est pas etonnant que ça rame... reposte ton code si il est different , si tu veux .

N_Cortex
N_Cortex
Niveau 7
01 septembre 2005 à 10:47:08

Bon, je repost mon nouveau code, et vous pouvez tester le programme sur le meme ftp, mais au nom de
casse brique qui rame.zip
Voila le code :

  1. include <SDL/SDL.h>

SDL_Surface* screen;
SDL_Event event;
char key[400];
int xsouris=0,ysouris=0,xrelsouris=0,yrelsouris=0;

//toutes les structures des objets
struct player
{
int score;
int vie;
};

struct balle
{
int x;
int y;
bool in;
};

struct vaisseau
{
int x;
int y;
bool in;
int anim;
};

struct briques
{
int x;
int y;
bool in;
};

struct life
{
int x;
int y;
bool in;
};

//initialisation de sdl + updates events ect (merci JYY ^^)
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(800, 600, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}

void UpdateEvents()
{
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_MOUSEMOTION:
xsouris=event.motion.x;
ysouris=event.motion.y;
xrelsouris=event.motion.xrel;
yrelsouris=event.motion.yrel;
break;
}
}
}

SDL_Rect Rect(int x,int y,int w=0,int h=0)
{
SDL_Rect r;
r.x=x;
r.y=y;
r.w=w;
r.h=h;
return r;
}

void Blit(SDL_Surface* source, SDL_Surface* dest, int X, int Y)
{
SDL_Rect R;
R.x = X;
R.y = Y;
R.w=R.h=0;
SDL_BlitSurface(source,NULL,dest,&R);
}

SDL_Surface* LoadBMP(char* fichier,int vram=1)
{
SDL_Surface* f = SDL_LoadBMP(fichier);
SDL_Surface* r=NULL;
if (vram)
r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
if (r==NULL) vram=0;
if (!vram)
r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
SDL_Rect R=Rect(0,0,f->w,f->h);
SDL_BlitSurface(f,NULL,r,&R);
SDL_FreeSurface(f);
return r;
}

int main(int argc ,char **argv)
{
//déclaration des variables + structures
struct player joueur;
joueur.vie = 3;
int s=1, pos_x=35, pos_y=0, i=0, start=0;
int sx4=0,sy4=0;
init_SDL();
struct balle ball;
ball.x = 100;
ball.y = 300;
ball.in = true;
struct vaisseau plaque;
plaque.x = 200;
plaque.y = 510;
plaque.in = true;
struct briques briks[250];
for (i=0; i<231; i++)
{
briks[i].x = pos_x;
briks[i].y = pos_y;
briks[i].in = true;
pos_x = pos_x + 35;
if (pos_x >= 765) {pos_y += 17;pos_x = 35;}
}
struct life vie[3];
for (i=0;i<=3;i++)
{
pos_x = 620;
vie[i].x = pos_x;
vie[i].y = 20;
vie[i].in = true;
pos_x += 20;
}

//création des surfaces
SDL_Surface* firstscreen;
SDL_Surface* balle;
SDL_Surface* img_plaque;
SDL_Surface* img_plaqued;
SDL_Surface* img_plaqueg;
SDL_Surface* brique;
SDL_Surface* vie1;
SDL_Surface* vie2;
SDL_Surface* vie3;
int fini=0;

//creation des objets + transparence
firstscreen=LoadBMP("font.bmp");
balle=LoadBMP("boule_de_feu4.bmp");
img_plaque=LoadBMP("plaque.bmp");
img_plaqued=LoadBMP("plaque-d.bmp");
img_plaqueg=LoadBMP("plaque-g.bmp");
brique=LoadBMP("brique_bleu.bmp");
vie1=LoadBMP("vie.bmp");
vie2=LoadBMP("vie.bmp");
vie3=LoadBMP("vie.bmp");
SDL_SetColorKey(balle,SDL_SRCCOLORKEY ,SDL_MapRGBA(balle->format,255,0,255,0));
SDL_SetColorKey(img_plaqued,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_plaque->format,255,0,255,0));
SDL_SetColorKey(img_plaqueg,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_plaque->format,255,0,255,0));
SDL_SetColorKey(img_plaque,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_plaque->format,255,0,255,0));
SDL_SetColorKey(brique,SDL_SRCCOLORKEY ,SDL_MapRGBA(brique->format,255,0,255,0));
SDL_SetColorKey(vie1,SDL_SRCCOLORKEY ,SDL_MapRGBA(vie1->format,255,0,255,0));
SDL_SetColorKey(vie2,SDL_SRCCOLORKEY ,SDL_MapRGBA(vie2->format,255,0,255,0));
SDL_SetColorKey(vie3,SDL_SRCCOLORKEY ,SDL_MapRGBA(vie3->format,255,0,255,0));

while(1) //boucle principale
{

UpdateEvents(); //recherche d´events, et quitte si echap ou lance la balle si return
if (key[SDLK_RETURN] && start == 0) {sy4 = 1; sx4 = 1; start = 1;}
if (key[SDLK_ESCAPE]) break;

//animation du vaisseau
if (xrelsouris > 0) plaque.anim = 0;
if (xrelsouris == 0) plaque.anim = 1;
if(xrelsouris < 0) plaque.anim = 2;

//mouvements de la balle
ball.x+=9*sx4;
ball.y+=9*sy4;

//rebonds de la balle
if (ball.x<0) sx4=1;
if (ball.y<0) sy4=1;
if (ball.x>785) sx4=-1;
if (ball.y + 16 > plaque.y && ball.x > plaque.x - 100 && ball.x < ball.x + 150 ) sy4=-1;
if (ball.y > 600) ball.in=false;
//destruction des briques
for (i=0; i < 231; i++)
{
if (ball.y >= briks[i].y && ball.y <= briks[i].y + 14 && ball.x >= briks[i].x && ball.x <= briks[i].x + 35 ) {briks[i].in = false; sy4 = -(sy4); joueur.score += 100; } //rebond bas
if (ball.y + 16 >= briks[i].y && ball.y + 16 <= briks[i].y + 14 && ball.x >= briks[i].x && ball.x <= briks[i].x + 35 ) {briks[i].in = false; sy4 = -(sy4); joueur.score += 100; } //rebond haut
if (ball.x >= briks[i].x && ball.x <= briks[i].x + 33 && ball.y >= briks[i].y && ball.y <= briks[i].y + 17 ) {briks[i].in = false; sx4 = -(sx4); joueur.score += 100; } //rebond gauche
if (ball.x + 15 >= briks[i].x && ball.x + 15 <= briks[i].x + 35 && ball.y >= briks[i].y && ball.y <= briks[i].y + 17 ) {briks[i].in = false; sx4 = -(sx4); joueur.score += 100; } //rebond droite
}

// mouvements du vaisseau
plaque.x = xsouris - 100;
if (plaque.x < 100) xsouris = 100;
if (plaque.x > 700) xsouris = 700;

//restart si la balle meurt
if (ball.in == false)
{
joueur.vie--;
SDL_SetColorKey(balle,SDL_SRCCOLORKEY ,SDL_MapRGBA(balle->format,255,0,255,0));
ball.x = 100;
ball.y = 300;
ball.in = true;
plaque.x = 200;
plaque.y = 560;
if (joueur.vie == 2)vie[1].in = false;
if (joueur.vie == 1)vie[2].in = false;
if (joueur.vie == 0)vie[3].in = false;
start = 0;
}
if (joueur.vie == -1) break; // quitte si le joueur n´a plus de vies
// génération a l´écran
SDL_BlitSurface(firstscreen,NULL,screen,NULL);
if (ball.in == true)Blit(balle,screen,ball.x, ball.y);
if (plaque.in == true && plaque.anim == 1)Blit(img_plaque,screen,plaque.x,plaque.y);
if (plaque.in == true && plaque.anim == 0)Blit(img_plaqueg,screen,plaque.x,plaque.y);
if (plaque.in == true && plaque.anim == 2)Blit(img_plaqued,screen,plaque.x,plaque.y);
for (i=0;i<231;i++)
{
if(briks[i].in == true)Blit(brique,screen,briks[i].x,briks[i].y);
}
if (vie[1].in == true)Blit(vie1,screen,vie[1].x,vie[1].y);
if (vie[2].in == true)Blit(vie2,screen,vie[2].x,vie[2].y);
if (vie[3].in == true)Blit(vie3,screen,vie[3].x,vie[3].y);
SDL_Flip(screen);
}
SDL_Quit();
SDL_ShowCursor(1);
return 0;
}

Qui de toute façon est dans le fichier zip.

JeanYvesYves
JeanYvesYves
Niveau 10
01 septembre 2005 à 10:51:09

pourquoi un SDL_SetColorKey appelé en boucle ?

jejej
jejej
Niveau 9
01 septembre 2005 à 10:58:38

je pense que ce sont tes tests qui font ralentir : le coup de ´
//destruction des briques
for (i=0; i < 231; i++)
{

puis mass ´if´ apres , il aime pas ...

tu pourrais peut etre ( je dis ça à l´instinct )
considerer ton ecran comme un tableau , avec des briques bonnes ou non
un tableau a deux entrees

et donc , si ta balle est au coordonnées X,Y
tu regardes si il y a une brique bonne au coordonnées
tab[X%tailledutableau][y/tailledutableau] ( pour % et / , c peut etre l´inverse , trop tot pour reflechir )
et c tout , pas beosin de tout tester , si ta balle est en bas a droite , aucun riques pour que la raquette en haut a gauche soit touchée

N_Cortex
N_Cortex
Niveau 7
01 septembre 2005 à 11:25:29

Donc chez vous aussi ça rame ?

Mais le truc le plus étrange, c´est que mon ancien programme ne RAMAIT PAS AVANT et que maintenant IL RAME !! ! :´(

N_Cortex
N_Cortex
Niveau 7
02 septembre 2005 à 11:31:40

Aperreme,t, chez un pote l´ancien prog de rame pas... Est-ce que ça viendrait de mon pc ?? ?

N_Cortex
N_Cortex
Niveau 7
03 septembre 2005 à 15:32:05

J´ai du nouveau !!

Le problème ne vient pas de la création et de la gestion des briques.

Quand j´ai supprimer tout ça, il ramait toujours !!

N_Cortex
N_Cortex
Niveau 7
03 septembre 2005 à 15:38:52

Excusez moi, je n´avais pas terminer de tester, je suis aller un peu vite. En fait le problème vient des mouvements de la plaque en bas !!

Vengeur41
Vengeur41
Niveau 10
03 septembre 2005 à 15:42:48

Mon avis c´est que tu n´as aucune connaissance préalable en C++ et que tu as sauté tous les cours en mode texte parce que ca te faisait chier pour passer directement à SDL...

Sinon, ben relis les cours, fait des exercices etc au lieu de t´attaquer à trop gros. Avant d´utiliser la SDL il faut que tu connaisse très bien le C++ et que tu sois capable de faire de très gros programme (de gestion par exemple) en mode texte...

N_Cortex
N_Cortex
Niveau 7
03 septembre 2005 à 15:46:21

Avant, mon programme fonctionnait très bien. J´ai rajouter des trucs, puis je les ai enlever. Maintenant mon programme rame a mort. Pourtant, rien n´a été changer par rapport au programme précédent.

En plus, j´avais fait une version courte de mon programme, et elle marchait a merveille. Je l´ai récupérée et elle aussi rame a mort.

Qu´est-ce que mes compétences ont a voir la dedans ?
Ca fait 1 ans que je fais de la programmation, quand meme...

Sous forums
  • Aide à l'achat Mac
  • Internet
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment