Snake von der Horizontalen in die Vertikale

alixander

Mitglied
Hallo Leute!
Ich bin fast am Verzweifeln. Ich versuche schon seit längerer Zeit es hinzubekommen, dass bei meinem snake-clone der Wechsel von der Horizontalen in di Vertikale so klappt wie beim Original, aber ich komme einfach nicht drauf. Könnt ihr mir helfen? Hier ist die Funktion mit der ich bis jetzt meine Schlang fortbewege:
Code:
void move(int sleepTime)
{
        Sleep(sleepTime);
        if(direction==true)
        {

        xKor[0]++;

        for(initer=1;initer<=4;initer++)
        {
                xKor[initer]=xKor[initer-1]-1;
                yKor[initer]=yKor[initer-1];
        }
        initer=0;
        while(initer<=4)
        {
                gotoxy(xKor[initer],yKor[initer]);
                cout<< "O";
                initer++;
        }
       gotoxy(xKor[4]-1,yKor[0]);
               cout<< " ";
       }
       if(direction==false)
       {
          yKor[0]++;

        for(initer=1;initer<=4;initer++)
        {
                xKor[initer]=xKor[initer-1];
                yKor[initer]=yKor[initer-1]-1;
        }
        initer=0;
        while(initer<=4)
        {
                gotoxy(xKor[initer],yKor[initer]);
                cout<< "O";
                initer++;
        }
       gotoxy(xKor[0],yKor[4]-1);
               cout<< " ";
       }

}
Wäre nett, wenn ihr mir verbesserungs Vorschläge zu meiner Funktion geben würdet
Mfg alixander
 
Hi! Nix für ungut, aber kannst du das ganze mit Pseudocode darstellen, bzw. einfach nur erklären, wie du die Sache bisher angegangen bist? Ich finde das einfach nur anstrengend, sich in die vollkommen unkommentierten Quellcodes anderer Leute reindenken zu müssen. Der Ansatz wäre meiner Meinung nach folgender: Einfach ein Tileprinzip nutzen. Also ein zweidimensionales Array, das den Zustand des Bildschirms und der Schlange widerspiegelt (könnte für diese Zwecke also prinzipiell bool sein, oder byte oder int, wenn's später noch komplexer werden soll). Das wird durch eine eigene Funktion dargestellt. Bei Bewegungen der Schlange einfach nur dieses Array aktualisieren, also das Element am Ende auf false, das neue Element am Anfang auf true, der Rest bleibt. Wenn du das so gemacht hast, sorry, hab's halt nicht durchdacht.
 
Diese Funktion ist mir ebenfalls zu vertrackt, als dass ich sie jetzt analysieren würde ;). Deswegen mein grundsätzlicher Ansatz. Ich würde die aktuelle Richtung der Schlange in einer Variablen speichern (es gibt 4 Richtungen) und dann halt je nach Richtung die aktuelle Position verändern. Wobei natürlich nicht vergessen werden darf, den Schwanz "nachzuziehen" und gegebenfalls zu verlängern. So habe ich es seinerzeit gemacht. (Snake ist nach wie vor eine schöne Programmierübung :).) Für dieses Nachziehen des Schwanzes gibt es wohl mehere Lösungsansätze; ich habe damals einfach alle Ecken des Schwanzes in einem Array gespeichert. Ich habe mir keine Gedanken gemacht, ob es vielleicht auch einfacher oder eleganter geht.

Gawayn
 
Zurück