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

C++ - problem z błędem Id returned 1 exit status

Ostatnio zmodyfikowano 2017-06-10 17:12
Autor Wiadomość
marcin0837
Temat założony przez niniejszego użytkownika
C++ - problem z błędem Id returned 1 exit status
» 2017-06-10 17:12:29
Siemka, mam problem z zadankiem z C++, mianowicie saperem. Chcę podzielić program na moduły, problem w tym, że wywala błąd Id returned 1 exit status.

main.cpp

C/C++
#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>
#include <time.h>
#include <conio.h>
#include "Part1.hpp"



using namespace std;

int zaznaczenie2, zaznaczenie1, ile;
int koniec = 0;
int DEAD = 0;
int flagi = 0;

void pole_najechane( char ** tablica_, char ** tab, int i, int j, int enter, int dlugosc, int szerokosc );
void czekaj( int sekunda );
struct zapis {
    string imie;
    string wynik;
    int dlugosc;
    int szerokosc;
    int czas;
    int poczatek;
    int koniec;
    int bomba;
    int klik;
};
zapis baza[ 30 ];
zapis gra();

void bialy_tlo()
{ SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE ); }
void czerwony_tlo()
{ SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), BACKGROUND_INTENSITY | BACKGROUND_RED ); }
void niebieski_tlo()
{ SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_BLUE | FOREGROUND_INTENSITY ); }
void czarny_tlo()
{ SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE ); }
void tlo_spacji() { printf( " " ); czarny_tlo(); }



void aktualne_pole( char ** tab_pust, char ** tab, int i, int j, int enter, int dlugosc, int szerokosc )
{
   
    if( zaznaczenie2 == j && zaznaczenie1 == i && enter == 0 ) {
        czerwony_tlo();
        cout << tab_pust[ i ][ j ];
        czarny_tlo();
    }
    else if( zaznaczenie2 == j && zaznaczenie1 == i && enter == 1 && tab_pust[ i ][ j ] != 'F' ) {
        niebieski_tlo();
        tab_pust[ i ][ j ] = tab[ i ][ j ];
        if( tab_pust[ i ][ j ] == puste_pole ) { odkrywanie_pol( tab_pust, tab, i, j, dlugosc, szerokosc ); }
        if( tab_pust[ i ][ j ] == '*' ) { koniec = 1; }
        cout << tab_pust[ i ][ j ];
        czarny_tlo();
    }
    else if( zaznaczenie2 == j && zaznaczenie1 == i && enter == 2 &&( tab_pust[ i ][ j ] == ' ' || tab_pust[ i ][ j ] == 'F' ) ) {
        niebieski_tlo();
        if( tab_pust[ i ][ j ] != 'F' ) tab_pust[ i ][ j ] = 'F';
        else if( tab_pust[ i ][ j ] == 'F' ) tab_pust[ i ][ j ] = ' ';
       
        cout << tab_pust[ i ][ j ];
        czarny_tlo();
    }
    else if( tab_pust[ i ][ j ] != ' ' ) { cout << tab_pust[ i ][ j ]; czarny_tlo(); }
    else {
        bialy_tlo();
        cout << tab_pust[ i ][ j ];
        czarny_tlo();
    }
}

void pole( char ** tab_pust, char ** tab, int i, int j, int dlugosc, int szerokosc, int enter )
{
    if( j == 0 ) { printf( "*" ); tlo_spacji();
        aktualne_pole( tab_pust, tab, i, j, enter, dlugosc, szerokosc ); }
    else if(( j < szerokosc - 1 ) &&( j != 0 ) ) { tlo_spacji();
        aktualne_pole( tab_pust, tab, i, j, enter, dlugosc, szerokosc ); }
    else if( j == szerokosc - 1 ) { tlo_spacji();
        aktualne_pole( tab_pust, tab, i, j, enter, dlugosc, szerokosc );
        tlo_spacji(); printf( "*\n" ); }
}

