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

J´aide les personne en C/C++

jejej
jejej
Niveau 9
02 mars 2005 à 17:21:52

j´aiun probleme avec le constructeur d´une classe

j´ai ceci :

une class Map , avec des donnees membres publiques dont ´ char *name´ qui contient le nom de la carte , et ( entre autres ) un constructeur ´Map( char *n )

pour , copier le nom de la carte , des sa creation

j´ai donc naïvemement ecrit ceci :

Map::Map(char *n)
{
strcpy(name,n);
}

et je continue , dans les autres fonctions membres , en utilisant name

le probleme , c´est que ca plante a l´execution , alors que , si je ne mets pas le contructeur , et que je mets par exemple

void AfficheMap( char *name )
et que j´appelle comme ca

pointeur->AfficheMap("depart.j3j");

ca marche parfaitement . .. mon erreur vient donc surement de mon constructeur , mais d´où ? :)
si quelquun sait , merci beaucoup :)

jejej
jejej
Niveau 9
02 mars 2005 à 17:27:17

http://rafb.net/paste/results/1kVc6N46.html

voila mon code
il est inutile de preciser que j´ai effectivement un fichier nomme " depart.j3j" dans mon repertoire de projet , dailleurs sa marche parfaitement si j´enleve le constructeur e fait quelques modifications . ..

Mais quest ce qui nous fait **** avec son constructeur , celui la , si ca marche autrement ? hehe , je VEUX un constructeur , merci a ceux qui m´aideront :)

Orquss
Orquss
Niveau 7
02 mars 2005 à 17:28:14

Je suis aau numero 15 et a partir du numero 9, je n´arrive plus a faire les questions , sinon, j´arrive a peu pres a comprendre le languege utilisé.

jejej
jejej
Niveau 9
02 mars 2005 à 17:34:17

sonic66 : je comprends pas ta question :

TOUT est ecrit en commentaire

void waitkey == le nom de la fonction
while(1) == une boucle infinie
while(SDL_PollEvent(&)) == recupere un evenement

-> c´est comme ca et puis c´est tout , sa marche sa marche , pas besoin d´y toucher , pas besoin de decompiler la SDL hein

if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ?

ca me parait clair , tu dois avoir plus haut une variable style
SDL_Event event; non ? ben , cette variable recupere les eventuels appuis sur une touches : pareil , c comme ca et pas autrement

if ( event.key.keysym.sym == SDLK_RETURN) return; / / c´est " RETURN" ?

est ce qu´on appuie sur la touche entree ( == return en english ) ? si oui , bah hop , on donne cette information a la variable event ,
et comme pollevent regarde si qqchose c passe dans event ( & donc ) , bah elle peut decider autre chose : quitter ?

si c le event.key.keysym.sym qui te fait peur , bah dis toi que c comme ca et pas autrement , apreil , tu verras que c juste des structures de données qui portent ce nom la , mais pour l´instant tu t´en fiches :)

pas ete clair moi ? roooh

Orquss
Orquss
Niveau 7
02 mars 2005 à 17:40:44

Sinon, JYY pour la page internet SDL pour telecharger en dev c++ il me mette quand je clique sur le lien :

D´abord, téléchargez SDL pour DEV C++ :

SDL pour DEV C++ / /celui la

La page est :

La page ne peut pas être affichée
La page que vous recherchez est actuellement indisponible. Le site Web rencontre peut-être des difficultés techniques ou il vous faut peut-être modifier les paramètres de votre navigateur.

--------------------------------------------------
------------------------------

Essayez de la manière suivante :

Cliquez sur le bouton Actualiser ou réessayez ultérieurement.

Si vous avez tapé l´adresse de cette page dans la barre d´adresses, vérifiez que l´adresse est correcte.

