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

[C++] Alokacja pamięci dwuwymiarowej tablicy obiektów

Ostatnio zmodyfikowano 2014-12-21 10:00
Autor Wiadomość
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ść.

C/C++
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 )
    { }
};

C/C++
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:

C/C++
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.
P-123173
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.
P-123174
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ć.
P-123175
« 1 »
  Strona 1 z 1