Problema con i file in C++

di il
1 risposte

Problema con i file in C++

Ho un problema con il ricaricamento della matrice dentro il mio file, in sostanza appena riapro il programma il mondo di gioco non si carica correttamente e i caratteri vengono messi tutti su una linea.

 Queste sono tutte le costanti e le funzioni:


const int campoY = 100;
const int campoX = 200;
const int visualePlayerX = 30;
const int visualePlayerY = 15;

const int visualePlayerXShip = 30;
const int visualePlayerYShip = 15;

void disegnaCampo(int playerX, int playerY)
{
   system("cls");
   for (int i = playerY - visualePlayerY / 2; i < playerY + visualePlayerY / 2; ++i)
   {
       for (int j = playerX - visualePlayerX / 2; j < playerX + visualePlayerX / 2; ++j)
       {
           if (i >= 0 && i < campoY && j >= 0 && j < campoX)
           {
               cout << dungeon[i][j];
           }
           else
           {
               cout << " ";
           }
       }
       cout << endl;
   }
}

void disegnaNave()
{
   system("cls");
   for (int i = 0; i < shipY; ++i)
   {
       for (int j = 0; j < shipX; ++j)
       {
           cout << spaceShip[i][j];
       }
       cout << endl;
   }
}

void disegnaPianeta()
{
   int posX;
   int posY;

   for(int i = 0; i < 5;i++)
   {
       posX = rand() % (campoX - 4) + 1;
       posY = rand() % (campoY - 2) + 1;
       for (int i = 0; i < campoY; ++i)
   {
       for (int j = 0; j < campoX; ++j)
       {
           if ((i == posY || i == posY + 2) && j >= posX && j < posX + 5)
           {
               dungeon[i][j] = "#";
           }
           else if (i > posY && i < posY + 2 && (j == posX || j == posX + 4))
           {
               dungeon[i][j] = "#";
           }
       }
   }
   }
}

void disegnaAsteroide()
{
   int posX;
   int posY;

   for(int i = 0; i < 5; i++)
   {
       posX = rand() % (campoX - 8) + 1;  // Posizione casuale sull'asse X
       posY = rand() % (campoY - 6) + 1;  // Posizione casuale sull'asse Y

       // Disegna il pentagono
       int midX = posX + 4;
       int midY = posY + 2;

       dungeon[midY][midX] = "0";  // Vertice superiore del pentagono
       dungeon[midY + 1][midX - 1] = "0";  // Lato sinistro
       dungeon[midY + 1][midX + 1] = "0";  // Lato destro
       dungeon[midY + 2][midX - 2] = "0";  // Lato sinistro
       dungeon[midY + 2][midX + 2] = "0";  // Lato destro
       dungeon[midY + 3][midX - 1] = "0";  // Base sinistra
       dungeon[midY + 3][midX] = "0";      // Base
       dungeon[midY + 3][midX + 1] = "0";  // Base destra
   }
}

void inizializzaCampo()
{
   for (int i = 0; i < campoY; ++i)
       {
           for (int j = 0; j < campoX; ++j)
           {
               if (i == 0 || i == campoY - 1 || j == 0 || j == campoX - 1)
               {
                   dungeon[i][j] = "#";
               }
               else
               {
                   dungeon[i][j] = " ";
               }
           }
       }
       disegnaAsteroide();
       disegnaPianeta();
}


void creaMondo()
{
   ifstream file("spazio.txt");

   if(!file.good())
   {
       inizializzaCampo();

       ofstream file("spazio.txt");

       for (int i = 0; i < campoY; ++i)
       {
           for (int j = 0; j < campoX; ++j)
           {
               if (i == 0 || i == campoY - 1 || j == 0 || j == campoX - 1)
               {
                   file << dungeon[i][j];
               }
               else
               {
                   file << dungeon[i][j];
               }
           }

           file << endl;
       }

       file.close();
   }
   else
   {
       ifstream file("spazio.txt");

       if (file.is_open())
       {
           for (int i = 0; i < campoY; ++i)
           {
               for (int j = 0; j < campoX; ++j)
               {
                   if (i == 0 || i == campoY - 1 || j == 0 || j == campoX - 1)
                   {
                       file >> dungeon[i][j];
                   }
                   else
                   {
                       file >> dungeon[i][j];
                   }
               }

           }

           file.close();
           cout << "File 'spazio.txt' creato con successo." << endl;
       }
   }
}

void salvataggioMondo()
{
   ofstream file("spazio.txt");

   if (file.is_open())
   {
       for (int i = 0; i < campoY; ++i)
       {
           for (int j = 0; j < campoX; ++j)
           {
               file << dungeon[i][j];
           }
           file << endl;
       }
       file.close();
       cout << "Mondo di gioco salvato con successo." << endl;
   }
}

Ho messo tutto quello che penso sia necessario per far capire al meglio il problema.

1 Risposte

  • Re: Problema con i file in C++

    Prima di tutto, inserisci il codice tra tag CODE (tasto <> dell'editor del forum) in modo che si legga bene.

    Poi, spiega il problema perché non si è capito nulla.

    Fra l'altro manca il main e molte variabili e array nel sorgente che hai mostrato. Se fai vedere il sorgente, deve essere completo e compulabile

Devi accedere o registrarti per scrivere nel forum
1 risposte