Pour vérifier vos paramètres de connexion, cliquez sur le menu Outils, puis sur Options Internet. Dans l´onglet Connexions, cliquez sur Paramètres LAN. Les paramètres doivent correspondre à ceux fournis par votre administrateur local ( LAN) ou par votre fournisseur de services Internet.
Si votre administrateur réseau a autorisé cette opération, Microsoft Windows peut examiner votre réseau et détecter automatiquement les paramètres de connexion réseau.
Si vous souhaitez que Windows essaie de les trouver,
cliquez sur Détecter les paramètres réseau
Certains sites nécessitent une sécurité de connexion 128 bits. Cliquez sur le menu ? , puis sur À propos de Internet Explorer pour déterminer quelle puissance de chiffrement vous avez installée.
Si vous essayez d´atteindre un site sécurisé, vérifiez que vos paramètres de sécurité peuvent le prendre en charge. Cliquez sur le menu Outils puis sur Options Internet. Dans l´onglet Avancées, passez à la section Sécurité, puis vérifiez les paramètres de SSL 2.0, SSL 3.0, TLS 1.0 et PCT 1.0.
Cliquez sur le bouton Précédente pour essayer un autre lien.

As tu un lien qui fonctionne oçu c´est mon ordi qui est pourri et qui arrive pas a lire ta page?

JeanYvesYves
JeanYvesYves
Niveau 10
02 mars 2005 à 18:37:28

salut !

pour ton constructeur
strcpy necessite que ta mémoire soit allouée avant :

Map::Map(char* n)
{
name = new char[strlen(n)+1];
strcpy(name,n);
}

n´oublie pas le destructeur pour etre propre :

Map::~Map()
{
delete [] name;
}

jejej
jejej
Niveau 9
02 mars 2005 à 20:18:59

Merci beaucoup , ca marche :)

par contre , j´ai perdu mon livre de c++ ( :honte: ) et je me rappelle plus comment delete un entier ( int ^poids en fait )
j´ai fait delete poids , mais il me dit que c´est un " pointeur expected" . ..

ou peut etre qu´il n´y a pas besoin de le delete . ..

en tout cas , ca marche :)

sonic66
sonic66
Niveau 10
02 mars 2005 à 20:34:55

a ok!
sdl-pollevent sert a recuperer un evenement et il les recuperent a ladresse d´event!
et au fait un evenement cest quoi ?
un evenement est til toujour lappuie dune touche?

et la
if ( event.type == SDL_KEYDOWN) / / on appuie sur une touche ? pourquoi event.TYPE ?
{
if ( event.key.keysym.sym == SDLK_RETURN) return; / / c´est " RETURN" ? pourquoi event.KEY.KEYSYM.SYM???

jejej
jejej
Niveau 9
02 mars 2005 à 20:41:48

un evenement , ca peut etre le redimensionnement d´une fenetre , comme l´appui sur le bouton de la souris , etc

event.KEY.KEYSYM.SYM

event , c´est ta variable
tu peux mettre
SDL_Event truc
puis
truc.KEY.KEYSYM.SYM

key.keysym.sym , je connais pas du tout , mais au vu du nombre de points , je dirais que ce sont des structures . ..il serait interessant d´essayer ca dailleurs :

SDL_Event *pevent;
pevent = new SDL_Event event
pevent->KEY->KEYSYM->SYM
mais je pense pas que ca amrche . ....

encore une fois , fais toi une raison , dis toi que tant que ca marche , c bon nan ? en plus , c´est une fonction faite par JYY , et tu n´as plus qu´a la copier coller pour la faire fonctionner , pas besoin de se preoccuper du code . .. :)

sonic66
sonic66
Niveau 10
02 mars 2005 à 20:45:47

oui en fait , pour linstand je ne doit pas chercher a comprrendre tout!

jejej
jejej
Niveau 9
02 mars 2005 à 20:52:29

Encore une fois un probleme ( c relou , parceque je fais toute la logique sur papier , c´est sense fonctionner au poil , et pof le vieux bug venu d´on ne sait pas ou qui vient tout faire rater . .. ) :

Bon , voici une breve description du format . j3j ( au cas ou vous voudriez creer un exporteur de map , ou un decodeur etc - libre de droits ^^ )

en fait , c´est une serie de chiffres il faut les lire en binaire
0121542136
trois par trois , c´est l´absisse du tile ( 0 ) son ordonnee ( 1) et le numero du tileset ( 2 ici ) puis on passe au tile suivant etc :)
super complexe ^^

donc , il me fallait une fonction pour decoder ce machin :

la voici :
void Map::AfficheMap()
{
int i;
for ( i=0 ; i<poids ; i+3 )
{
cout<<"affichage du tile de coordonnee"<<carte[i] < <" " <<carte[i+1]<< " du tileset numero"<< carte[i+2];
cin.get();
}
}

