Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Wir sind in der Schule gerade dabei ein kleines Snake-Spiel zu programmieren und heute hatten wir einen anderen Lehrer als Supplierung und der hat uns was von arrays zum Wachsen lassen der Schlange erzählt, ich wollte das jetzt ausprobieren allerdings kapier ich nicht ganz wie ich das anstellen soll das es eben wächst... das ganze is schon soweit das ich gegen einen computergegner spielen kann (das hab ich jetzt aber mal weggelassen), das man punkte einsammeln kann und die Spielzeit mitgezählt wird nur eben das mit dem wachsen und selbst fressen wäre noch toll wenn ich das noch irgendwie zusammenbringen würde.

danke schon mal im vorraus für die Hilfe

Rafi

PS.: es is nicht so dringend weil wir den lehrer erst übernächste woche wieder haben und ich so oder so einer der weitesten bin.

Geschrieben

Hallo, und Willkommen auf dem Board.

nur eben das mit dem wachsen und selbst fressen wäre noch toll wenn ich das noch irgendwie zusammenbringen würde.
Ja, das wäre es vermutlich. :)

Ein Hinweis am Rande: Wenn du eine Frage hast, solltest du sie stellen.

Außerdem sollte dir klar sein, dass dir hier niemand helfen kann, weil hier niemand außer dir weiß, wie dein Code aussieht. Niemand außer dir weiß, wie du die Positionsdaten deiner Schlange organisiert hast (Ringpuffer, verkettete Liste oder etwas ganz anderes). Allgemein kann man nur sagen, dass du deine Speicherstruktur dynamisch vergrößern musst.

Das Selbst-Fressen erkennst du ganz einfach daran, dass der Kopf an einer Position steht, an der auch ein Schwanzteil steht. Dazu musst du nur nach jedem Schritt die Kopfposition mit jeder Schwanzposition vergleichen.

Geschrieben
... und der hat uns was von arrays zum Wachsen lassen der Schlange erzählt, ich wollte das jetzt ausprobieren allerdings kapier ich nicht ganz wie ich das anstellen soll das es eben wächst... ...

*lol* nicht dass das hier jemand mißversteht :D

Also Klotzkopp hat recht, so konkret kann man dir jetzt noch nicht helfen.

Optimal wäre, wenn Du die Schlange als verkettete Liste implementiert hast, denn dann ist das "bewegen" der Schlange nicht ganz so rechenaufwendig.

Zum Bewegen reicht es dann, vor den Kopf (=das erste Element der Schlange) ein neues Element mit einer neuen Position einzusetzen, und das letzte Element zu löschen.

Für das Wachsen könntest Du einen Zähler implementieren, der angibt, wieviele Schritte die Schlange noch wachsen soll. Sobald die Schlange etwas frisst, wird der Zähler um einen gewissen Wert erhöht.

Mit jedem Schritt nimmt dieser Zähler nun ab. In der Wachstumsphase (also solange dieser Wachstumszähler >0) wird jeweils ein Listenelement vor das Kopf-Element gesetzt während jeweils das letzte Element nicht gelöscht wird. Dadurch verlängert sich die Schlange mit jedem Schritt, bis der Wachstumszähler wieder unten ist.

Für eine Array-Lösung sollte dies ähnlich funktionieren, nur dass Du dann vermutlich (je nach Implementierung) Probleme bekommst, sobald der Array vergrößert werden muss...

Geschrieben

das mit dem bewegen geht schon nur wie ich das mit arrays anstellen soll das die schlange wächst (kenn mich mit (vorallem 2dimensionalen) arrays nicht wirklich aus...) nur weiß ich nicht welchen programmcode ich da jetzt reinposten soll... grundsätzlich setz ich wie lizium gesagt habe eben wenn ich jetzt die pfeiltaste nach oben drück das smiley um eins rauf und auf der position davor mach ich (in meinem fall weil ich das spielfeld so ausgefüllt hab) mit nem punkt.

      if(x>MAXX-1)x=2;          //falls das smiley ausn rand fährt

      if(x<2)x=MAXX-1;

      if(y>MAXY-1)y=2;

      if(y<2)y=MAXY-1;


      textcolor(farbe1);

      gotoxy(x,y);                     //das pünktchen wird gesetzt

      printf("%c",250);


      if(richt==1) y--;               //neue position wird bestimmt, davor wird

      else if(richt==2) y++;          //"richt" festgelegt mit kbhit() und switch.

      else if(richt==3) x--;

      else if(richt==4) x++;



      gotoxy(x,y);

      printf("%c",1);                 //das smiley wird gemalt

