Zapis i odczyt stanu gry - zapis nie zawsze działa prawidłowo

0

Witam zrobiłem sobie prostą gre ,którą można zapisać i przy jej uruchomieniu wybieramy czy chcemy odczytać z ostaniego zapisu czy gramy od nowa.
Gdy zapisuje gre,którą zacząłem od nowa to wszystko działa.
Problem polega na tym, że gdy uruchomie gre z ostatniego zapisu a następnie po zakończeniu bede chciał ja zapisać to zapis nie uda się.
Nie wiem jak uporać się z tym problemem kod zapisu i odczytu :
Wczytanie.

void wczytanie()
{



            plik.open("zapis.txt",ios::in);
    if(plik.good()==false)
    {
        cout<<"Nie ma takiego pliku ! ";
    }
    string linia;  int nr_linii=1;
while(getline(plik,linia))
{
    switch(nr_linii)
    {
        case 1:dane[0]=atoi(linia.c_str()); break;
        case 2:dane[1]=atoi(linia.c_str());break;
    }







    nr_linii++;
}
zloto=zloto+dane[0];
poziom=poziom+dane[1];
cout<<"Ilosc zlota po wczytaniu: "<<zloto<<endl;
cout<<"Twoj poziom po wczytaniu: "<<poziom<<endl;
    }

 

Zapis.

 void swicz8()
{
    int zapis;
    cout<<"Zapisz gre: ";
    cin>>zapis;
    if(zapis==1)
    {
        plik.open("zapis.txt",ios::out);

plik<<zloto<<endl;
plik<<poziom<<endl;
    }
}


1

Jaki dokładnie błąd ci wyskakuje?
Na razie strzelam że nie zamykasz pliku po modyfikacji.

0

Nie wyskakuje mi żaden błąd tylko gdy odpale program i wybiore wczytanie z poprzedniego zapisu to nie moge zrobić nowego zapisu tak by zamienił poprzedni.

0

A zamykasz gdzies plik po wczytaniu danych?

0
 
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <windows.h>

using namespace std;


fstream plik;
int x=0,z=0;                   //rozdawanie statystyk
int poziom,wybor,zloto,atak,obrona,szybkosc,dane[2];
int moc=0;


void menu();
void wyborvoid();
void wczytanie();


void swicz1();
void swicz2();
void swicz3();
void swicz4();
void swicz5();
void swicz6();
void swicz7();
void swicz8();
void swicz9();
void swicz10();









int main()
{


cout<<" Witamy ! \nCzy chcialbys wczytac gre poprzednia gre ? Jesli tak wybierz 1"<<endl;
int wczytaniepoczatek;
cin>>wczytaniepoczatek;
if(wczytaniepoczatek==1)
{

    wczytanie();

}













            for(int i=0;i<999999999;i++)
                {


                    menu();

                    cin>>wybor;
                    switch(wybor)
                {
                case 1:swicz1();break;

                case 2:swicz2();break;
                case 3:swicz3(); break;
                case 4:swicz4();break;
                case 5:swicz5();break;
                case 6:swicz6();break;
                case 7:swicz7();break;
                case 8:swicz8();break;
                case 9:swicz9();break;
                case 10:swicz10();break;



                }






  if(zloto<0)
  {
      cout<<"JESTES BIEDNY ! PRZEGRALES ...";
      Sleep(1500);
      exit(0);
  }

  cout<<endl;
  Sleep(1500);
  system("cls");
   }



}



void menu()
{
    cout<<"1.POGLAD"<<endl;
    cout<<"2.SKLEP"<<endl;
    cout<<"3.WALKA"<<endl;
    cout<<"4.WYPRAWA"<<endl;
    cout<<"5.kasyno"<<endl;
    cout<<"6.Praca"<<endl;
    cout<<"7.Rozdaj statystyki"<<endl;
    cout<<"8.Zapis"<<endl;
    cout<<"9.Walka z Bossem"<<endl;
    cout<<"10.Wyjscie"<<endl;
    moc=atak+obrona+szybkosc;

}
void wczytanie()
{



            plik.open("zapis.txt",ios::in);
    if(plik.good()==false)
    {
        cout<<"Nie ma takiego pliku ! ";
    }
    string linia;  int nr_linii=1;
while(getline(plik,linia))
{
    switch(nr_linii)
    {
        case 1:dane[0]=atoi(linia.c_str()); break;
        case 2:dane[1]=atoi(linia.c_str());break;
    }







    nr_linii++;
}
zloto=zloto+dane[0];
poziom=poziom+dane[1];
cout<<"Ilosc zlota po wczytaniu: "<<zloto<<endl;
cout<<"Twoj poziom po wczytaniu: "<<poziom<<endl;
    }