en verite , mon fichier . j3j contient ceci :
01010145445454554
lors de l´execution , tout semble se passer normalement la premiere fois

j´obtiens ceci
affichage du tile de coordonnee 0 1 du tileset numero 0
mais , apres l´appuie sur entree , c´est la meme phrase qui revient encore et toujours ( au lieu de 101 puis 454 puis 456 puis 545 etc )

vous voyez d´où ca peut venir ?

jejej
jejej
Niveau 9
02 mars 2005 à 21:02:40

ah ben , j´ai rien dit en fait

je pensais qu´au meme titre que
i++
fonctionnait
i+3 marchait aussi

mais . .. non :)
j´ai mis i+=3 et ca rullz :)
meme plus de question pour ce soir :)

JeanYvesYves
JeanYvesYves
Niveau 10
02 mars 2005 à 23:57:38

jejej > Impec :)
tu es en train d´aquérir une certaine autonomie ( ce qui ne m´empechera pas de répondre a tes question)
mais tu as dépassé le stade de le programmation " aveugle" : on tape ce qu´on nous dit, et si ça ne marche pas, on panique
tu commences a bien prendre les choses en main, et tu arrives maintenant à raisonner de mieux en mieux ! Mes félicitations :) Tu es sur la bonne voie :ok:

MrGoTo
MrGoTo
Niveau 8
03 mars 2005 à 02:56:27

Arrete se faire feliciter par le modéro ça fait saigner du nez et chier dans son froc tant le bonheur est grand :-)
Enfin bravo quand même jejej :ok:

nulissimo
nulissimo
Niveau 4
03 mars 2005 à 13:29:13

SDL_Surface* LoadBMP(char* fichier) / / 2eme forme
{
SDL_Surface* f = SDL_LoadBMP(fichier); // charge l´image dans f en RAM
SDL_Surface* surface=SDL_CreateRGBSurface(SDL_HWSURFACE, 1024, 768, 32, 0, 0, 0, 0); / / cree une image en VRAM
SDL_Rect R=Rect(0,0,f->w,f->h);
SDL_BlitSurface(f,NULL,firstscreen,&); // 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 surface;
}

Je comprend pas ces lignes
SDL_Surface* LoadBMP(char* fichier)

>char* fichier, ca represente quoi ?

SDL_Rect R=Rect(0,0,f->w,f->h)

>(0,0,f->w,f->h) pas compris...

inconnu[pure]
inconnu[pure]
Niveau 6
03 mars 2005 à 13:41:47

char *fichier represente l´URL/le destination de ton image et ( 0,0,f->w,f->h) -> ( l´abssise x,l´abssise y,largeur,hauteur)

JeanYvesYves
JeanYvesYves
Niveau 10
03 mars 2005 à 14:05:50

bienvenu au royaume des pointeurs :)

char* est un pointeur sur un tableau de char :
en gros, ça désigne ici une chaine entiere, dans ce cas, le nom de ton fichier.

f->w est équivalent à ( *f).w
parce que f est un pointeur sur une surface
donc pour accéder a la surface, il faut faire *f
ensuite, pour accéder au champ w qui est la largeur ( width) de l´image, c´est . w
donc tu as :

( *f).w
et un raccourci en C, c´est de mettre :
f->w

nulissimo
nulissimo
Niveau 4
03 mars 2005 à 16:41:46

Donc si j´ai bien compris :

SDL_Surface* LoadBMP(char* fichier)
/ /charge un BMP du nom de fichier
{
SDL_Surface* f = SDL_LoadBMP(fichier);
/ /declare une surface f contenant le BMP " fichier"

SDL_Surface* surface=SDL_CreateRGBSurface(SDL_HWSURFACE, 1024, 768, 32, 0, 0, 0, 0);
/ /charge cette image dans la VRAM
/ /(les codes, j´ai pas bien compris mais je comprendrais surement plus tard)

SDL_Rect R=Rect(0,0,f->w,f->h);
/ /declaration d´un rectangle x=0, y=0, *f=w, *f=h
/ /et je suppose qu´il s´agit de *f.w et *f.h
/ /avec *f.w les valeurs de l´image

SDL_BlitSurface(f,NULL,firstscreen,&);
/ /On stocke en Vram l´image de f en entier, on la colle sur firstscreen et R?

SDL_FreeSurface(f);
/ /On libere la surface f de la ram

return surface;
/ /j´ai pas compris de quelle surface il s´agit...

J´ai aussi quelques questions :
1)Quand est ce que ce code est executé ? Je vois pas ou on l´appelle.
2)SDL_BlitSurface : quels sont les parametres rentré ? Je sais pas si j´ai bien compris :
le premier parametre est la surface a coller
Le second est NULL ( ou pas)
Le troisieme est le support
Le quatrieme est la position

