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 #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 ) { system( "CLS" ); for( int j = 0; j <( kolumny + 1 ); j++ ) { 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++ ) { pole( tab_pust, tab, i, j, wiersze, kolumny, enter ); } for( int j = 0; j <( kolumny ); j++ ) { 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++ ) { if( j == 0 ) { cout << "*"; } if( j < kolumny ) { cout << "*"; } else if( j == kolumny ) { cout << "*\n"; } } }
char ** gen_tab( int wiersze, int kolumny ) { 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 ) { int a, b; srand( time( 0 ) ); for( int k = 0; k < bomba; k++ ) { start: a = rand() %( lw ); b = rand() %( lk ); if( tab[ a ][ b ] != '*' ) tab[ a ][ b ] = '*'; else if( tab[ a ][ b ] == '*' ) goto start; } }
void numeracja( char ** tab, int lw, int lk ) { 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 ) { zaznaczenie1 = i; zaznaczenie2 = j; }
void spacje( char ** tab, int lw, int lk ) { 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 ) { 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 ) { 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 ) { 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; 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; 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; 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(); 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 ); if( z == 72 ) { if( n > 1 ) { n--; } else n = 3; } if( z == 80 ) { if( n < 3 ) { n++; } else n = 1; } 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; char ** tabela_pusta; 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 ); tabela_pusta = gen_tab( nowy.dlugosc, nowy.szerokosc ); spacje( tabela_pusta, nowy.dlugosc, nowy.szerokosc ); spacje_2( tabela, nowy.dlugosc, nowy.szerokosc ); bomby( tabela, nowy.dlugosc, nowy.szerokosc, nowy.bomba ); numeracja( tabela, nowy.dlugosc, nowy.szerokosc ); tablica_gry( tabela_pusta, tabela, nowy.dlugosc, nowy.szerokosc, enter ); nowy.poczatek = time( NULL ); nowy.klik = 0; while( 1 ) { enter = 0; z = getch(); if(( z == 75 ) &&( j > 0 ) ) { nowy.klik++; i; j--; zaznaczenie( i, j ); 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 ); 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 ); 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 ); 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 ); } if( dol < dlugosc ) { if( tab_pust[ dol ][ j ] == ' ' ) odkrywanie_pol( tab_pust, tab, dol, j, dlugosc, szerokosc ); } if( lewo >= 0 ) { if( tab_pust[ i ][ lewo ] == ' ' ) odkrywanie_pol( tab_pust, tab, i, lewo, dlugosc, szerokosc ); } if( prawo < szerokosc ) { if( tab_pust[ i ][ prawo ] == ' ' ) odkrywanie_pol( tab_pust, tab, i, prawo, dlugosc, szerokosc ); } if( gora >= 0 && lewo >= 0 ) { if( tab_pust[ gora ][ lewo ] == ' ' ) odkrywanie_pol( tab_pust, tab, gora, lewo, dlugosc, szerokosc ); } if( gora >= 0 && prawo < szerokosc ) { if( tab_pust[ gora ][ prawo ] == ' ' ) odkrywanie_pol( tab_pust, tab, gora, prawo, dlugosc, szerokosc ); } if( dol < dlugosc && lewo >= 0 ) { if( tab_pust[ dol ][ lewo ] == ' ' ) odkrywanie_pol( tab_pust, tab, dol, lewo, dlugosc, szerokosc ); } if( dol < dlugosc && prawo < szerokosc ) { if( tab_pust[ dol ][ prawo ] == ' ' ) odkrywanie_pol( tab_pust, tab, dol, prawo, dlugosc, szerokosc ); } } } [ \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] |