[C++] Alokacja pamięci dwuwymiarowej tablicy obiektów
Ostatnio zmodyfikowano 2014-12-21 10:00
lurch92 Temat założony przez niniejszego użytkownika |
[C++] Alokacja pamięci dwuwymiarowej tablicy obiektów » 2014-12-21 08:57:40 Witam, piszę prostą aplikację gry w labirynt. Labirynt ma się generować losowo i właśnie z tym mam mały problem. Do generacji wykorzystuje DFS'a. Problem jest następujący : posiadam klasę Komórka która przechowuje info o ścianach, czy jest odwiedzona i symbol (+ info o drodze przy szukaniu najkrótszej drogi); posiadam klasę Generator która zawiera tablice 2D złożoną z obiektów Komórka, no i wysokość i szerokość. class Komorka { public: bool odwiedzona; bool gorna_sciana; bool dolna_sciana; bool lewa_sciana; bool prawa_sciana; char znak; int nitka; Komorka() : odwiedzona( false ) , gorna_sciana( true ) , dolna_sciana( true ) , lewa_sciana( true ) , prawa_sciana( true ) , znak( SCIANA ) { } }; class Generator { private: int wysokosc; int szerokosc; Komorka ** gen_plansza; public: Generator( int, int ); void Rysuj(); void Generuj(); void Zapisz(); ~Generator(); }; Nie będę wrzucał całości bo jest tego za dużo. Problem pojawia się przy tworzeniu losowych ścieżek. A dokładnie tutaj: if((( gen_plansza[ x - 2 ][ y ].odwiedzona == false ) &&( gen_plansza[ x ][ y ].gorna_sciana == true ) &&( gen_plansza[ x - 2 ][ y ].dolna_sciana == true ) ) || (( gen_plansza[ x + 2 ][ y ].odwiedzona == false ) &&( gen_plansza[ x ][ y ].dolna_sciana == true ) &&( gen_plansza[ x + 2 ][ y ].gorna_sciana == true ) ) || (( gen_plansza[ x ][ y - 2 ].odwiedzona == false ) &&( gen_plansza[ x ][ y ].lewa_sciana == true ) &&( gen_plansza[ x ][ y - 2 ].prawa_sciana == true ) ) || (( gen_plansza[ x ][ y + 2 ].odwiedzona == false ) &&( gen_plansza[ x ][ y ].prawa_sciana == true ) &&( gen_plansza[ x ][ y + 2 ].lewa_sciana == true ) ) ) {...} Zaczynam przeszukiwanie od pozycji 1:1. Błąd jaki otrzymuje to : Unhandled exception at 0x012a1460 in Labirynt.exe: 0xC0000005: Access violation reading location 0xfdfdfe09. Domyślam się, że chodzi o odniesienie się poza zakres tablicy. Bo jak zaczynam od pozycji [1][1] a już w pierwszym if'ie odnoszę się do pozycji [-1][1] to musi być przyczyną. Z góry dziękuję za jakąkolwiek pomoc. |
|
NopeDotAvi |
» 2014-12-21 09:37:42 No skoro wiesz czemu jest błąd, to czemu do nas przychodzisz i się pytasz? Poza tym DFS nie znajduje najkrótszej ścieżki, lepiej użyj do tego BFS. |
|
lurch92 Temat założony przez niniejszego użytkownika |
» 2014-12-21 10:00:44 Nie wiem jak usunąć ten problem. Te warunki sprawdzają czy istnieje możliwość wygenerowania kolejnej części drogi, sprawdza czy można iść w którymś z kierunków. Algorytm tworzy ścieżki co 2 znaki. DFS wyszukuje drogę a algorytm tworzy taki labirynt, że nie istnieje tylko jedna droga pomiędzy dwoma dowolnymi punktami. Myślałem, żeby dodać jakieś warunki dodatkowe do tych if'ów ale chyba można to inaczej zrobić. |
|
« 1 » |