Liste et sous programme
Résolu/Fermé
evilfalcon
Messages postés
58
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
10 novembre 2015
-
Modifié par evilfalcon le 31/08/2015 à 12:23
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015 - 2 sept. 2015 à 10:15
evilfalcon Messages postés 58 Date d'inscription samedi 15 décembre 2012 Statut Membre Dernière intervention 10 novembre 2015 - 2 sept. 2015 à 10:15
A voir également:
- Liste et sous programme
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Programme demarrage windows 10 - Guide
- Comment mettre en veille un programme sous windows 10 - Guide
- Liste groupe whatsapp - Guide
3 réponses
Utilisateur anonyme
Modifié par nagashima le 31/08/2015 à 12:46
Modifié par nagashima le 31/08/2015 à 12:46
Salut,
Sans vouloir rentrer en profondeur, essaye dejà de faire ceci dans le main:
ce qui est étonnant c'est que le liste_map cpp n'inclue pas son .h qui devrait être celui qui ajoute les
.... bon je suis sûrement un peu rouillé ^^
naga
[EDIT] ah, et pourquoi redefinir ta structure dans ton fichier contenant le main ?/EDIT
Sans vouloir rentrer en profondeur, essaye dejà de faire ceci dans le main:
#ifndef LISTE_MAP_H_INCLUDED
#include "liste_map.h"
#endif
ce qui est étonnant c'est que le liste_map cpp n'inclue pas son .h qui devrait être celui qui ajoute les
#include <stdio.h>
#include <stdlib.h>
.... bon je suis sûrement un peu rouillé ^^
naga
[EDIT] ah, et pourquoi redefinir ta structure dans ton fichier contenant le main ?/EDIT
evilfalcon
Messages postés
58
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
10 novembre 2015
31 août 2015 à 15:54
31 août 2015 à 15:54
la fonction créa_map:
Lliste crea_map( Lliste liste1, Lliste liste2, Lliste liste3, Lliste liste4, int numero_map, int info_map) { element* nouvelleElement = malloc(sizeof(element)); nouvelleElement -> numero_map = numero_map; nouvelleElement -> info_map = info_map; nouvelleElement -> info_affichage = 0; nouvelleElement -> svt_est = liste1; nouvelleElement -> svt_ouest = liste2; nouvelleElement -> svt_nord = liste3; nouvelleElement -> svt_sud = liste4; return nouvelleElement; }
Voila comment j'ai réfléchie ma fonction:
Etat 0: crea_map reçoit que des NULL mais renvoie une adresse.
Etat 1: crea_map reçoit 3 NULL et une adresse qui l'élément actuelle avec le précédent.
ensuite j'ai 3 autre fonctions pour liée chaque élément avec 3 autre éléments.
oui oui c'est juste que je ne comprends pas c'est le fait de faire :
ca serait plus simple de faire directement :
Mais ce n'est pas un point important ^^ Par contre je ne vois pas de definition pour "generateur_carte" (
Je pense que la première chose a faire pour toi est de ne faire dans un premiers temps qu'un fichier :
Une fois que c'est fait et que ca fonctionne, refais seulement un .h qui contiendra :
- Les includes
- la structure
- L'objet
Ensuite ton main ne contiendra que les l'include de ce .h +fonction+main
(pas besoin de redefinir de structure ou reinclure des bibliotheques -> on recupere le tout du .h)
A mon avis le problème vient du decoupage de ton contenu ( dans ton öain tu redefinis ta structure, ton type et des methodes alors qu'il n y a surtout pas lieu => ca ecrase les precedentes ). En fait il faut que tu te dise que lorsque tu inclu un autre fichier, c'est comme si tu travaillais sur un seul => le fichier que tu inclus s'ajoutera au niveau de la balise #include.
Et donc ceci :
Juste une question con : pourquoi le c et pas le c++ ? avec des classes ca serai plus propre ^^
naga
Lliste carte = NULL;
generateur_carte(lvl);
carte = liste_map(carte, lvl);
ca serait plus simple de faire directement :
generateur_carte(lvl);
Lliste carte = liste_map(NULL, lvl);
Mais ce n'est pas un point important ^^ Par contre je ne vois pas de definition pour "generateur_carte" (
generateur_carte(lvl)), c'est pour ca que je demandais ton code complet ^^ quel est son rôle ?
Je pense que la première chose a faire pour toi est de ne faire dans un premiers temps qu'un fichier :
//-------------INCLUDES--------------//
/***** ici on met les include de base ->iostream etc. *****/
//-------------STRUCTURES---------//
/***** ici tu definis ta structure *******/
//-------------OBJET LISTE----------//
/***** la tu defini ton objet ******/
//-------------FONCTION OBJET---//
/***** ici tu defini les fonctions *****/
//-------------MAIN--------------------//
/**** et donc le main *****/
Une fois que c'est fait et que ca fonctionne, refais seulement un .h qui contiendra :
- Les includes
- la structure
- L'objet
Ensuite ton main ne contiendra que les l'include de ce .h +fonction+main
(pas besoin de redefinir de structure ou reinclure des bibliotheques -> on recupere le tout du .h)
A mon avis le problème vient du decoupage de ton contenu ( dans ton öain tu redefinis ta structure, ton type et des methodes alors qu'il n y a surtout pas lieu => ca ecrase les precedentes ). En fait il faut que tu te dise que lorsque tu inclu un autre fichier, c'est comme si tu travaillais sur un seul => le fichier que tu inclus s'ajoutera au niveau de la balise #include.
Et donc ceci :
Juste une question con : pourquoi le c et pas le c++ ? avec des classes ca serai plus propre ^^
naga
Utilisateur anonyme
31 août 2015 à 17:01
31 août 2015 à 17:01
Il y a certains points aussi qui te poseront surement problèmes. Je prends le premier que j'ai sous les yeux : (elle apparait plusieurs fois, plus ou moins identiques)
en fait ici tu crée 3 pointeurs qui pointent tous sur le même élément, ce qui risque de te poser problème assez vite (surtout que tu les lies entre eux ensuite) ... bref tu risques de te marcher sur les pieds ... mais ce n est pas encore d actualité ^^
Lliste liste_nord_sud(Lliste liste, int lvl)
{
element* tmp = liste;
element* ptmp = liste;
element* pptmp = liste;
.
.
.
}
en fait ici tu crée 3 pointeurs qui pointent tous sur le même élément, ce qui risque de te poser problème assez vite (surtout que tu les lies entre eux ensuite) ... bref tu risques de te marcher sur les pieds ... mais ce n est pas encore d actualité ^^
evilfalcon
Messages postés
58
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
10 novembre 2015
Modifié par evilfalcon le 31/08/2015 à 17:15
Modifié par evilfalcon le 31/08/2015 à 17:15
j'aimerai te passer mon projet mais je ne peux pas mettre mon lien sur le forum.
Si tu es d'accords on peut échanger nos adresse mail que je puis t'envoyer mon projet.
Et là je suis entrain de réorganiser mon programme comme tu me l'as conseillé plus haut, enfin de mieux me retrouver.
Si tu es d'accords on peut échanger nos adresse mail que je puis t'envoyer mon projet.
Et là je suis entrain de réorganiser mon programme comme tu me l'as conseillé plus haut, enfin de mieux me retrouver.
evilfalcon
Messages postés
58
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
10 novembre 2015
>
evilfalcon
Messages postés
58
Date d'inscription
samedi 15 décembre 2012
Statut
Membre
Dernière intervention
10 novembre 2015
2 sept. 2015 à 10:15
2 sept. 2015 à 10:15
C'est bon! Ca fonctionne! Mais je ne sais pas pourquoi! et ni comment!
J'ai juste restructuré mon main!
MAIN
J'ai juste restructuré mon main!
MAIN
/********************** CONSTANTE *******************/ #define MAX 13 /********************** INCLUDES ******************/ #ifdef _WIN32 #include <windows.h> #include <conio.h> #endif #include <stdio.h> #include "ouverture_carte.h" #include "generateur_carte.h" //#include "liste_map.h" #ifndef LISTE_MAP_H_INCLUDED #include "liste_map.h" #endif /********************** STRUCTURES *****************/ /*typedef struct element element; struct element { int numero_map; int info_map; int info_affichage; struct element *svt_nord; struct element *svt_sud; struct element *svt_est; struct element *svt_ouest; };*/ /********************** OBJET LISTE ****************/ //typedef element *Lliste; /********************* FONCTION OBJET **************/ int MyGetch(); void Locate(int x,int y); void Afficher(int x,int y, char laby[MAX][MAX]); void TryMove(int* x,int* y,int vx,int vy, char laby[MAX][MAX]); void affichier_total(Lliste liste, int lvl); /********************* FONCTION MAIN **************/ int main() { int x,y; // position joueur int touche; char laby[MAX][MAX]; int nb_fichier = 1; int lvl = 5; Lliste carte = NULL; generateur_carte(lvl); carte = liste_map(carte, lvl); printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); afficher_la_carte(carte, lvl); //printf("%d",carte); x = 6; y = 1; touche = 0; while(1) { touche = 0; ouverture_fichier(laby, nb_fichier); while(touche!=27) // ECHAP { //touche = MyGetch(); printf(" %d, %d, %c",x,y,nb_fichier); Afficher(x,y,laby); touche = MyGetch(); switch(touche) { case 'q': TryMove(&x,&y,0,-1,laby); break; case 'd': TryMove(&x,&y,0,1,laby); break; case 'z': TryMove(&x,&y,-1,0,laby); break; case 's': TryMove(&x,&y,1,0,laby); break; default: break; } if ((y == 0) && (x == 6)) { carte = carte -> svt_ouest; nb_fichier = carte -> numero_map; x = 6; y = 11; touche = 27; } if ((x == 6) && (y == 12)) { carte = carte -> svt_est; nb_fichier = carte -> numero_map; y = 1; x = 6; touche = 27; } if ((x == 0) && (y == 6)) { carte = carte -> svt_nord; nb_fichier = carte -> numero_map; y = 6; x = 11; touche = 27; } if ((x == 12) && (y == 6)) { carte = carte -> svt_sud; nb_fichier = carte -> numero_map; y = 6; x = 1; touche = 27; } } } return 0; } /********************* FONCTION OBJET SCRIPT **************/ int MyGetch() { #ifdef _WIN32 return getch(); #endif // trouver alternative hors Windows. } void Locate(int x,int y) { #ifdef _WIN32 HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE); COORD C; C.X=(SHORT)x; C.Y=(SHORT)y; SetConsoleCursorPosition(H,C); #endif // trouver alternative hors Windows. } void Afficher(int x,int y, char laby[MAX][MAX]) { int i,j; Locate(0,0); for(i=0;i<MAX;i++) { for(j=0;j<MAX;j++) { if (i==x && j==y) printf("p"); else printf("%c",laby[i][j]); } printf("\n"); } } void TryMove(int* x,int* y,int vx,int vy, char laby[MAX][MAX]) { if (laby[*x+vx][*y+vy]=='*') return; (*x)+=vx; (*y)+=vy; }
31 août 2015 à 13:49
j'obtiens l'erreur: unknow type name 'lliste'.
si je rajoute la structure de la liste même erreur qu'avant déjà définie ailleurs.
et avec les deux bibiliothéques stdio et stdlib dans liste_map.h ça change rien.
<citation>ah, et pourquoi redéfinir ta structure dans ton fichier contenant le main ?</citation>
Il me reste encore quelque ligne de code à écrire qui vont utiliser la liste dans le main. Je configure juste ma liste dans un sous programme.
31 août 2015 à 14:10
j'ai enlevé la définition de la liste dans le main, et je l'ai laissé dans liste_map.h. Maintenant le programme ce compile mais il plante sur l'affichage de la liste. Pourtant, si je demande de l'afficher dans liste_map.c pas de soucis alors que dans le main c'est la bérézina.
31 août 2015 à 14:28
Tu définit aussi ta structure mais aussi (et surtout Lliste) dans le h et dans le cpp. Null besoin (ca risque de creer justement une erreur).
Ensuite j ai un peu peur que tu ai quelques manques de connaissances vis à vis de la portée des variables et des pointeurs.
Par exemple, la ligne
Avec les pointeurs, tu n as pas besoin de retourner en valeur de retour OU il n y a qu'un retour et dans ce cas pas de parametre a passer...
Ce qui est étonnant aussi, c'est que tu créé ce "carte" a null, que tu le passe en paramètre pour enfin faire :
et donc faire la meme chose que :
Enfin, tu utilise la fonction "generateur_carte" que je ne connais pas (pas dans ton cpp ou h).
Je pense qu'il y a 2/3 choses à voir avant que je te donne vraiment une réponse. Peux tu me donner le code complet que tu utilise actuellement ? J essaye de voir ca cet aprem.
Naga