Fonction qui permet de faire un choix sur 10 labyrinthes
DEANETEHEI
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
je debutes en 1° annee en initiation a la prog, je dois concevoir un programme qui permet a l'utilisateur de choisir 1 labyrinthe sur 10 quelqu'un pourrait me donner un coup de pouce?
je debutes en 1° annee en initiation a la prog, je dois concevoir un programme qui permet a l'utilisateur de choisir 1 labyrinthe sur 10 quelqu'un pourrait me donner un coup de pouce?
A voir également:
- Fonction qui permet de faire un choix sur 10 labyrinthes
- Fonction si et - Guide
- Clé de produit windows 10 gratuit - Guide
- Liste déroulante de choix excel - Guide
- Restauration systeme windows 10 - Guide
- Windows 10 ne démarre plus - Guide
3 réponses
Salut,
Voici mon code, le but de la manoeuvre est de pouvoir proposer à l'utilisateur different choix de Labyrinthe, la j'en ai mis K'1, j'ai du implementé une fonction A_Lab pour faire appel, mais j'aimerai qu'il puisse faire appel au 10 autre en même temps est-ce la bonne methode?
Dois-je certainement faire appel au structure de contrôle do while ou de (pointeur mais je n'ai pas encore vue).A bon entendeur pour me donner 1 coup de pouce, merci!!!
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include "affichage.h"
#define LargeurLab 21
#define HauteurLab 20
void A_lab(int LabI[HauteurLab][LargeurLab])
{
int x,y;
int Labyrinthe1 [HauteurLab][LargeurLab]=
{{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};
for(x=0;x<HauteurLab;x++)
{
for(y=0;y<LargeurLab;y++)
{
if(Labyrinthe1[x][y]==0)
printf(" ");
if(Labyrinthe1[x][y]==1)
wprintf(L"\xDB");
PositionneCurseur(x,y);
Couleur(4,0);
}
printf("\n");
//placement du bonhomme
PositionneCurseur(1,1);
x=5;y=7;
PositionneCurseur(x,y);
printf("A");
}
//deplacement dans labyrinthe
while(1)
{
if(kbhit())
{
touche=getch();
if(touche == 72)
{
PositionneCurseur(x,y);
printf(" ");
y--;
}
if(touche == 80)
{
PositionneCurseur(x,y);
printf(" ");
y++;
}
if(touche == 75)
{
PositionneCurseur(x,y);
printf(" ");
x--;
}
if(touche == 77)
{
PositionneCurseur(x,y);
printf(" ");
x++;
}
if(touche == 13) break;
}
}
}
}
void main()
{
int LabI[HauteurLab][LargeurLab];
A_lab(LabI);
}
Voici mon code, le but de la manoeuvre est de pouvoir proposer à l'utilisateur different choix de Labyrinthe, la j'en ai mis K'1, j'ai du implementé une fonction A_Lab pour faire appel, mais j'aimerai qu'il puisse faire appel au 10 autre en même temps est-ce la bonne methode?
Dois-je certainement faire appel au structure de contrôle do while ou de (pointeur mais je n'ai pas encore vue).A bon entendeur pour me donner 1 coup de pouce, merci!!!
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include "affichage.h"
#define LargeurLab 21
#define HauteurLab 20
void A_lab(int LabI[HauteurLab][LargeurLab])
{
int x,y;
int Labyrinthe1 [HauteurLab][LargeurLab]=
{{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};
for(x=0;x<HauteurLab;x++)
{
for(y=0;y<LargeurLab;y++)
{
if(Labyrinthe1[x][y]==0)
printf(" ");
if(Labyrinthe1[x][y]==1)
wprintf(L"\xDB");
PositionneCurseur(x,y);
Couleur(4,0);
}
printf("\n");
//placement du bonhomme
PositionneCurseur(1,1);
x=5;y=7;
PositionneCurseur(x,y);
printf("A");
}
//deplacement dans labyrinthe
while(1)
{
if(kbhit())
{
touche=getch();
if(touche == 72)
{
PositionneCurseur(x,y);
printf(" ");
y--;
}
if(touche == 80)
{
PositionneCurseur(x,y);
printf(" ");
y++;
}
if(touche == 75)
{
PositionneCurseur(x,y);
printf(" ");
x--;
}
if(touche == 77)
{
PositionneCurseur(x,y);
printf(" ");
x++;
}
if(touche == 13) break;
}
}
}
}
void main()
{
int LabI[HauteurLab][LargeurLab];
A_lab(LabI);
}
Salut DEANETEHEI,
Tu peux éventuellement faire un truc comme :
Dans
Dal
Tu peux éventuellement faire un truc comme :
#include <stdio.h> #define LABS 10 #define LABLI 20 #define LABCO 21 int lab[LABS][LABLI][LABCO] = { [0] /* Labyrinthe 1 */ { {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} }, [1] /* Labyrinthe 2 */ { {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} }, etc. [9] /* Labyrinthe 10 */ { {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1} } }; int main(void) { int le_lab; le_lab = choix_labyrinthe(); afficher_labyrinthe(le_lab); jouer(le_lab); return 0; }
Dans
afficher_labyrinthe()et dans
jouer()(à implémenter, ainsi que
choix_labyrinthe()), tu utilises
lab[le_lab][li][co]pour afficher et gérer les déplacements du labyrinthe concerné. Cela évite de répéter le code.
Dal
De rien DEANETEHEI.
Si tu as une question sur la compréhension de mon post ci-dessus, tu peux bien sûr la poser, et je suis persuadé que moi, ou un autre contributeur au forum, t'aideront ou te guideront dans la mesure de leur temps et de leurs capacités.
je pense que mon post répond à ta question sur la sélection (et principe de traitement) de plusieurs labyrinthes dans ton code avec des notions que tu devrais maîtriser.
Si tu as un autre problème identifié sur une partie de ton projet concernant autre chose, poste ta (nouvelle) question sur le forum (dans un nouveau sujet).
Autrement, je ne fais pas de coaching privé, il me faudrait plusieurs vies pour cela :-)
Dal
Si tu as une question sur la compréhension de mon post ci-dessus, tu peux bien sûr la poser, et je suis persuadé que moi, ou un autre contributeur au forum, t'aideront ou te guideront dans la mesure de leur temps et de leurs capacités.
je pense que mon post répond à ta question sur la sélection (et principe de traitement) de plusieurs labyrinthes dans ton code avec des notions que tu devrais maîtriser.
Si tu as un autre problème identifié sur une partie de ton projet concernant autre chose, poste ta (nouvelle) question sur le forum (dans un nouveau sujet).
Autrement, je ne fais pas de coaching privé, il me faudrait plusieurs vies pour cela :-)
Dal
Bonjour @Dal
Je pense que le choix des labyrinthes est plus une question de modularité que d'implémentation je m'explique.
Le programme a pour but de proposer un ou des labyrinthes au joueur de ce fait, si on écrit tout dans le programme, nous aurons plus de possibilités d'ajouter de nouvelle carte mais aussi, toutes solutions (des cartes) seront connues et le jeu à long terme servira pas à grand-chose à part si quelque chose est prévu pour ( génération de cartes aléatoirement etc..) ; Mais dans le cas contraire, il est préférable d'associer au programme des cartes Indépendammen dans un répertoire "Map" et parcourir celui-ci afin de proposer les labyrinthes disponibles j'entends par là, compter et proposer le choix des 1 à "N" et si le choix du joueur est maintenu exemple carte 5 alors on charge la carte en question ce qui laisse également la possibilité au joueur d'éditer sa propre carte indépendamment du programme ou à l'aide de l'éditeur de cartes qui fait partie du programme ( enfin s'il existe ).
à bientôt
Je pense que le choix des labyrinthes est plus une question de modularité que d'implémentation je m'explique.
Le programme a pour but de proposer un ou des labyrinthes au joueur de ce fait, si on écrit tout dans le programme, nous aurons plus de possibilités d'ajouter de nouvelle carte mais aussi, toutes solutions (des cartes) seront connues et le jeu à long terme servira pas à grand-chose à part si quelque chose est prévu pour ( génération de cartes aléatoirement etc..) ; Mais dans le cas contraire, il est préférable d'associer au programme des cartes Indépendammen dans un répertoire "Map" et parcourir celui-ci afin de proposer les labyrinthes disponibles j'entends par là, compter et proposer le choix des 1 à "N" et si le choix du joueur est maintenu exemple carte 5 alors on charge la carte en question ce qui laisse également la possibilité au joueur d'éditer sa propre carte indépendamment du programme ou à l'aide de l'éditeur de cartes qui fait partie du programme ( enfin s'il existe ).
à bientôt
@sambia39 : sur le principe, tu as raison, mais on a affaire à un étudiant en 1ère année qui fait un exercice, qui n'a pas encore appris les pointeurs (et par voie de conséquence pas non plus l'allocation dynamique, ni certainement les fonctions de gestion de fichiers), mais qui a visiblement appris les tableaux multidimensionnels et leur initialisation. Mon exemple va dans le prolongement de cela, en ajoutant simplement une 3ème dimension au tableau.
Dans son énoncé, le nombre de cartes est fixé, et les cartes semblent prédéterminées, alors, je pense qu'il faut oublier la génération ou l'ajout de cartes dynamiques.
@gravgun : impossible ?
Dal
Dans son énoncé, le nombre de cartes est fixé, et les cartes semblent prédéterminées, alors, je pense qu'il faut oublier la génération ou l'ajout de cartes dynamiques.
@gravgun : impossible ?
Dal
Impossible, oui. Le seul moyen de déterminer le chemin d'exécution d'un programme est via les APIs du système sur lequel il tourne,
GetModuleFileNamesous Window$ et
readlinkde /proc/PID/exe sous Linux; pour arriver a un chemin absolu qui sera forcément correct vu que le dossier sera à coté de l'exécutable. Sinon, le chemin sera relatif, non pas à l'exécutable mais au dossier duquel il est lancé (current working dir).
@gravgun : argv[0] n'est pas fiable et, en ce sens, on peut effectivement dire que tu ne peux pas déterminer de façon certaine l'emplacement de l'exécutable lancé en C standard (en C ISO).
Mais faire du C "cross-platform" pour déterminer l'emplacement de l'exécutable lancé est bien sûr possible en sachant pour quelles plateformes tu programmes et en intégrant leurs particularités dans le code à coup de #define et autres Makefile en utilisant les moyens que tu mentionnes toi même à titre d'exemple pour Windows et Linux.
Note que la question de la détermination du répertoire où peuvent se trouver les données utilisées par un programme est différente selon le système d'exploitation et dépasse la simple question de la détermination de l'emplacement de l'exécutable lancé.
Un make install (ou un paquetage) pour un programme conçu pour Linux devrait mettre les exécutables dans un emplacement situé dans le path (du genre /usr/local/bin/ pour une installation locale) alors que les données pourront se trouver dans un emplacement plus habituellement utilisé par les programmes Linux (comme sous /usr/local/share), mais certainement pas dans un répertoire sous l'emplacement où est situé l'exécutable.
https://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html
pareil sous Windows, des données pourront se trouver dans le registre, dans un emplacement définit par le système pour un certain usage, ou pourquoi pas dans un sous-répertoire du répertoire d'installation de l'application.
Cela dit, si ces questions sont intéressantes, je pense qu'on est à côté de la plaque dans cette discussion par rapport à la question (et aux préoccupations) de DEANETEHEI.
Dal
Mais faire du C "cross-platform" pour déterminer l'emplacement de l'exécutable lancé est bien sûr possible en sachant pour quelles plateformes tu programmes et en intégrant leurs particularités dans le code à coup de #define et autres Makefile en utilisant les moyens que tu mentionnes toi même à titre d'exemple pour Windows et Linux.
Note que la question de la détermination du répertoire où peuvent se trouver les données utilisées par un programme est différente selon le système d'exploitation et dépasse la simple question de la détermination de l'emplacement de l'exécutable lancé.
Un make install (ou un paquetage) pour un programme conçu pour Linux devrait mettre les exécutables dans un emplacement situé dans le path (du genre /usr/local/bin/ pour une installation locale) alors que les données pourront se trouver dans un emplacement plus habituellement utilisé par les programmes Linux (comme sous /usr/local/share), mais certainement pas dans un répertoire sous l'emplacement où est situé l'exécutable.
https://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html
pareil sous Windows, des données pourront se trouver dans le registre, dans un emplacement définit par le système pour un certain usage, ou pourquoi pas dans un sous-répertoire du répertoire d'installation de l'application.
Cela dit, si ces questions sont intéressantes, je pense qu'on est à côté de la plaque dans cette discussion par rapport à la question (et aux préoccupations) de DEANETEHEI.
Dal