Partage
  • Partager sur Facebook
  • Partager sur Twitter

Reload d'un fichier .txt pour lancer une partie

Sujet résolu
    28 novembre 2022 à 0:48:24

    Bonsoir à tous

    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.

    Voici le header avc les class.

    -
    Edité par Emre_Ras 2 décembre 2022 à 11:08:10

    • Partager sur Facebook
    • Partager sur Twitter
      28 novembre 2022 à 3:14:03

      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.
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        28 novembre 2022 à 6:01:29

        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

        • Partager sur Facebook
        • Partager sur Twitter
          28 novembre 2022 à 16:49:21

          Emre_Ras a écrit:

          [...]
            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 ?



          • Partager sur Facebook
          • Partager sur Twitter
            28 novembre 2022 à 19:51:02

            White Crow a écrit:

            (....) 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.

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              28 novembre 2022 à 20:38:07

              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.
              • Partager sur Facebook
              • Partager sur Twitter
                28 novembre 2022 à 22:29:12

                Bonsoir à tous

                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 

                -
                Edité par Emre_Ras 29 novembre 2022 à 9:03:11

                • Partager sur Facebook
                • Partager sur Twitter
                  30 novembre 2022 à 11:41:05

                  ReBonjour

                  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");
                      }
                  }



                  -
                  Edité par Emre_Ras 30 novembre 2022 à 11:42:46

                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 novembre 2022 à 20:41:18

                    Hello,

                    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

                    • Partager sur Facebook
                    • Partager sur Twitter

                    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.
                    • Editeur
                    • Markdown