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

[SDL/c++] ma class ne marche pas.

aldi88
aldi88
Niveau 6
10 juin 2012 à 10:58:05

Bonjour a tous

je viens de créer un petit programme, j'ai:
-mob1(qui est le personnage que je contrôle)
-mob2(qui est l'ennemie)

quand mob1 est a droite de mob2, donc quand ses coordonné en x sont supérieurs, le mob2 doit tout simplement se déplacer vers la droite.

je veut utiliser une class, voici mon code:

  1. include <stdlib.h>
  2. include <stdio.h>
  3. include <SDL/SDL.h>

class IA
{

public:

void bouge(){
if (posPers>posIa){
posIa++;
}
}
void prendAxes(int Mob,int Pers){
posIa=Mob;
posPers=Pers;
}

private:
int posIa;
int posPers;

};

void pause();

int main(int argc, char *argv[])
{

int continuer=1;
SDL_Event event;
SDL_Surface *ecran=NULL,*mob1=NULL,*mob2=NULL;

SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL

ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE || SDL_DOUBLEBUF); // Ouverture de la fenêtre
SDL_EnableKeyRepeat(10, 10);// pour ne pas répéter les touche

SDL_Rect positionMob1;

positionMob1.x=0;
positionMob1.y=0;

SDL_Rect positionMob2;

positionMob2.x=100;
positionMob2.y=0;

mob1=SDL_CreateRGBSurface(SDL_HWSURFACE,50,50,32,0
,0,0,0);

mob2=SDL_CreateRGBSurface(SDL_HWSURFACE,50,50,32,0
,0,0,0);

SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,0
,0,255));//couleur de fond

SDL_FillRect(mob1,NULL,SDL_MapRGB(mob1->format,0,2
55,240)); // je colorie le mob1

SDL_FillRect(mob2,NULL,SDL_MapRGB(mob2->format,255
,0,0)); // je colorie le mob2

SDL_BlitSurface(mob1,NULL,ecran,&positionMob1);
SDL_BlitSurface(mob2,NULL,ecran,&positionMob2);

SDL_Flip(ecran);
SDL_Flip(mob1);
SDL_Flip(mob2);

while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_LEFT:
positionMob1.x --; // Fermeture du programme
break;
case SDLK_RIGHT:
positionMob1.x++;
break;
case SDLK_DOWN:
positionMob1.y ++;
break;
case SDLK_UP:
positionMob1.y--;
break;
}
break;
}

IA A;
A.prendAxes(positionMob2.x,positionMob1.x);
A.bouge();

SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
SDL_BlitSurface(mob1,NULL,ecran,&positionMob1);
SDL_BlitSurface(mob2,NULL,ecran,&positionMob2);
SDL_Flip(mob1);
SDL_Flip(mob2);
SDL_Flip(ecran);

}

pause(); // Mise en pause du programme
SDL_FreeSurface(mob1);//je libére la mémoire
SDL_FreeSurface(mob2);

SDL_Quit(); // Arrêt de la SDL

return EXIT_SUCCESS; // Fermeture du programme
}

void pause()
{
int continuer = 1;
SDL_Event event;

while (continuer)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
}
}
}

tout se compile parfaitement bien, mais quand je déplace mob1 a droite de mob2, rien ne se passe,pourquoi? :)

PayGleuh
PayGleuh
Niveau 10
10 juin 2012 à 11:25:21

pastebin.com
Ton code sera quand même un petit peu plus lisible et plus agréable a observer. :)

aldi88
aldi88
Niveau 6
10 juin 2012 à 11:35:38

Oui c'est vrais dsl, voici le code :) :

http://pastebin.com/32LwT7Br

aldi88
aldi88
Niveau 6
10 juin 2012 à 11:37:28

oula j'ai vraiment du mal ^^

voici le bon lien :) :
http://pastebin.com/ANKbxEaD

aldi88
aldi88
Niveau 6
10 juin 2012 à 13:27:34

up, svp.

PayGleuh
PayGleuh
Niveau 10
10 juin 2012 à 13:46:55

Le forum n'est pas le plus actif, ne up pas tant que tu es a lapage 1, tu auras bien quelque réponses, mais pas tout de suite. :)

Nywol4
Nywol4
Niveau 8
11 juin 2012 à 14:42:34

A.bouge() modifie uniquement la variable posIa qui est interne a la classe; elle n'est pas utilisée en dehors c'est pour ça que tu ne vois rien évoluer

Pour que la fonction bouge() modifie une variable qui serait utilisée par des SDL_Surface* mob1 ou mob2, il faudrait envoyer un pointeur à la fonction pour qu'elle puisse modifier la variable que tu cherche à changer avec la fonction

Je sais pas si je suis très clair..

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