Je suis nouveau sur le forum, mais ça fait longtemps que je suis certains cours sur ce site (je me rappelle encore de l'époque du site du zéro ahah).
Je dois réaliser un programme en C dans le cadre de mes études, et il y a certains points pour lesquels j'ai besoin de précisions. (D'ailleurs, vaut-il mieux que je fasse plusieurs topic pour chaque question, ou que je les rassemble toutes ici au fur et à mesure qu'elles me viennent ?)
En gros je dois réaliser un jeu de société en C. On nous demande de laisser le choix à l'utilisateur entre 4 plateaux de jeu. Pour cela, et pour éviter de coder les plateaux directement dans des variables qui prendraient de la place mémoire, j'ai codé les plateaux dans un fichier.txt et je les lis grâce à fopen, fgets, etc... Quand je compile dans code blocks, tout cela fonctionne très bien et j'arrive à lire les plateaux. Mais quand je lance le .exe, il n'arrive pas à trouver les fichiers.txt. Sachant que je dois rendre le projet par internet, je me demande comment fait-on pour gérer les chemins d'accès au fichiers.
C'est ce que j'avais compris oui. Mais puisque je dois transmettre mes fichiers pour le rendu, je peux pas mettre de chemin absolu nan ? Puisque je ne connais pas le dossiers dans lequel mon professeur mettra mes fichiers. Et pour le chemin relatif, c'est à partir d'où ? Il n'y a pas un moyen dans code blocks de régler l'endroit ou se trouve le .exe ?
Et si, pour ton prof, tu mettais tout simplement les "data" dans le répertoire de l'exécutable (en modifiant les fopen évidemment) ? Là, normalement, pas de souci (sauf peut-être si exécuté à partir d'un ide, mais comme je n'en emploie pas....)
- Edité par edgarjacobs 1 mai 2018 à 15:05:49
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Et si, pour ton prof, tu mettais tout simplement les "data" dans le répertoire de l'exécutable (en modifiant les fopen évidemment) ? Là, normalement, pas de souci (sauf peut-être si exécuté à partir d'un ide, mais comme je n'en emploie pas....)
- Edité par edgarjacobs il y a environ 3 heures
Salut ! Donc je dois abandonner mon arborescence et tout mettre dans un seul et même fichier ?
C'est juste une idée, en dépannage. Pas sur qu'elle soit bonne (trop de modif ??). Peut-être un programme d'installation comme inno setup (mais je vais peut-être chercher un peu loin pour un simple exercice).
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Tout le monde écrit que les chemins relatifs sont résolus depuis le fichier exécutable, mais c'est faux. Les chemins relatifs sont résolus depuis le répertoire de travail courant (current working directory).
Tout le monde écrit que les chemins relatifs sont résolus depuis le fichier exécutable, mais c'est faux. Les chemins relatifs sont résolus depuis le répertoire de travail courant (current working directory).
...qui par défaut est celui de l'exécutable (sous windows au moins....). Mais il a raison quand-même.
Sous Windows, tu fais un clic droit/propriétés sur l'exe ou un raccourci y menant. Il s'agît du répertoire qui apparaît au paramètre "démarrer dans :". Par contre, tu n'es maître de cette propriété que pour toi-même. Par exemple si ton répertoire est "mes documents/mon jeu" et que tu fais exécuter dans "program files", il faudra que tes chemins (relatifs) partent de là, mais transférer le dossier de ton jeu à un tiers le remettra automatiquement au dossier de l'exe pour cette personne.
Bref, pas besoin de te faire des nœuds au cerveau, tes chemins relatifs sont bons et ton programme fonctionne ? Tu zip le dossier qui contient le tout, tu lui envoies par internet, il dézip, il lance l'exe et ça fonctionnera pareil.
Juste faire attention qu'avec code::blocks, l'exécution en "debug" a pour référence le dossier du projet.cbp, le release, lui, part du dossier de l'exe.
En théorie, pas un prof n'est assez con ou vicelard pour déplacer les répertoires et/ou changer les répertoires de travail puis se plaindre après que ça ne fonctionne pas. S'il joue avec les dossiers de son Os, il aura des problèmes aussi.
Désolé pour le temps de réponse, j'avais partiels (ça part sur un 18 en informatique juste parce que j'ai révisé les mallocs la veille ! )
Pour le projet, je dois uniquement rendre les fichiers sources (.c .h et .txt pour les plateaux). Il ne veut pas du .exe. Je pense qu'il comprendra quels sont les fichiers .txt (sachant que ce sont les seuls que j'utilise avec fopen ahah).
Une autre question qui n'a rien à voir :
J'utilise un sous programme qui affiche mon plateau de jeu dans la console (la SDL c'était trop dur xD ). Pour cela je doit lui transmettre ledit plateau, plus le tableau dynamique contenant les personnages et leurs coordonnées sur le plateau. Dans mon sous programme de 'TEST', il arrive à bien appeler le SP d'affichage. Mais dans mon SP 'tourdujoueur' (qui gère la partie) il n'arrive pas à l’appeler alors que j'ai les mêmes paramètres. Vous pouvez m'expliquer quel est le problème ?
Je vous met des le code ici :
Code du sous programme 'test' qui fonctionne :
#include "main.h"
#include "divers.h"
void test(S_Joueurs *playerslocal, S_personnages *persolocal, S_donnees donnelocale)
{
int i;
printf("Nb de joueurs : %d\n",donnelocale.nbjoueur);
printf("plateau : \n");
S_plateau *p = NULL;
p = &donnelocale.plateau[0][0];
affichageingame(p, persolocal, donnelocale.nbperso);
printf("\n\n\n");
for(i=0;i<donnelocale.nbjoueur;i++)
{
printf(" Joueur numero : %d\n", playerslocal[i].numero);
printf(" Nom : "); puts(playerslocal[i].nom); printf("\n");
printf(" ID du tueur: %d\n", playerslocal[i].IDtueur);
printf(" ID cible 1: %d\n", playerslocal[i].IDcible1);
printf(" ID cible 2: %d\n", playerslocal[i].IDcible2);
printf(" ID cilbe 3: %d\n", playerslocal[i].IDcible3);
printf("\n");
}
system("pause");
return;
}
Le sous programme que je cherche à appeler est afficheingame(); !
Voila merci encore pour votre aide ^^!
Lecture de fichiers avec fopen
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Bonhomme !! | Jeu de plateforme : Prototype.
Bonhomme !! | Jeu de plateforme : Prototype.