Accueil­FAQ­Rechercher­S'enregistrer­Membres­Groupes­Connexion
Poster un nouveau sujet   Répondre au sujetPartager | 
 

 Premier problème [RESOLU]

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2
AuteurMessage
kimerafusion
Possedé par Mark Overmars
Possedé par Mark Overmars


Masculin Nombre de messages: 1622
Programme utilisé (Gm/RmXp/...): gamemaker 7.0 pro, code::blocks, adobe dreamweaver, gnu-gcc
Etudes: futur ingénieur logiciel (j'aimerais bien bosser sur de la nanotechnologie, biotechnologie ou autres), seconde GT
Loisirs: jeux-vidéos - programmation (C/C++, Qt, SDL)
Date d'inscription: 14/10/2008

MessageSujet: Re: Premier problème [RESOLU]   Mer 6 Mai - 15:35

En fait, si je voulais pas utiliser les pointeurs, c'est parce que je savais pas m'en servir ^^
Je viens de m'envoyer le tuto du site du zéro, et voici par quoi sont remplacées mes fonctions dans mon newperso.cpp :
Code:
void newPerso(perso *persoatk, perso *persodef, perso *persovit, perso *persocc, perso *persopv)
{
    *persoatk = (rand() % (5 - 2 + 1)) + 2;
    *persodef = (rand() % (4 - 1 + 1)) + 1;
    *persovit = (rand() % (10 - 3 + 1)) + 3;
    *persocc = (rand() % (100 - 25 + 1)) + 25;
    *persopv = perso.pvmax = (rand() % (10 - 5 + 1)) + 5;
}

voici son prototype dans mon jdrH.h ;
Code:
void newPerso(perso *persoatk, perso *persodef, perso *persovit, perso *persocc, perso *persopv);

et voici ce qu'est devenu mon main.h :
Code:
perso perso;
monstre monstre;
int *persoatk = &perso.atk, *persodef = &perso.def, *persovit = &perso.vit, *persocc = &perso.cc, persopv = &perso.pvmax;
void newPerso(&perso); //On lance les fonctions de création du personnage
cout << perso.atk << " " << perso.def << " " << perso.vit << " " << perso.cc << " " << perso.pvmax << endl;

Mais voici mon log de compil (un paquet d'erreurs...) :
Code:
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\newperso.cpp||In function `void newPerso(perso*, perso*, perso*, perso*, perso*)':|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\newperso.cpp|6|error: no match for 'operator=' in '*persoatk = ((rand() % 4) + 2)'|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\jdrH.H|6|note: candidates are: perso& perso::operator=(const perso&)|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\newperso.cpp|7|error: no match for 'operator=' in '*persodef = ((rand() % 4) + 1)'|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\jdrH.H|6|note: candidates are: perso& perso::operator=(const perso&)|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\newperso.cpp|8|error: no match for 'operator=' in '*persovit = ((rand() % 8) + 3)'|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\jdrH.H|6|note: candidates are: perso& perso::operator=(const perso&)|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\newperso.cpp|9|error: no match for 'operator=' in '*persocc = ((rand() % 76) + 25)'|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\jdrH.H|6|note: candidates are: perso& perso::operator=(const perso&)|
D:\Mes Documents\Projets C et C++\JDR sur console en C++ 1.0\newperso.cpp|10|error: expected primary-expression before '.' token|
||=== Build finished: 5 errors, 0 warnings ===|

Merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://kimerafusion.dixkey.com/
Rayman3640
Experimenté
Experimenté


Masculin Nombre de messages: 429
Age: 15
Programme utilisé (Gm/RmXp/...): GM7 Pro/gcc/Vim/RM2003/
Etudes: Collégien
Loisirs: Informatique, tennis, lecture, écriture, jeux vidéo, handball
Date d'inscription: 29/04/2008

MessageSujet: Re: Premier problème [RESOLU]   Mer 6 Mai - 15:59

Est-ce que tu as déjà lu le chapitre sur les structures (je parle plutôt de la partie sur les pointeurs de structures) ?

Le mieux est d'envoyer un pointeur sur structure à la fonction. De cette façon, pas besoin d'envoyer un pointeur sur ATK, un pointeur sur DEF, etc mais UN SEUL pointeur sur la structure, qui permet de modifier les valeurs de toutes les sous-variables(ATQ, DEF, etc). Le code sera plus clair de cette façon.

Voilà le prototype :
Code:
void newPerso(perso *perso);

Rien de spécial, juste un pointeur sur structure.

Ensuite, le code d'appel de la fonction newPerso :
Code:
perso perso;
newPerso(&perso);
cout << perso.atk << " " << perso.def << " " << perso.vit << " " << perso.cc << " " << perso.pvmax << endl;

On envoie juste l'adresse de la structure perso à la fonction newPerso, puis on affiche les valeurs des variables de la structure (je ne fais que du C, et pas du C++ donc j'ai pu faire une erreur pour l'affichage des valeurs).

Enfin, la fonction newPerso :
Code:
void newPerso(perso *perso)
{
    perso->atk = (rand() % (5 - 2 + 1)) + 2;
    perso->def = (rand() % (4 - 1 + 1)) + 1;
    perso->vit = (rand() % (10 - 3 + 1)) + 3;
    //etc
}
Le perso->atk est un pointeur sur la sous-variable atk de la strucuture perso. C'est l'équivalent de *var sur une variable normale.

_________________

Supra-Quest, un jeu vidéo concentrant une aventure épique, un monde presque sans limites à découvrir et un système de combat novateur !
N'oubliez pas de visiter le SQ-Devblog, le blog de développement du jeu !


Dernière édition par Rayman3640 le Mer 6 Mai - 18:24, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nintendo3000.goldzoneweb.info
kimerafusion
Possedé par Mark Overmars
Possedé par Mark Overmars


Masculin Nombre de messages: 1622
Programme utilisé (Gm/RmXp/...): gamemaker 7.0 pro, code::blocks, adobe dreamweaver, gnu-gcc
Etudes: futur ingénieur logiciel (j'aimerais bien bosser sur de la nanotechnologie, biotechnologie ou autres), seconde GT
Loisirs: jeux-vidéos - programmation (C/C++, Qt, SDL)
Date d'inscription: 14/10/2008

MessageSujet: Re: Premier problème [RESOLU]   Mer 6 Mai - 17:11

ah ok merci beaucoup tu viens de m'apprendre un super truc je teste ce que tu viens de me dire tout de suite! (j'édit pour dire si ça marche ou pas)
EDIT : YOUPIIIIE! ça marche! merci beaucoup tu sera dans les crédits ^^ je met problème résolu!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://kimerafusion.dixkey.com/
Rayman3640
Experimenté
Experimenté


Masculin Nombre de messages: 429
Age: 15
Programme utilisé (Gm/RmXp/...): GM7 Pro/gcc/Vim/RM2003/
Etudes: Collégien
Loisirs: Informatique, tennis, lecture, écriture, jeux vidéo, handball
Date d'inscription: 29/04/2008

MessageSujet: Re: Premier problème [RESOLU]   Mer 6 Mai - 18:25

De rien ! :)
Et bonne chance pour la suite de ton projet de RPG en console ! ;)

_________________

Supra-Quest, un jeu vidéo concentrant une aventure épique, un monde presque sans limites à découvrir et un système de combat novateur !
N'oubliez pas de visiter le SQ-Devblog, le blog de développement du jeu !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nintendo3000.goldzoneweb.info
kimerafusion
Possedé par Mark Overmars
Possedé par Mark Overmars


Masculin Nombre de messages: 1622
Programme utilisé (Gm/RmXp/...): gamemaker 7.0 pro, code::blocks, adobe dreamweaver, gnu-gcc
Etudes: futur ingénieur logiciel (j'aimerais bien bosser sur de la nanotechnologie, biotechnologie ou autres), seconde GT
Loisirs: jeux-vidéos - programmation (C/C++, Qt, SDL)
Date d'inscription: 14/10/2008

MessageSujet: Re: Premier problème [RESOLU]   Mer 6 Mai - 18:32

Merci :)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://kimerafusion.dixkey.com/
Xierra54
Admin - .: el traductor :.
Admin - .: el traductor :.


Masculin Nombre de messages: 8504
Age: 50
Programme utilisé (Gm/RmXp/...): GM (6.1 et 7 enregistrées), Purebasic (démo)
Etudes: Supérieures
Loisirs: ordinateur
Date d'inscription: 13/08/2005

MessageSujet: Re: Premier problème [RESOLU]   Jeu 7 Mai - 2:24

Je pense aussi comme dit plus haut qu'il est "naturel" ici d'utiliser les pointeurs pour pointer dans tes fonctions sur tes structures.
Le plus simple pour toi est de faire en marge un petit prog. en C et tester une seule fonction simple avec un pointeur sur une de tes structures (ceci afin de bien comprendre la syntaxe et surtout comment cela marche)

A+

_________________
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://philippe.ragni.free.fr/
Fireranger
Possedé par Mark Overmars
Possedé par Mark Overmars


Masculin Nombre de messages: 1360
Age: 16
Programme utilisé (Gm/RmXp/...): Game Maker 7 PRO, Visual Basic 9.0, Visual C++ et Code::Blocks
Date d'inscription: 22/11/2007

MessageSujet: Re: Premier problème [RESOLU]   Jeu 7 Mai - 3:42

Oui, je n'y ai pas pensé parce que j'utilise des classes, mais oui, tu dois utiliser des pointeurs sinon ce n'est pas la bonne structure qui sera modifiée :P

S'il te reste des questions, n'hésites pas ^^

_________________
Guten Tag von Deutschland ^^


Jeu en cours : Ping Pong C++ en open source
Bibliothèque : SFML
Avancement : |||||||||| 100% !!!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
kimerafusion
Possedé par Mark Overmars
Possedé par Mark Overmars


Masculin Nombre de messages: 1622
Programme utilisé (Gm/RmXp/...): gamemaker 7.0 pro, code::blocks, adobe dreamweaver, gnu-gcc
Etudes: futur ingénieur logiciel (j'aimerais bien bosser sur de la nanotechnologie, biotechnologie ou autres), seconde GT
Loisirs: jeux-vidéos - programmation (C/C++, Qt, SDL)
Date d'inscription: 14/10/2008

MessageSujet: Re: Premier problème [RESOLU]   Jeu 7 Mai - 17:08

oui oui, vous inquiétez pas, j'ai très bien compris comment fonctionnent les pointeurs, la preuve :
j'ai presque fini de programmer les combats ^^
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://kimerafusion.dixkey.com/
Xierra54
Admin - .: el traductor :.
Admin - .: el traductor :.


Masculin Nombre de messages: 8504
Age: 50
Programme utilisé (Gm/RmXp/...): GM (6.1 et 7 enregistrées), Purebasic (démo)
Etudes: Supérieures
Loisirs: ordinateur
Date d'inscription: 13/08/2005

MessageSujet: Re: Premier problème [RESOLU]   Ven 8 Mai - 1:40

Parfait alors !

Juste une précision qui sera peut-être utile à certains voulant débuter dans la programmation 'classique' .
Un pointeur n'est ni plus ni moins qu'une variable particulière contenant comme valeur une adresse en guise de donnée et non pas simplement une valeur scalaire comme un bête entier, chaine, etc. C'est ainsi qu'en assembleur, on simulait dans le passé l'accès à des structures de données en mémoire qui, en langage assembleur, n'existaient pas à l'origine du langage binaire (aujourd'hui, tout macro-assembleur/editeur propose la gestion des structures)

En ayant cela en tête, cela facilite beaucoup je trouve la compréhension des pointeurs et encore plus la notion de pointeurs doubles (c'est à dire une variable contenant comme valeur une adresse pointant sur une autre adresse)
Aujourd'hui, je pense que d'avoir commencé par le langage assembleur me facilite la compréhension de notions informatiques comme les pointeurs, les structures, les tableaux, les listes chainées, etc. qui ne sont ni plus ni moins des implémentations de données dans la mémoire de l'ordinateur (implémentations plus ou moins compliquées à comprendre et à gérer selon leur type et/ou l'usage que l'on en fait)
Un exemple typique en assembleur d'un programme "qui se mord la queue" et donc pas à suivre (= plantage assuré ou alors faut bien savoir ce que l'on fait !) est celui d'un programme assembleur qui tout simplement modifie son code binaire en mémoire du PC lors de son exécution (certains virus utilisaient beaucoup voire utilisent toujours cette méthode afin de se cacher des programmes anti-virus)
Je crois d'ailleurs que de tels programmes sont dits polymorphes.

A+

_________________
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://philippe.ragni.free.fr/
 

Premier problème [RESOLU]

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2

Permission de ce forum:Vous pouvez répondre aux sujets dans ce forum
Game Maker Zone :: Programmation/Graphisme :: Langages de programmation :: C et C++-
Poster un nouveau sujet   Répondre au sujet