Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Tablice string

Ostatnio zmodyfikowano 2016-11-14 10:35
Autor Wiadomość
sobol3k
Temat założony przez niniejszego użytkownika
Tablice string
» 2016-11-12 11:54:35
Tworze własną gre, i zauważyłem że bawiąc sie tylko w zmienne za duży śmietnik sobie zrobie. Wszystko niby się kompiluje ale program i tak się wysypuje wiem że to przez tablice ale nie wiem w czym siedzi problem..

C/C++
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <fstream>
#include <string>

using namespace std;

char wybierz;
int wojownik_hp = 75, olbrzym_hp = 120;
string wybierz_klase, nick_gracza, spacja = " ";

string pobierz_zapisz_nick( string nick_gracza )
{
    fstream plik;
    plik.open( "gracze.txt", ios::out | ios::app );
   
    if( plik.good() == true )
    {
        plik << nick_gracza;
        plik << spacja;
        plik << wybierz_klase << endl;
    }
    else
    {
        cout << "Error, Blad pliku!";
        exit( 0 );
    }
   
    plik.close();
   
    return nick_gracza;
}

void pokaz_menu()
{
    cout << "1. Nowa gra \n";
    cout << "2. Lista graczy \n";
    cout << "3. Wyjdz \n\n";
    cout << "Wybierz co chcesz zrobic: ";
    wybierz = getch();
    cout << endl;
   
    while( wybierz != '1' && wybierz != '2' && wybierz != '3' )
    {
        cout << "Nie ma takiego wyboru! Spruboj ponownie: ";
        cin >> wybierz;
    }
}

void wybor_klasy()
{
    cout << "Wojownik - ";
    cout << "Posiada mala ilosc HP, ale za to jest szybki i zadaje duzo obrazen" << endl;
    cout << "Olbrzym - ";
    cout << "Bardzo wytrzymaly, duza ilosc HP oraz moze atakowac beltem" << endl << endl;
    cout << "Wpisz nazwe klasy: ";
    cin >> wybierz_klase;
}

int main()
{
    string odpowiedz[ 1 ];
    odpowiedz[ 0 ] = "TAK";
    odpowiedz[ 1 ] = "NIE";
   
    // mozliwosc uzywania kolorow
    HANDLE hOut;
    hOut = GetStdHandle( STD_OUTPUT_HANDLE );
   
    // nazwa gry + wersja kolorem blekitnym
    SetConsoleTextAttribute( hOut, 3 );
    cout << "Mieczem i Ogniem version 1.0" << endl << endl;
    // reszta tekstu w kolorze szarym
    SetConsoleTextAttribute( hOut, 8 );
   
    // wyswietla menu
    pokaz_menu();
   
    // jesli wyborem bedzie 1 zacznij gre
    if( wybierz == '1' )
    {
        // czysc ekran
        system( "cls" );
       
        cout << "Do wyboru masz dwie klasy wraz z opisem podane nizej.";
        cout << endl;
        cout << endl;
       
        // wybor klasy + sprawdzanie poprawnosci wpisanej nazwy klasy
        wybor_klasy();
       
        // sprawdza czy klasa postaci jest poprawna
        while( wybierz_klase != "Wojownik" && wybierz_klase != "wojownik" && wybierz_klase != "Olbrzym" && wybierz_klase != "olbrzym" )
        {
            cout << "Podales niepoprawna nazwe klasy! Spruboj ponownie: ";
            cin >> wybierz_klase;
        }
       
        cout << "Dobrze, teraz wypadalo by podac swoje nick: ";
        cin >> nick_gracza;
       
        // pobiera nick od gracza i zapisuje go do pliku!
        pobierz_zapisz_nick( nick_gracza );
       
        // czysci ekran
        system( "cls" );
       
        cout << "Znalazles sie w lesie jest ciemno i zimno, slyszysz tylko odglos zwierzat i polujacych swirow na ciebie." << endl;
        cout << "Jestes zdany calkowicie na siebie i tylko na siebie nie mozesz liczyc na zadna pomoc z niczyjej strony, " << endl;
        cout << "podczas drogi napotkasz sie na wiele niebezpieczenstw wszelakiego zagrozenia, " << endl;
        cout << "Twoim zadaniem jest dotrzec do celu jako zywy." << endl << endl;
        cout << "Czy jestes gotowy na to sie porwac?" << endl;
        cout << "Twoja opdowiedz (TAK/NIE): ";
        cin >> odpowiedz[ 1 ];
    }
   
    return 0;
    getch();
}
P-153601
mateczek
» 2016-11-12 12:05:35
gdy się zaczyna robić bałagan w takim liniowym programowaniu trzeba przeskoczyć lewel wyżej czyli klasy !!!