void tablica_gry( char ** tab_pust, char ** tab, int wiersze, int kolumny, int enter )
{ //rysowanie pola gry;
    system( "CLS" );
   
    for( int j = 0; j <( kolumny + 1 ); j++ ) //petla rysujaca kreski na poczatku
    {
        if( j == 0 ) { cout << "*"; }
        if( j < kolumny ) { cout << "*"; }
        else if( j = kolumny ) { cout << "*\n"; }
    }
   
    for( int i = 0; i < wiersze; i++ ) {
       
        for( int j = 0; j < kolumny; j++ ) //petla wstawiajaca zawartosc tabeli
        {
            pole( tab_pust, tab, i, j, wiersze, kolumny, enter );
        }
        for( int j = 0; j <( kolumny ); j++ ) //petla rysujaca kreski na poczatku
        {
            if( i ==( wiersze - 1 ) ) break;
           
            if( j == 0 ) { printf( "*" ); tlo_spacji(); tlo_spacji(); }
            else if( j < kolumny - 1 ) { tlo_spacji(); tlo_spacji(); }
            else if( j == kolumny - 1 ) { tlo_spacji(); tlo_spacji(); tlo_spacji(); printf( "*\n" ); }
        }
       
    }
    for( int j = 0; j <( kolumny + 1 ); j++ ) //petla rysujaca kreski na koncu
    {
        if( j == 0 ) { cout << "*"; }
        if( j < kolumny ) { cout << "*"; }
        else if( j == kolumny ) { cout << "*\n"; }
    }
}

char ** gen_tab( int wiersze, int kolumny ) // funckja generowanie tablicy
{
    char ** wsk = new char *[ wiersze ];
    for( int i = 0; i < wiersze; i++ )
         wsk[ i ] = new char[ kolumny ];
   
    return wsk;
}

void bomby( char ** tab, int lw, int lk, int bomba ) //wsadzanie losowych bomb
{
    int a, b;
    srand( time( 0 ) );
    for( int k = 0; k < bomba; k++ ) {
       
        start:
        a = rand() %( lw ); //zakres wierszy
        b = rand() %( lk ); //zakres kolumn
        if( tab[ a ][ b ] != '*' ) tab[ a ][ b ] = '*';
        else if( tab[ a ][ b ] == '*' ) goto start;
       
    }
   
   
}

