Je suis un étudiant en 1ére année de cycle ingénieur, j'ai un projet en informatique à rendre bientôt.
Sans rentrer dans les détails, il s'agit un jeu de bataille navale en console, avec une possibilité de sauvegarder la partie en cours et de reprendre une partie déjà sauvegardé. J'ai réussi à faire la sauvegarde mais pour le reload je suis perdu.
Tu dis que tu as réussi à faire la sauvegarde sur un fichier. Tu sais comment ouvrir un fichier en écriture. Ça n'est pas vraiment différent en lecture ("r" au lieu de "w") Tu connais le format des lignes ou des blocs. Tu devrais pouvoir faire les opérations dans l'ordre inverse de ce que tu as fait.
Le Tout est souvent plus grand que la somme de ses parties.
Pour se lancer dans le "parsing" du fichier de sauvegarde, il faut quelques renseignements supplémentaires :
Peut on mettre des espaces ou sauts de lignes supplémentaires (à part au milieu d'un nom évidemment)
L'ordre des attributs est il imposé, ou seulement leur présence ?
et aussi savoir si on veut faire un truc générique (utilisable avec peu de modification avec des fichiers de configuration du même type), ou juste un truc qui marche sur ce cas pariculier
PS: destRoyer
- Edité par michelbillaud 28 novembre 2022 à 15:54:35
[...] Il me manque plus que la fonction Load à faire sachant que son prototype est la suivante
void Load(Player* player, Player* computer);
Hello,
avec ce que tu nous montres, ce n'est pas une partie que tu sauves, mais l'état des plateaux de jeu. Une fois récupérés, comment sauras-tu à quel joueur donner la main ?
(....) avec ce que tu nous montres, ce n'est pas une partie que tu sauves, mais l'état des plateaux de jeu. Une fois récupérés, comment sauras-tu à quel joueur donner la main ?
Lors du chargement, il suffit de compter (à condition que chaque plateau les retiennent) le nombre de tirs de player et de computer. Celui qui en tiré le moins sera le premier à jouer.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Ouais mais les structures montrées ne le permettent (pas encore ?), de plus une structure player contient les deux plateaux … je pense qu'avant tout le design est à revoir.
Désolé pour mon retard, j'ai de longues journées surtout avec les partielles en approches....
Merci pour ta réponse White Crow, dans mon sous-programme "play" j'ai un boolean TourIA, j'ai juste a enregistrer son état lors de sauvegarde, de toute façon le sauvegarde n'étant pas une action sur le jeu, si l'humain décide de sauvegarder il perd pas son tour
Je pense avoir terminer le reload du fichier sauf que lors de l'execution du programme, je saisie le nom du fichier à lire pour relancer la partie, rien ne se passe, j'ai debug pour voir ce qui s'est passé et je tombe avec cette erreur
Exception non gérée à 0x00007FFEFE79A142 (ucrtbased.dll) dans Project_Battle_Ship.exe : 0xC0000005 : Violation d'accès lors de la lecture de l'emplacement 0x0000000000000072.
à la ligne 23 et me dit que l'exception sera lévée à partir de "ucrtbased.dll"
Pour Info jutilise VS Community 2022
void Load(Player* player, Player* computer, bool* tourIA)
{
//lister afficher les fichiers dans le repertoire de sauvegarde
struct dirent* dir;
DIR* d = opendir(".");
if (d)
{
while ((dir = readdir(d)) != NULL)
{
printf("%s\n", dir->d_name);
}
closedir(d);
}
//demander à l'utilsateur de taper le nom du fichier
char file_name[256];
printf("Donnez le nom du fichier de sauvegarde pour relancer la partie : ");
int vv = scanf("%s", file_name);
// Ouverture du fichier de sauvegarde
FILE* fp = NULL;
fp = fopen(file_name, 'r');
if (fp != NULL)
{
long count = LoadPlayer(player, fp, 0);
fseek(fp, count, SEEK_SET);
long LoadPlayer(computer, fp, count);
}
else
{
printf("Impossible d'ouvrir le fichier de sauvegarde\n");
}
}
Lignen 23, la manière d'indiquer comment le fichier doit ouvert est une variable de tpe char *, donc entre "
FILE *st=fopen(....,"r");
Il faut lire et corriger les warnings émis par le compilateur. Si tu n'as pas eu de message pour cette ligne 23, avec gcc ajoute les options de compilation -Wall -Wextra
Edit: même sans ces options de compilation, le warning est émis. Mais il est nécessaire de les mettre, lire à partir d'ici (ce n'est pas long)
- Edité par edgarjacobs 1 décembre 2022 à 1:15:45
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Reload d'un fichier .txt pour lancer une partie
× 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.
Le Tout est souvent plus grand que la somme de ses parties.
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