void swicz1()
{



cout<<"TWOJE STATYSTYKI: "<<endl;
  cout<<"ATAK: "<<atak<<endl;
  cout<<"OBRONA: "<<obrona<<endl;
  cout<<"SZYBKOSC: "<<szybkosc<<endl;
  cout<<"TWOJ POZIOM: "<<poziom<<endl;
  cout<<"OBECNIE MASZ "<<zloto<<"ZLOTA";



}
void swicz2()
{
    int kup;
   cout<<"OBECNIE MASZ: "<<zloto<<" Zlota"<<endl;
    cout<<"1.REKAWICE BOKSERSKIE +5 ATAK: KOSZT 20 ZLOTA:"<<endl;
    cout<<"2.TARCZA +8 OBRONA:  KOSZT 40 ZLOTA "<<endl;
    cout<<"3.BUTY NAJKI +3 SZYBKOSC: KOSZT 15ZLOTA "<<endl;
    cout<<"Wybierz Co chcesz kupic"<<endl;
    cin>>kup;
    switch(kup)
    {
        case 1: if(zloto>=20)
        {


            atak=atak+5;
            cout<<"KUPILES REKAWICE BOKSERSKIE !"<<endl;
        cout<<"TWOJE ZLOTO OBECNIE WYNOSI: ";
        zloto=zloto-20;
        cout<<zloto;
        }
        else
            {cout<<"Nie masz tyle zlota !";} break;
        case 2:if(zloto>=40)
        {


            obrona=obrona+8;
            cout<<"KUPILES TARCZE !"<<endl;
        cout<<"TWOJE ZLOTO OBECNIE WYNOSI: ";
        zloto=zloto-40;
        cout<<zloto;
        }
        else {cout<<"Nie masz tyle zlota !";}  break;
        case 3:if(zloto>=15)
        {

            szybkosc=szybkosc+3;
            cout<<"KUPILES BUTY NAJKI !"<<endl;
        cout<<"TWOJE ZLOTO OBECNIE WYNOSI :";
        zloto=zloto-15;}
        else {cout<<"Nie masz tyle zlota !";} break;


    }
}


void swicz3()
{srand(time(0));
    int a;
a=rand()%3+1;

if(a==0||a==1||a==2)
{
    cout<<"WALCZYSZ Z PRZECIWNIKIEM: "; cout<<"WYGRYWASZ TWOJ POZIOM TO: ";
  poziom=poziom+3;
  cout<<poziom<<endl;
  cout<<"Wygrales zloto Obecnie twoj stan zlota to : "<<endl;
  zloto=zloto+rand()%20+5;
  cout<<zloto;
}
else
{
    cout<<"przegrales !";cout<<"TWOJ POZIOM TO:";
    poziom=poziom-2;
    cout<<poziom<<endl;
    cout<<"Przegrales straciles zloto Obecnie twoj stan zlota to:"<<endl;
    zloto=zloto+rand()%-5-15;
    cout<<zloto;


}

}

