Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

c++ Save/load gry , ignorowanie kodu


Rekomendowane odpowiedzi

Opublikowano

Witam, może od razy zacznę od pytania:

Robię prostą grę konsolową w c++ i zrobiłem tak że jak zmieni się jakaś zmienna to wszystko zapisuje się w pliku save.txt, teraz chciałbym zrobić, że gdy wyjdę z gry(konsoli) i wejdę z powrotem program wczyta zmienne z save.txt i jeśli będzie inne od wartości jaką podam w IFie to pominie wstęp gry i uruchomi od razu menu gry.

 

Kod w jaki sposób zapisałem:


    fstream plik;
    plik.open("save.txt", ios::out);

    plik<<imie<<endl;
    plik<<nazwa_jednostki<<endl;
    plik<<money<<endl;
    plik<<koszt<<endl;
    plik<<weap_lvl<<endl;
    plik<<pojazdy<<endl;
    plik.close();
    getchar();getchar();
    system("cls");

Tutaj ucięty kod ale pokażę odkąd chce "ignorować" jeśli wczyta save

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
#include <cstdio>
#include <fstream>
#include <string>

using namespace std;

 string imie;
 string nazwa_jednostki;
 char wybor4;
 char wybor3;
 char wybor2;
 char wybor;
 float money=2000;
 float koszt=3000;
 float koszt2=10000;
 string postac1="Brock";
 string postac2="Gustav";
 string postac3="Nikolai";
 string postac4="Martin";
 string postac5="Jack";
 string postac6="Saszan";
 int team_size=3;
 int weap_lvl=1;
 int pojazdy=0;

//tu są różne voidy 


int main()
{

//zaczyna sie wstep

    cout << "Witaj w grze Your Own Special Forces! (pre-alpha 1.1)" << endl;
    Sleep(4800);
    system("cls");
    cout << "W tej grze wcielisz sie dowodce wlasnej jednostki specjalnej";
    Sleep(5200);
    system("cls");
    cout << "Podaj swoje imie lub pseudonim: "<<endl;
    cin>>imie;
    cout << "Podaj nazwe swojej jednostki (Zamiast spacji uzyj podlogi " "_"  " ): "<<endl;
    cin>>nazwa_jednostki;
    cout << "Witaj " << imie << "! " << "Twoja jednostka od teraz bedzie sluzyc kraju pod nazwa: " << nazwa_jednostki << "! Czas rozprawic sie z terrorystami zagrazajacymi naszemu panstwu!";
    Sleep(8750);
    system("cls");
    cout<< "Na poczatek otrzymujesz :  "<<money<<"$"<<endl;
    cout<< "Z czasem za kolejne udane misje otrzymasz wiecej pieniedzy na bron lub rekrutacje nowych czlonkow";
    Sleep(7300);
    system("cls");


//tutaj konczy sie wstep i zaczyna menu i tu bym chcial zaczac po wczytaniu save'a

        for (;
    {
    cout <<"MENU GLOWNE"<<endl;
    cout<<"----------------------------------"<<endl;
    cout<<"1. Stan Konta i ogolne infromacje"<<endl;
    cout<<"2. Twoja druzyna"<<endl;
    cout<<"3. Misje"<<endl;
    cout<<"4. Sklep"<<endl;
    cout<<"5. Koszary"<<endl;
    cout<<"6. Exit"<<endl;
    cout<<"----------------------------------"<<endl;

    cout<< endl; 
Opublikowano

Ja bym to zrobił w ten sposób, że na wstępie dałbym parę linijek kodu, które sprawdzałyby, czy plik "save.txt" istnieje i jeżeli plik istnieje to kontynuuj od końca wstępu, a jeżeli nie istnieję to zacznij od początku wstępu. Mniej więcej tak:

ifstream save;
plik.open("save.txt");
if (save)
{
//jeśli plik istnieje
}
if(!save) //lub po prostu else
{
//jeśli go nie ma
}

2cf6pe0.jpg


"Hmm jak by to powiedzieć... Moje pierwsze wrażenie o grupie... Nie lubię was..." - Kakashi


Opublikowano

Dzięki! Pomocne, ale teraz pozostała kwestia jak wczytac te zmienne z pliku? Chce że jeżeli bylo:

String imię;

Cin>>imie;

 

To chce żeby program wiedział już jak mam na imię po ponownym uruchomieniu(jest w kodzie dokładniej jak to wyglada), to się tyczy innych zmiennych, jest ich bodajże 7-9 sa to inty, stringi i floaty.

Opublikowano

Człowieku to jak Ty się zabierasz za stworzenie gry w C++ skoro nie potrafisz zrozumieć tego poradnika, który jak sama nazwa mówi ma Ci pomóc, nauczyć Cię jak to zrobić. Zacznij może od pierwszego jego poradnika i oglądaj je tak, aż dotrzesz do tego o plikach.txt.

2cf6pe0.jpg


"Hmm jak by to powiedzieć... Moje pierwsze wrażenie o grupie... Nie lubię was..." - Kakashi


Opublikowano

Spokojnie :P może nie tyle co nie rozumiem tylko nie wiem jak się za to zabrać bo próbowałem wielu możliwości, aż wpadłem na pomysł funkcji:

void zapis_odczyt()
{
    fstream plik;

    cout<<"1. Zapisz gre"<<endl;
    cout<<"2. Wczytaj gre"<<endl;

     wybor5=getch();

     switch(wybor5)
     {

    case '1':
    plik.open("save.txt", ios::out);
    plik<<imie<<endl;
    plik<<nazwa_jednostki<<endl;
    plik<<money<<endl;
    plik<<koszt<<endl;
    plik<<koszt2<<endl;
    plik<<koszt3<<endl;
    plik<<weap_lvl<<endl;
    plik<<pojazdy<<endl;
    plik<<lvl_tech<<endl;
    cout<<"Pomyslnie zapisano gre"<<endl;
    break;

    case '2':
    plik.open("save.txt", ios::in);
    plik<<imie<<endl;
    plik<<nazwa_jednostki<<endl;
    plik<<money<<endl;
    plik<<koszt<<endl;
    plik<<koszt2<<endl;
    plik<<koszt3<<endl;
    plik<<weap_lvl<<endl;
    plik<<pojazdy<<endl;
    plik<<lvl_tech<<endl;
    cout<<"Pomyslnie wczytano gre"<<endl;
    break;

    default:
        cout<<"Nie ma takiej opcji";
     }
}

Zapis działa bez problemu ale z odczytem jest już gorzej bo gdy go wybiorę to po prostu nic się nie dzieje

 

@Edit

wiem, w odczycie powinno być ios::in poprawiłem ale mimo to dalej nie działa

Opublikowano

Operator << jest stosowany do wypisywania czegoś np. do pliku lub do konsoli(jeśli chodzi o strumienie). Jak chcesz coś wczytywać to używaj >>. No i nie wczytuje się endl bo wczytywanie automatycznie pomija białe znaki(spacje, tabulacje, znaki nowej linii. Przykład:

plik >> imie;

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...