Problem mit Liste



  • Hallo,
    ich hab ein kleines Problem mit einer Liste und hoffe das mir wer helfen kann. Also ich versuch Momentan mein erstes Spiel in C++ (mit der SDL) zu schreiben und brauch dafür ne liste zum Speichern der Einheiten, wenn eine Einheit einen gewissen Punkt erreicht soll die Einheit sich in eine andere Richtung bewegen oder zerstört werden. Hab dafür auch ne Funktion gebastelt, die aber nicht so funktioniert wie ich das will.

    Hab jetzt schon gut nen halben Tag versucht das hinzubekommen, aber da ich noch nicht so viel Erfahrung im Programmieren von Spielen hab, find ich den Fehler nicht.

    Also zu dem Fehler: Naja eigentlich recht simpel, wenn eine Einheit einen Punkt erreicht wo diese Einheit die Richtung ändern soll ändert es nicht nur die Richtung von der Einheit sondern von allen, sollte aber eben nur die von der ändern.

    Naja hier mal der Code von der Funktion:

    [cpp]
    void CGame::UpdateCreeps()
    {
        list<CCreep>::iterator It;
        SDL_Rect Box_A;
        int tile=-1;
        SDL_Rect Box_B;
        for(It= m_CreepList.begin();It != m_CreepList.end();++It)
        {
            Box_B= It->Get_Box();
    
            for(int i=0;i<TOTAL_TILES;++i)
            {
                tile =m_pMap->GetTileTyp(i);
                if(tile!= TILE_BAUBAR|| tile!=TILE_WEG)
                {
                    Box_A= m_pMap->GetTileBox(i);
    
                    // Start Tiles
                    if(It->Get_LastTile()==-1)
                    {
                        if(tile==TILE_START_OBEN)
                        {
                            It->SetPosition(Box_A.x+(Box_A.w-Box_B.w/2),Box_A.y+Box_A.h-Box_B.h);
                            It->Set_LastTile(TILE_OBEN);
                        }
                        if(tile==TILE_START_UNTEN)
                        {
                            It->SetPosition(Box_A.x+Box_A.w/2-Box_B.w/2,Box_A.y+Box_A.h/2-Box_B.h/2);
                            It->Set_LastTile(TILE_UNTEN);
                        }
                        if(tile==TILE_START_RECHTS)
                        {
                            It->SetPosition(Box_A.x+Box_A.w/2-Box_B.w/2,Box_A.y+Box_A.h/2-Box_B.h/2);
                            It->Set_LastTile(TILE_RECHTS);
                        }
    
                        if(tile==TILE_START_LINKS)
                        {
                            It->SetPosition(Box_A.x+Box_A.w/2-Box_B.w/2,Box_A.y+Box_A.h/2-Box_B.h/2);
                            It->Set_LastTile(TILE_LINKS);
                        }
                    }
    
                    //Normale Tiles
                    else if(   (Box_A.x+(Box_A.w-Box_B.w)/2<Box_B.x+2)
                            && (Box_A.y+(Box_A.h-Box_B.h)/2<Box_B.y+2)
                            && (Box_A.x+Box_A.w+2>Box_B.x+Box_B.w+(Box_A.w-Box_B.w)/2)
                            && (Box_A.y+Box_A.h+2>Box_B.y+Box_B.h+(Box_A.h-Box_B.h)/2)
                           )
                    {
                        if(tile==TILE_OBEN)
                        {
                            It->Set_LastTile(TILE_OBEN);
                        }
                        if(tile==TILE_UNTEN)
                        {
                            It->Set_LastTile(TILE_UNTEN);
                        }
                        if(tile==TILE_RECHTS)
                        {
                            It->Set_LastTile(TILE_RECHTS);
                        }
    
                        if(tile==TILE_LINKS)
                        {
                            It->Set_LastTile(TILE_LINKS);
                        }
    
                        //ENDE Tiles
                        if(     tile==TILE_ENDE_OBEN
                            ||  tile==TILE_ENDE_UNTEN
                            ||  tile==TILE_ENDE_RECHTS
                            ||  tile==TILE_ENDE_LINKS)
                        {
                            It->SetAlive(false);
                            It=m_CreepList.erase(It);
                        }
                    }
                }
            }
        }
    }
    [/cpp]
    

    Erklärung von den Variablen:
    tile: schaut welcher tiletyp grad ausgewählt ist
    Box_A: Geht nach und nach alle tiles durch
    (Box_A.x: X-Korrdinate von der Grafik
    Box_A.y: Y-Korrdinate von der Grafik
    Box_A.w: länge von der Grafik
    Box_A.h: höhe von der Grafik)
    Box_B: Geht alle einheiten in der Liste durch
    TILE_...: sind Variablen die Werte speichern, was das für ein tile ist

    Naja hoff mal ich konnt das so ungefähr erklären.
    Fals ich noch was posten soll einfach bescheid sagen.
    Noch n Bild
    http://www.pic-upload.de/view-2149986/fehler.jpg.html
    weiß zwar nicht ob das Bild so viel hilft

    Danke schon mal im voraus
    mfg stefen



  • Überreisse den Code jetzt nicht.
    Bau doch einfach ein Testprogramm in dem du ein Minimalbeispiel mit Konsolenausgabe machst.
    Dann siehst du schon, woran es liegt.



  • ok hab den Fehler gefunden, lag aber nicht an der Liste sondern darann wie ich die Einheiten gerendert hab.
    Naja kann das jetzt nicht so gut erklären, aber es geht jetzt auf jeden Fall.

    und noch mal ein Danke an Derbe


Anmelden zum Antworten