void swicz4()
{
    srand(time(0));
    int gdzie,polska,niemcy,anglia;
    gdzie=rand()%3+1;
    switch(gdzie)
    {
        case 1:cout<<"Wyruszasz na wyprawe do Polski ! ";
        polska=rand()%3+1;
        Sleep(3000); cout<<"Zarobiles: "<<polska<<"ZL";
        zloto=zloto+polska;
        cout<<"Obecny stan zlota: "<<zloto; break;
        case 2:cout<<"Wyruszasz na wyprawe do Niemiec !";
        cout<<"Wyruszasz na wyprawe do Niemiec ! ";
        niemcy=rand()%10+1;
        Sleep(3000); cout<<"Zarobiles: "<<niemcy<<"ZL";
        zloto=zloto+niemcy;
        cout<<"Obecny stan zlota: "<<zloto;break;

        case 3:cout<<"Wyruszasz na wyprawe do Anglii !";
        cout<<"Wyruszasz na wyprawe do Anglii ! ";
        anglia=rand()%3+1;
        Sleep(3000); cout<<"Zarobiles: "<<anglia<<"ZL";
        zloto=zloto+anglia;
        cout<<"Obecny stan zlota: "<<zloto;


        break;

    }
}

void swicz5()
{
   srand(time(0));

    int wybor[6],a,obstawianie[3],b;
    cout<<"           WITAMY W KASYNIE  !\n\n\n";
    cout<<"W co chcialby Pan zagrac:\n 1.Rzut moneta\n 2.Kubki \n 3.Zgadnij podana liczbe\n";
    cin>>wybor[0];
    switch(wybor[0])
    {
case 1:
            cout<<"Rzut Moneta: ";
            cout<<"Twoje obecne zloto: "<<zloto;
            cout<<"Ile obstawiasz ?"<<endl;
            cin>>obstawianie[0];
    zloto=zloto-obstawianie[0];
            cout<<"Co chcesz obstawic 1.Orzel 2.Reszka";
            cin>>wybor[1];
    a=rand()%2+1;
        if(a==1)
        {
            cout<<"ORZEL"<<endl;

        }
        if(a==2)
        {
            cout<<"Reszka"<<endl;

        }

        if(a==1&&wybor[1]==1)
        {
            cout<<"Wygrales";
            zloto=zloto+obstawianie[0]*2;


        }
        else {cout<<"NIE TYM RAZEM !";




        }
          break;
    case 2:cout<<"Gra w kubki: ";
cout<<"Ile zlota obstawiasz";
cin>>obstawianie[1];
zloto=zloto-obstawianie[1];
b=rand()%3+1;
cout<<"Ktory kubek wybierasz ? 1.Niebieski 2.Czerwony 3.Pomaranczowy";
cin>>wybor[2];
if(wybor[2]==1)
{
    cout<<"WYBRALES NIEBIESKI !";


if(wybor[2]==2)
    cout<<"WYBRALES CZERWONY !";

if(wybor[3]==3)
    cout<<"WYBRALES POMARANCZOWY !";
}

if(wybor[2]==1&&b==1)
{
    cout<<"Tak to byl kubek niebieski wygrales"<<endl;
if(wybor[2]==2&&b==2)
    cout<<"Tak to byl kubek czerwony wygrales"<<endl;

if(wybor[2]==3&&b==3)
    cout<<"Tak to byl kubek pomarańczowy wygrales"<<endl;


    zloto=zloto+obstawianie[1]*3;

}
else{cout<<"PRZEGRALES STRACILES OBSTAWIONE ZLOTO !";}
break;
 case 3:cout<<"Podaj liczbe od 1 do 5 I spraw zeby twoja stawka wzrosla 4 razy ! masz trzy próby"<<endl;
 cout<<"O ILE GRASZ: ";
 int stawka;
 int z;
 cin>>stawka;
 int los;
  int PROBY=0;
  z=200;
for(int i=0;i<z;i++)
{
     cin>>obstawianie[2];

     los=rand()%5+1;
     PROBY=PROBY+1;
     cout<<"LICZBA PROB: "<<PROBY;

    if(obstawianie[2]==los)
    {
        cout<<"GRATULUJE WYGRALES !";
        zloto=zloto+stawka*4;
        z=z-1000;
    }

     if(PROBY==3)
     {
         cout<<"PRZEGRALES OBSTAWIONA STAWKE ! "<<endl;
         zloto=zloto-stawka*2;
         cout<<"ZOSTALO CI: "<<zloto<<"ZLOTA !";
         z=z-1000;

     }
}
break;


    }


     cout<<"Twoje zloto po grze w kasynie :";
    cout<<zloto;

}