void numeracja( char ** tab, int lw, int lk ) //wypelnianie tablicy dynamicznej numerami przylegajacych bomb
{
   
    for( int i = 0; i < lw; i++ )
    {
        for( int j = 0; j < lk; j++ )
        {
            if( tab[ i ][ j ] == '*' ) tab[ i ][ j ] = '*';
            else if( tab[ i ][ j ] != '*' )
            {
                int n;
                n = 48;
                if(( i != 0 ) &&( j != 0 ) &&( i != lw ) &&( j != lk ) &&( tab[ i - 1 ][ j - 1 ] == '*' ) ) n++;
               
                if(( i != 0 ) &&( j != 0 ) &&( i != lw ) &&( j != lk ) &&( tab[ i - 1 ][ j ] == '*' ) ) n++;
               
                if(( i != 0 ) &&( j != 0 ) &&( i != lw ) &&( j != lk - 1 ) &&( tab[ i - 1 ][ j + 1 ] == '*' ) ) n++;
               
                if(( i != 0 ) &&( j != 0 ) &&( i != lw ) &&( j != lk ) &&( tab[ i ][ j - 1 ] == '*' ) ) n++;
               
                if(( i != 0 ) &&( j != 0 ) &&( i != lw ) &&( j != lk - 1 ) &&( tab[ i ][ j + 1 ] == '*' ) ) n++;
               
                if(( i != 0 ) &&( j != 0 ) &&( i != lw - 1 ) &&( j != lk ) &&( tab[ i + 1 ][ j - 1 ] == '*' ) ) n++;
               
                if(( i != 0 ) &&( j != 0 ) &&( i != lw - 1 ) &&( j != lk ) &&( tab[ i + 1 ][ j ] == '*' ) ) n++;
               
                if(( i != 0 ) &&( j != 0 ) &&( i != lw - 1 ) &&( j != lk - 1 ) &&( tab[ i + 1 ][ j + 1 ] == '*' ) ) n++;
               
                if( j == 0 ) {
                    if(( i != 0 ) &&( i != lw - 1 ) &&( j != lk ) &&( tab[ i - 1 ][ j ] == '*' ) ) n++;
                   
                    if(( i != 0 ) &&( i != lw ) &&( j != lk - 1 ) &&( tab[ i - 1 ][ j + 1 ] == '*' ) ) n++;
                   
                    if(( i != 0 ) &&( i != lw ) &&( j != lk - 1 ) &&( tab[ i ][ j + 1 ] == '*' ) ) n++;
                   
                    if(( i != 0 ) &&( i != lw - 1 ) &&( j != lk ) &&( tab[ i + 1 ][ j ] == '*' ) ) n++;
                   
                    if(( i != 0 ) &&( i != lw - 1 ) &&( j != lk - 1 ) &&( tab[ i + 1 ][ j + 1 ] == '*' ) ) n++;
                   
                }
               
                if( i == 0 ) {
                    if(( j != 0 ) &&( i != lw ) &&( j != lk ) &&( tab[ i ][ j - 1 ] == '*' ) ) n++;
                   
                    if(( j != 0 ) &&( i != lw ) &&( j != lk - 1 ) &&( tab[ i ][ j + 1 ] == '*' ) ) n++;
                   
                    if(( j != 0 ) &&( i != lw - 1 ) &&( j != lk ) &&( tab[ i + 1 ][ j - 1 ] == '*' ) ) n++;
                   
                    if(( j != 0 ) &&( i != lw - 1 ) &&( j != lk ) &&( tab[ i + 1 ][ j ] == '*' ) ) n++;
                   
                    if(( j != 0 ) &&( i != lw - 1 ) &&( j != lk - 1 ) &&( tab[ i + 1 ][ j + 1 ] == '*' ) ) n++;
                   
                }
                if(( i == 0 ) &&( j == 0 ) ) {
                    if(( i != lw ) &&( j != lk - 1 ) &&( tab[ i ][ j + 1 ] == '*' ) ) n++;
                   
                    if(( i != lw - 1 ) &&( j != lk ) &&( tab[ i + 1 ][ j ] == '*' ) ) n++;
                   
                    if(( i != lw - 1 ) &&( j != lk - 1 ) &&( tab[ i + 1 ][ j + 1 ] == '*' ) ) n++;
                   
                }
               
               
                if( n > 48 ) tab[ i ][ j ] = n;
               
            }
        }
    }
   
}


void zaznaczenie( int i, int j ) //narazie cos
{
    zaznaczenie1 = i;
    zaznaczenie2 = j;
}


void spacje( char ** tab, int lw, int lk ) //wypelnianie tablicy dynamicznej spacjami
{
    for( int i = 0; i < lw; i++ )
    for( int j = 0; j < lk; j++ )
         tab[ i ][ j ] = ' ';
   
}
void spacje_2( char ** tab, int lw, int lk ) //wypelnianie tablicy dynamicznej spacjami
{
    for( int i = 0; i < lw; i++ )
    for( int j = 0; j < lk; j++ )
         tab[ i ][ j ] = 176;
   
}


void flaga( char ** tab, int lw, int lk ) //sprawdzenie ile flag
{
    for( int i = 0; i < lw; i++ )
    for( int j = 0; j < lk; j++ )
         if( tab[ i ][ j ] == 'F' ) flagi++;
   
}
void wygrana( char ** tab, int lw, int lk, int bomba ) //sprawdzenie wygranej
{
    int win = 0;
    int won = 0;
    for( int i = 0; i < lw; i++ ) {
        for( int j = 0; j < lk; j++ ) { if( tab[ i ][ j ] == ' ' || tab[ i ][ j ] == 'F' ) { win++; } } }
    if( win == bomba ) koniec = 2;
   
}