C´est ca?

JeanYvesYves
JeanYvesYves
Niveau 10
03 mars 2005 à 17:01:26

1) l´enesemble de ce code est dans ma fonction LoadBMP :)

ce code est donc appelé quand on appelle la fonction LoadBMP : a savoir plusieurs fois dans le main : une fois pour charger " firstscreen" : mon image de fond, et ensuite une fois pour charger " balle" ( tuto 2.1.3)

SDL_Surface* surface=SDL_CreateRGBSurface(SDL_HWSURFACE, 1024, 768, 32, 0, 0, 0, 0);
/ /charge cette image dans la VRAM
/ /(les codes, j´ai pas bien compris mais je comprendrais surement plus tard)

--> SDL_HWSURFACE veut dire que tu demandes a ce que la surface se crée en VRAM. 1024*768 : résolution de la surface, 32 : nombre de bits par pixels, et les 4 zeros qui suivent sont la colorKey ( dont je ne me sers pas pour le moment) tu verras l´utilité de la colorkey sur le tuto de la balle :) importante propriété :)

pour SDLrect, tu supposes bien :)
attention cependant quand tu écris *f.w, ça revient a *(f.w) et non pas ( *f).w
donc met bien les parentheses, ou alors met f->w
car

( *a).b < => a->b

SDL_BlitSurface(f,NULL,firstscreen,&);
/ / On stocke en Vram l´image de f en entier, on la colle sur firstscreen et R?

--> Je répondrais a ça apres ta question a la fin.

SDL_FreeSurface(f);
/ / On libere la surface f de la ram

--> pareil, a la fin

SDL_BlitSurface : quels sont les parametres rentré ? Je sais pas si j´ai bien compris :
le premier parametre est la surface a coller
Le second est NULL ( ou pas)
Le troisieme est le support
Le quatrieme est la position

Alors, d´une façon générale, tu as :

SDL_BlitSurface(is,rs,id,rd);

is : Image source : quelle image tu veux coller ?
rs : Rectangle source : dans cette image, si tu ne veux en coller qu´une partie : par exemple, tu veux coller qu´un bout de la balle...
tu mets NULL pour dire " je colle TOUTE l´image"

id : image destination : ou tu mets ton image
rd : seuls les points x,y de la structure sont pris en compte : w et h sont ignorés :
tu définis sur la surface id ou tu vas mettre le coin supérieur gauche de ta surface is

Donc pour revenir sur les questions d´avant :

SDL_Surface* f = SDL_LoadBMP(fichier);
/ / charge le BMP provisoirement dans f

ensuite, avec le if, on crée une image vierge, de pile la bonne taille, en RAM ou en VRAM comme tu as pu le voir. L´interet est qu´en créant une image vierge, tu lui impose une profondeur de 32, ce qui n´est pas le cas avec le SDL_LoadBMP qui pourra mettre 16,24 . ...

Ensuite,
SDL_BlitSurface(f,NULL,firstscreen,&);
--> on colle TOUTE l´image f sur le 0,0 de firstscreeen, autrement dit, on colle brutalement.
le f->w,f->h passé dans R ne sert en fait a rien, mais bon, c´était pour mettre qq chose : essaie de mettre 0,0, tu verras, ça marche tout aussi bien.

SDL_FreeSurface(f);
--> Supprime l´image temporaire : puisqu´on l´a copiée dans firstscreen, on n´en a plus besoin, donc on libere la mémoire...

nulissimo
nulissimo
Niveau 4
03 mars 2005 à 20:37:20

:merci:

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