void swicz6()
{
    int ile;
    cout<<"Witamy w pracy: ";
    cout<<"Ile godzin chcialbys pracowac ? "<<endl;
    cin>>ile;
    switch(ile)
    {
        case 1:cout<<"Pracujesz przez godzine ...";
        Sleep(10000);
        zloto=zloto+35; break;
        case 2:cout<< "Pracujesz przez dwie godziny ...";
        Sleep(20000);
        zloto=zloto+35*2; break;

    }


    cout<<"Twoje zloto po pracy wynosi : "<<zloto;
}
void swicz7()
{
    int staty,wyborstaty;


     staty=poziom-z;
     cout<<"Punkty do rozdania: "<<staty-1<<endl;

     cout<<"Ile chcesz dodac w dana statystyke ?";
     cin>>x;


    cout<<"Rozdaj statystyki: \n 1.Atak\n2.Obrona\n3.Szybkosc " ;
    cin>>wyborstaty;
    switch(wyborstaty)
    {


        case 1:staty=staty-1-x;
        z=z+x;
            if(staty>=0)
        {
            atak=atak+x;
            cout<<"Pomyslnie dodales: "<<x<<"Punktow do ataku ";
        } break;
        case 2:staty=staty-1;
        z=z+x;
         if(staty>=0)
        {
            obrona=obrona+x;
            cout<<"Pomyslnie dodales: "<<x<<"Punktow do obrony ";
        } break;
        case 3:staty=staty-1;
        z=z+x;
        if(staty>=0)
        {
            szybkosc=szybkosc+x;
            cout<<"Pomyslnie dodales: "<<x<<"Punktow do szybkosci ";
        } break;


    }
}
void swicz8()
{
    int zapis;
    cout<<"Zapisz gre: ";
    cin>>zapis;
    if(zapis==1)
    {
        plik.open("zapis.txt",ios::out);

plik<<zloto<<endl;
plik<<poziom<<endl;
    }
}
void swicz9()
{
    {
    int boss[3],walkaboss[5];
    cout<<"Wybierz bossa z ktorym chcialbys sie zmierzyc: "<<endl;
    cout<<"1.Szczur\nKibol\nMag";

    cin>>boss[0];
    cout<<moc;
    switch (boss[0])
    {
        case 1:boss[1]=25;
        if(moc<=boss[1]&&moc>=14)
        {
            walkaboss[0]=rand()%10+1;
            if(walkaboss[0]>=6)
            {
                cout<<"GRATULACJE !\n Wygrales z bossem pierwszym (szczur)\n W nagrode otrzymujesz: \n100Zlota i awansujesz 5 poziomów !";
                zloto=zloto+100;
                poziom=poziom+10;

            }
            if(walkaboss[0]<6)
            {
                cout<<"Przegrales z Bossem piewrwszym (szczur)\n Tracisz 75 zlota i 4 poziomy";
            }

        }
        if(moc>boss[1])
        {
            walkaboss[1]=rand()%20+1;

            if(walkaboss[1]>=6)
            {
                cout<<"GRATULACJE !\n Wygrales z bossem pierwszym (szczur)\n W nagrode otrzymujesz: \n100Zlota i awansujesz 5 poziomów !";
                zloto=zloto+100;
                poziom=poziom+10;

            }
            if(walkaboss[1]<6)
            {
                cout<<"Przegrales z Bossem piewrwszym (szczur)\n Tracisz 75 zlota i 4 poziomy";
                zloto=zloto-75; poziom=poziom-4;
            }


            }
            if(moc<boss[1]&&moc<14)
            {
                cout<<"Przegrales z Bossem piewrwszym (szczur)\n Tracisz 75 zlota i 4 poziomy";
            zloto=zloto-75; poziom=poziom-4;}
            }





    }

}




void swicz10()
{
    int wyjscie;
    cout<<"Czy chcesz wyjsc z programu ?";
    cin>>wyjscie;
    if(wyjscie==1)
    {
        exit(0);
    }




}

Proszę o to cały kod po wczytaniu nie zamykam nigdzie pliku i raczej nie o to chodzi.
Ciężko troche ogarnąć ten kod, nie jest to zbyt dobrze napisane:(

1 użytkowników online, w tym zalogowanych: 0, gości: 1