C/C++
//pierwszy błąd który rzuca się w oczy to do tablicy o rozmiarze jeden wpisujesz dwa elementy
string odpowiedz[ 1 ]; //powinno być 2
odpowiedz[ 0 ] = "TAK";
odpowiedz[ 1 ] = "NIE";
P-153602
sobol3k
Temat założony przez niniejszego użytkownika
» 2016-11-13 12:46:16
Przecież tablice sa numerowanie od zera więc rozumiałem to tak że jeśli utworze sobie załóżmy tablice int zycie[1] to moge do niej przypisać dwie wartości zycie[0] = 100 i zycie[1] = 150 ale jednak się myliłem. Dziękuje za wytłumaczenie :) Teraz mam wiekszy problem bo program wysypuje mi się kiedy pytam gracza o ruch, nwm czemu tak się dzieje pewnie w znowu coś z tablicamy..

C/C++
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <fstream>
#include <algorithm>
#include <string>

using namespace std;

char wybierz;
int level = 1;
string wybierz_klase, nick_gracza, spacja = " ", atak_mieczem, atak_beltem;

string pobierz_zapisz_nick( string nick_gracza )
{
    fstream plik;
    plik.open( "gracze.txt", ios::out | ios::app );
   
    if( plik.good() == true )
    {
        transform( wybierz_klase.begin(), wybierz_klase.end(), wybierz_klase.begin(),::toupper );
       
        plik << nick_gracza;
        plik << spacja;
        plik << wybierz_klase << endl;
    }
    else
    {
        cout << "Error, Blad pliku!";
        exit( 0 );
    }
   
    plik.close();
   
    return nick_gracza;
}

void pokaz_liste_graczy()
{
    string gracze;
    fstream wczytaj_graczy;
    wczytaj_graczy.open( "gracze.txt", ios::in );
   
    if( wczytaj_graczy.good() == false )
    {
        cout << "Nie odnaleziono pliku lub jest uszkodzony!";
        exit( 0 );
    }
    else
    {
        while( !wczytaj_graczy.eof() )
        {
            getline( wczytaj_graczy, gracze );
           
            cout << gracze << endl;
        }
    }
   
    wczytaj_graczy.close();
}

void pokaz_menu()
{
    cout << "1. Nowa gra \n";
    cout << "2. Lista graczy \n";
    cout << "3. Wyjdz \n\n";
    cout << "Wybierz co chcesz zrobic: ";
    wybierz = getch();
    cout << endl;
   
    while( wybierz != '1' && wybierz != '2' && wybierz != '3' )
    {
        cout << "Nie ma takiego wyboru! Spruboj ponownie: ";
        cin >> wybierz;
    }
}

void wybor_klasy()
{
    cout << "Wojownik - ";
    cout << "Posiada mala ilosc HP, ale za to jest szybki i zadaje duzo obrazen" << endl;
    cout << "Olbrzym - ";
    cout << "Bardzo wytrzymaly, duza ilosc HP oraz moze atakowac beltem" << endl << endl;
    cout << "Wpisz nazwe klasy: ";
    cin >> wybierz_klase;
}

