Rätselhaftes Problem bei Snake



  • Moin!

    Ich bin gerade dabei mich an Snake zu probieren. Bisher auch alles in Butter.
    Ich habs so geregelt das das ich ein Structarray hab das für die einzelnen Felder der Schlange stehen. Darin sind dann jeweils die X- und Y-Koordinaten dieses Teils der Schlange gespeichert. Aus diesem Punkt lass ich dann ein Quadrat zeichnen. Das ganze basiert auf OpenGL.
    Nun kopiere ich jeweils die Daten des vorletzen Teils der Schlange in das letzte Teil dann das drittletzte in das vorletzte und so lasse ich die ganze Schlange abgehen. Dann verschiebe ich das erste Teil je na letzter Tatatureingabe nach links/rechts, oben/unten. Klappt auch soweit und die hinteren Teile der Schlange folgen dem ersten Teil auch auf dem Fuße. Das Problem dabei ist das aus irgendeinem mir vollkommen unbekannten Grund (zwei Freunde wussten auch nicht warum) zwischen jedem einzelnen Teil der Schlange die Länge der Schlange-1 addiert wird. Somit passt zwischen jedes Teil der Schlange theoretisch nochmal eine ganze Schlange rein.

    Ich hoffe ich habs nicht zu schwer formuliert. Hier der relevante Code.
    "lange" ist die Länge der Schlange. Segm[].x/y sind die einzelnen Teile der Schlange und mit dx/dy wird das erste Teil verschoben.
    Erst wird folgendes ausgeführt:

    void Move(int milliseconds)
    {
    static int time=0;
    time+=milliseconds;
    if (time>1000)
    {
    time-=1000;
    for(j=lange-1; j>0; j--)
    {
    Segm[j]=Segm[j-1];
    Segm[0].x+=dx;
    Segm[0].y+=dy;
    }
    }
    }

    dannach wird direkt gezeichnet mit:

    glBegin(GL_QUADS);
    glColor3f(1,0,0);
    for(i=0; i<lange; i++)
    {
    glVertex2f(Segm[i].x,Segm[i].y);
    glVertex2f(Segm[i].x,Segm[i].y+1);
    glVertex2f(Segm[i].x+1,Segm[i].y+1);
    glVertex2f(Segm[i].x+1,Segm[i].y);
    }
    glEnd();

    Das sind auch die beiden einzigen Teile in denen bisher die Variable lange verwendet wird.
    Hoffe ihr findet heraus warum er immer die Länge der Schlange-1 dazu addiert.



  • Das Problem dabei ist das aus irgendeinem mir vollkommen unbekannten Grund [...] zwischen jedem einzelnen Teil der Schlange die Länge der Schlange-1 addiert wird.

    Was wird wo hin addiert?

    Und bitte benutz die Code-Tags!



  • Jop sry hatte alles aus nem anderen Forum kopiert, deshalb...

    Also die Zahl die in der Variable "lange" steht (und die Länge der Schlange angibt) wird um eins verringert und das wird dann zu den X- und Y-Koordinaten der einzelnen Segmente der Schlange (deshalb ja Segm) dazugerechnet.
    Das hab ich über nen Debugger rausgefunden.
    Das sieht im Spiel jetz so aus das das erste Segment ganz normal läuft dann kommt eben ne rießige Lücke die so groß ist wie "lange" und erst dann kommt das nächste Segment. Dann wieder ne Pause und so weiter bis zum letzten Segment.



  • Ich bin immer noch nicht sicher ob ich dich richtig verstanden hab, aber bist du sicher dass die Schleife so richtig ist:

    for(j=lange-1; j>0; j--)
    {
       Segm[j]=Segm[j-1];
       Segm[0].x+=dx;
       Segm[0].y+=dy;
    }
    

    Warum wird in jedem Schleifendurchgang Segment[0] weitergerueckt?



  • Argh!!! Das wars! Beim schreiben hab ichs nich geschafft zu erklären warum das verschieben da drin is, deshalb hab ichs einfach nach hinten versetzt und schon gings...

    Dankeschön jetz kann ich endlich weitermachen 🙂


Anmelden zum Antworten