void dane( zapis * m, int ile ) {
    for( int i = 0; i < ile; i++ )
    {
        cout << "\n";
        cout << "Wynik Gry: " << m[ i ].wynik << "\nImie gracza: " << m[ i ].imie << "\nLiczba wierszy: " << m[ i ].dlugosc << "\nLiczba kolumn: "
        << m[ i ].szerokosc << "\nLiczba bomb: " << m[ i ].bomba << "\nLiczba ruchow: " << m[ i ].klik << "\n";
       
    } }



void zapisz_wynik( int ile )
{
   
    fstream plik; //zapis fstream;
    plik.open( "save.txt", ios::out );
    for( int i = 0; i < ile; i++ )
    {
        plik << baza[ i ].wynik << " " << baza[ i ].imie << " " << baza[ i ].dlugosc << " " << baza[ i ].szerokosc << " " << baza[ i ].bomba << " " << baza[ i ].klik;
        if( i < ile - 1 ) plik << "\n";
       
       
    }
    plik.close();
   
}

void dopisz_wynik( zapis baza )
{
   
    fstream plik; //zapis fstream;
    plik.open( "save.txt", ios::app );
    plik << "Wynik Gry: " << baza.wynik << " | Imie gracza: " << baza.imie << " | Liczba wierszy: " << baza.dlugosc << " | Liczba kolumn: " << baza.szerokosc
    << " | Liczba bomb: " << baza.bomba << " | Liczba ruchow: " << baza.klik << "\n";
    plik.close();
   
}



void wczytaj_wynik() {
   
   
    cout << system( "dir *.txt /b" );
    string nazwa_pliku;
    nazwa_pliku = "save.txt";
   
   
    fstream plik; //wczytywanie fstream
    plik.open( nazwa_pliku.c_str(), ios::in );
   
    while( plik ) {
       
        plik >> baza[ ile ].wynik >> baza[ ile ].imie >> baza[ ile ].dlugosc >> baza[ ile ].szerokosc >> baza[ ile ].bomba >> baza[ ile ].klik;
        ile++;
       
    }
    plik.close(); //zamykamy plik
    ile--;
}

int menu()
{
    wczytaj_wynik();
    int n = 1, z;
    while( 1 )
    {
        system( "cls" );
        czarny_tlo();
       
        fflush( stdin );
       
        printf( "\t\tSAPER\n\n" );
        if( n == 1 ) { bialy_tlo(); } printf( "Nowa Gra\n" ); czarny_tlo();
        if( n == 2 ) { bialy_tlo(); } printf( "Historia wynikow\n" ); czarny_tlo();
        if( n == 3 ) { bialy_tlo(); } printf( "Koniec Gry\n" ); czarny_tlo();
        z = getch();
        zapisz_wynik( ile );
        //        GÓRNA STRZAŁKA
        if( z == 72 ) { if( n > 1 ) { n--; } else n = 3; } //ograniczenie z góry
       
        //        DOLNA STRZAŁKA
        if( z == 80 ) { if( n < 3 ) { n++; } else n = 1; } //ograniczenie z dołu
        if( z == 13 ) { if( n == 1 ) { system( "CLS" ); baza[ ile - 1 ] = gra(); }
            if( n == 2 ) { system( "CLS" ); dane( baza, ile ); system( "PAUSE" ); }
            if( n == 3 ) { DEAD = 1; return DEAD; }
        }
    }
}
void czekaj( int sekunda )
{ clock_t a; a = clock() + sekunda * CLOCKS_PER_SEC;
    while( clock() < a ) { } }