int main()
{
    // pyta czy startowac gre
    string odpowiedz[ 2 ];
    odpowiedz[ 0 ] = "TAK";
    odpowiedz[ 1 ] = "NIE";
   
    // zycie klas
    int zycie[ 2 ];
    zycie[ 0 ] = 75;
    zycie[ 1 ] = 125;
   
    string ruch[ 3 ];
    ruch[ 0 ] = "forward";
    ruch[ 1 ] = "left";
    ruch[ 2 ] = "right";
   
    // mozliwosc uzywania kolorow
    HANDLE hOut;
    hOut = GetStdHandle( STD_OUTPUT_HANDLE );
   
    // nazwa gry + wersja kolorem blekitnym
    SetConsoleTextAttribute( hOut, 3 );
    cout << "Mieczem i Ogniem version 1.0" << endl << endl;
    // reszta tekstu w kolorze szarym
    SetConsoleTextAttribute( hOut, 8 );
   
    // wyswietla menu
    pokaz_menu();
   
    // jesli wyborem bedzie 1 zacznij gre
    if( wybierz == '1' )
    {
        // czysc ekran
        system( "cls" );
       
        cout << "Do wyboru masz dwie klasy wraz z opisem podane nizej.";
        cout << endl;
        cout << endl;
       
        // wybor klasy + sprawdzanie poprawnosci wpisanej nazwy klasy
        wybor_klasy();
       
        // sprawdza czy klasa postaci jest poprawna
        while( wybierz_klase != "Wojownik" && wybierz_klase != "wojownik" && wybierz_klase != "Olbrzym" && wybierz_klase != "olbrzym" )
        {
            cout << "Podales niepoprawna nazwe klasy! Spruboj ponownie: ";
            cin >> wybierz_klase;
        }
       
        cout << "Dobrze, teraz wypadalo by podac swoje nick: ";
        cin >> nick_gracza;
       
        // pobiera nick od gracza i zapisuje go do pliku!
        pobierz_zapisz_nick( nick_gracza );
       
        // czysci ekran
        system( "cls" );
       
        cout << "Znalazles sie w lesie jest ciemno i zimno, slyszysz tylko odglos zwierzat i polujacych swirow na ciebie." << endl;
        cout << "Jestes zdany calkowicie na siebie i tylko na siebie nie mozesz liczyc na zadna pomoc z niczyjej strony, " << endl;
        cout << "podczas drogi napotkasz sie na wiele niebezpieczenstw wszelakiego zagrozenia, " << endl;
        cout << "Twoim zadaniem jest dotrzec do celu jako zywy." << endl << endl;
        cout << "Czy jestes gotowy na to sie porwac?" << endl;
        cout << "Twoja opdowiedz (TAK/NIE): ";
        cin >> odpowiedz[ 2 ];
       
        // jesli gracz poda male litery to zamienia je na duze
        transform( odpowiedz[ 2 ].begin(), odpowiedz[ 2 ].end(), odpowiedz[ 2 ].begin(),::toupper );
       
        if( odpowiedz[ 2 ] == "TAK" )
        {
            cout << endl;
            cout << "Rozgrywka rozpocznie sie za: ";
           
            for( int i = 5; i > 0; i-- )
            {
                cout << i;
                cout << spacja;
                Sleep( 1500 );
            }
           
        }
        else
        {
            cout << "YYY";
        }
       
        system( "cls" );
       
        // wyswietla podstawowe dane o klasie
        if( wybierz_klase == "Wojownik" && wybierz_klase == "wojownik" )
        {
            cout << "Klasa: " << wybierz_klase << endl;
            cout << "Twoje zycie: " << zycie[ 0 ] << endl;
            cout << "Bron: Miecz, Szarza" << endl;
            cout << "Level: " << level;
        }
        else
        {
            cout << "Klasa: " << wybierz_klase << endl;
            cout << "Twoje zycie: " << zycie[ 1 ] << endl;
            cout << "Bron: Ciezkie tapniecie, atak rzygiem" << endl;
            cout << "Level: " << level << endl << endl;
        }
       
        cout << "Las, wokol wszedzie ciemno i zimno, w tle slyszysz niepokojaca cisze." << endl;
        cout << "We mgle widzisz wylaniajacy sie budynek, ktory ksztaltem przypomina jakies locha..." << endl;
        cout << "Musisz do niego dotrzec!" << endl << endl;
        cout << "Komendy ruchu (forward, left, right)";
        cout << " Idz na przod: ";
        cin >> ruch[ 3 ];
       
        if( ruch[ 3 ] == "forward" )
        {
            cout << "Dobrze przeszedles kawalek i cel widzisz juz co raz blizej, lecz oprocz celu slyszysz straznikow budynku. Musisz ich zabic!";
        }
        else
        {
            cout << endl;
            cout << "zly kierunek ruchu" << endl;
           
            while( ruch[ 3 ] != "forward" )
            {
                cout << "Idz na przod: ";
                cin >> ruch[ 3 ];
               
            }
        }
       
    }
   
    if( wybierz == '2' )
    {
        system( "cls" );
        pokaz_liste_graczy();
    }
   
    return 0;
    getch();
}

Proszę o skompilowanie i zobaczenie co się dzieje.
P-153629
carlosmay
» 2016-11-13 13:43:33
Teraz mam wiekszy problem bo program wysypuje mi się kiedy pytam gracza o ruch, nwm czemu tak się dzieje pewnie w znowu coś z tablicamy..
Błędy czasu wykonania wykrywaj debuggerem.
P-153632
sobol3k
Temat założony przez niniejszego użytkownika
» 2016-11-14 10:35:13
Niezbyt umiem używać debuggera, nawet nwm gdzie on jest w codeblocks.
P-153677
« 1 »
  Strona 1 z 1