und das ganze wär jetzt nicht schlecht wenn ich einen punkt einsamml das das smiley zu 2 smileys ....... wird. also so mit ner maximallänge von fürn anfang 10 oder so. nur wie muss ich das mit den arrays machen? hier der kläglich gescheiterte versuch:
      i=0;

      j=0;

      while(i<sna)      //sna wird bei jedem mal was fressen hochgezählt

      { while(sna!=0)

        { gotoxy(snake[i][j],snake[i][j]);    //da hab ich sicher fehler drinnen,

          printf("%c",1);                     //weiß aber nicht wie ichs besser

          j++;                                //machen könnte...

        }


        i++;

      }

Geschrieben

while(sna!=0)

        { gotoxy(snake[i][j],snake[i][j]);    //da hab ich sicher fehler drinnen,

          printf("%c",1);                     //weiß aber nicht wie ichs besser

          j++;                                //machen könnte...

        }

Wenn mich nicht alles täuscht, dürfte das eine Endlosschleife sein. Es sei denn, gotoxy macht irgendwas mit "sna". Ansonsten wird die Variable wohl nie 0.

Geschrieben

Ich verstehe nicht, was genau die Funktion macht. Mir ist nur die Endlosschleife ins Auge gefallen. Damit die Schleife endet, musst du entweder die Bedingung ändern oder sna irgendwie runterzählen lassen (Was aber vermutlich nicht sinnvoll wäre).

Wofür genau ist denn das "snake" Array gut?

Ich fürchte, ohne deinen kompletten Code zu kennen, ist dein Problem schwer zu durchschauen.

Geschrieben

das problem ist das programm hat auch noch ein kleines menü dabei (man könnte das kleiner machen aber ich weiß net wie) das is schon ca. 100-200 zeilen lang...

das ganze programm hat zurzeit 587 zeilen und ist nicht mit kommentaren oder so versehen...

das array soll machen, dass die schlange sich mit einer variable die position x u. y gleichzeitig gespeichert wird oder so und sonst naja weiß nicht genau aber ich hab glaub ich ne lösung dafür das ich das programm einfach in x-y-richtung mal bewegen kann das wachsen wird dann halt noch mal ein problem aber ich probier jetzt mal meine idee...

Geschrieben

ich glaub ich lass das mal komplett weil mir das anscheinend zu hoch ist und über n forum es sehr schwer ist das gesamte problem zu schildern...

trotzdem danke für die hilfsversuche

Geschrieben

lad doch mal deinen code in einer textdatei bei bspw rapidshare oder so hoch, dann kann man sich den angucken, und könnte sicher besser auf dein problem eingehen.

// das mit der endlosschleife könnte ein problem hervorrufen, da die nie endet, wird die die ganze zeit ausgeführt und das führt zu einem programmabsturz. hatte ich heute auch paar mal beim coden, weil ich da sowas gemacht hatte ^^

Also am besten lädst du den code mal hoch, damit man sich den angucken kann.

Geschrieben

naja eigenlich funktioniert jetzt alles

j=0;

      while((snakex[j]!=0&&snakey[j]!=0)||(j<=sna))

      { textcolor(farbe1);

        if(j<10000)                   //damit die größe des arrays nicht überschritten wird

        { if(j==0)

          { if(richt==1) y--;

            if(richt==2) y++;

            if(richt==3) x--;

            if(richt==4) x++;


            if(x>MAXX-1)x=2;

            if(x<2)x=MAXX-1;

            if(y>MAXY-1)y=2;

            if(y<2)y=MAXY-1;


            snakex[0]=x;

            snakey[0]=y;          

            gotoxy(snakex[0],snakey[0]);

            printf("%c",1);

          }

          else

          { snakex[j]=snakex[j-1];

            snakey[j]=snakey[j-1];

            gotoxy(snakex[j],snakey[j]);

            printf("%c",'x');          //da kommt evtl noch ein anderes zeichen hin deshalb %c

          }

          j++;

        }

      }   

das ganze werde ich dann später wenn alles funkt als 2d-array machen aber mit 2-1d isses leichter mal fürn nen "array-anfänger"

nur wie ich das pünktchen zum schluss hinsetze check ich noch nicht und die abfrage für das selbstfressen-aufhören...

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...