zapis gra()
{
    zapis nowy;
   
    char ** tabela; int roznica, enter; // wymiary
    char ** tabela_pusta; // tabela nakladana
    int z = 0;
    int i = 0;
    int j = 0;
    cout << "\t\tINSTRUKCJA\n\n" << "Poruszanie sie po tablicy: \tSTRZALKI\n" << "Zaznaczenie pola: \t\tENTER\n" << "Zablokowanie Pola: \t\tSPACJA\n";
    cout << "________________________________________________________________________________";
    cout << "\n\tPodaj Swoje Imie :"; cin >> nowy.imie;
    cout << "\n\n\tPodaj liczbe kolumn planszy: "; cin >> nowy.szerokosc;
    cout << "\tPodaj liczbe wierszy planszy: "; cin >> nowy.dlugosc;
    raz:
    cout << "\tPodaj liczbe bomb na planszy: "; cin >> nowy.bomba;
    if( nowy.bomba >( nowy.dlugosc * nowy.szerokosc ) ) { cout << "Podales za duza ilosc bomb. Wpisz ponownie ... \n"; goto raz; }
    tabela = gen_tab( nowy.dlugosc, nowy.szerokosc ); //przypisanie wygenerowanej tabeli
    tabela_pusta = gen_tab( nowy.dlugosc, nowy.szerokosc ); //przypisanie wygenerowanej pustej tabeli
    spacje( tabela_pusta, nowy.dlugosc, nowy.szerokosc ); //puste elementy pustej tablicy
    spacje_2( tabela, nowy.dlugosc, nowy.szerokosc ); //znaki pelnej tablicy
   
    bomby( tabela, nowy.dlugosc, nowy.szerokosc, nowy.bomba ); // losowanie bomb
    numeracja( tabela, nowy.dlugosc, nowy.szerokosc ); //numerowanie bomb do okola
    tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter );
    nowy.poczatek = time( NULL );
    nowy.klik = 0;
    while( 1 ) // sterowanie strzalkami po planszy, funkcja odznaczania i blokowania
    {
        enter = 0;
        z = getch();
       
        if(( z == 75 ) &&( j > 0 ) ) { nowy.klik++; i; j--; zaznaczenie( i, j ); //lewo
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
        else if(( z == 75 ) &&( j == 0 ) ) { nowy.klik++; j = nowy.szerokosc; i; j--; zaznaczenie( i, j );
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
       
        if(( z == 77 ) &&( j <( nowy.szerokosc - 1 ) ) ) { nowy.klik++; i; j++; zaznaczenie( i, j ); //prawo
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
        else if(( z == 77 ) &&( j ==( nowy.szerokosc - 1 ) ) ) { nowy.klik++; j = 0; i; zaznaczenie( i, j );
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
       
        if(( z == 72 ) &&( i > 0 ) ) { nowy.klik++; i--; j; zaznaczenie( i, j ); //gora
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
        else if(( z == 72 ) &&( i == 0 ) ) { nowy.klik++; i = nowy.dlugosc; i--; j; zaznaczenie( i, j );
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
       
        if(( z == 80 ) &&( i <( nowy.dlugosc - 1 ) ) ) { nowy.klik++; i++; j; zaznaczenie( i, j ); //dol
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
        else if(( z == 80 ) &&( i ==( nowy.dlugosc - 1 ) ) ) { nowy.klik++; i = 0; j; zaznaczenie( i, j );
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
        if( z == 13 ) { enter = 1; zaznaczenie( i, j );
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
        if( z == 32 ) { enter = 2; zaznaczenie( i, j );
            tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); }
       
        nowy.koniec = time( NULL );
       
        flaga( tabela_pusta, nowy.dlugosc, nowy.szerokosc );
        wygrana( tabela_pusta, nowy.dlugosc, nowy.szerokosc, nowy.bomba );
        cout << "\n\tRuchow: " << nowy.klik;
        roznica = nowy.bomba - flagi; cout << "\n\tBomby: " << roznica; flagi = 0;
        if( koniec == 1 ) {
            nowy.wynik = "Przegrana";
            nowy.koniec = time( NULL );
            koniec = 0;
            cout << "\n\n\t\tPrzegrales! Moze nastepnym razem sie uda.";
            czekaj( 3 ); ile++;
            dopisz_wynik( nowy ); break; }
        if( koniec == 2 ) {
            nowy.wynik = "Wygrana";
            nowy.koniec = time( NULL );
            koniec = 0;
            cout << "\n\n\t\tWygrales! Gratulacje!";
            czekaj( 3 ); ile++;
            dopisz_wynik( nowy ); break; }
    }
    return nowy;
}


int main()
{
    for( int i = 0; i < i + 1; i++ ) { menu(); if( DEAD == 1 ) { break; } }
    system( "PAUSE" );
}

[ \c pp ]

Part1.hpp

[ cpp ]
#ifndef Part1_hpp
#define Part1_hpp
#include <iostream>

using namespace std;

char puste_pole = 176;

void odkrywanie_pol( char ** tablica, char ** plansza, int i, int j, int dlugosc, int szerokosc );






#endif

[ \c pp ]

Part1.cpp







[ cpp ]

#include "Part1.hpp"

void odkrywanie_pol( char ** tab_pust, char ** tab, int i, int j, int dlugosc, int szerokosc )
{
    tab_pust[ i ][ j ] = tab[ i ][ j ];
   
    if( tab[ i ][ j ] == puste_pole ) {
        int lewo = j - 1;
        int prawo = j + 1;
        int gora = i - 1;
        int dol = i + 1;
       
        if( gora >= 0 ) {
            if( tab_pust[ gora ][ j ] == ' ' ) odkrywanie_pol( tab_pust, tab, gora, j, dlugosc, szerokosc ); //gora
           
        }
        if( dol < dlugosc ) {
            if( tab_pust[ dol ][ j ] == ' ' ) odkrywanie_pol( tab_pust, tab, dol, j, dlugosc, szerokosc ); // dol
           
        }
        if( lewo >= 0 ) {
            if( tab_pust[ i ][ lewo ] == ' ' ) odkrywanie_pol( tab_pust, tab, i, lewo, dlugosc, szerokosc ); // lewo
           
        }
        if( prawo < szerokosc ) {
            if( tab_pust[ i ][ prawo ] == ' ' ) odkrywanie_pol( tab_pust, tab, i, prawo, dlugosc, szerokosc ); // prawo
           
        }
        if( gora >= 0 && lewo >= 0 ) {
            if( tab_pust[ gora ][ lewo ] == ' ' ) odkrywanie_pol( tab_pust, tab, gora, lewo, dlugosc, szerokosc ); // górny lewy róg
           
        }
        if( gora >= 0 && prawo < szerokosc ) {
            if( tab_pust[ gora ][ prawo ] == ' ' ) odkrywanie_pol( tab_pust, tab, gora, prawo, dlugosc, szerokosc ); // górny prawy róg
           
        }
        if( dol < dlugosc && lewo >= 0 ) {
            if( tab_pust[ dol ][ lewo ] == ' ' ) odkrywanie_pol( tab_pust, tab, dol, lewo, dlugosc, szerokosc ); // dolny lewy róg
           
        }
        if( dol < dlugosc && prawo < szerokosc ) {
            if( tab_pust[ dol ][ prawo ] == ' ' ) odkrywanie_pol( tab_pust, tab, dol, prawo, dlugosc, szerokosc ); // dolny prawy róg
           
        }
    }
}
[ \c pp ]
Wydaje mi się, że problem jest w funkcji zapis gry, bo tam pojawiają się ograniczenia. Ewentualnie mogłem też coś spaprać z modułami, gdyż robię to pierwszy raz. xD


[/i]
P-162332
« 1 »
  Strona 1 z 1