wysiwywg Geschrieben 6. Februar 2008 Teilen Geschrieben 6. Februar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 7. Februar 2008 Teilen Geschrieben 7. Februar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SirLizium Geschrieben 7. Februar 2008 Teilen Geschrieben 7. Februar 2008 ... 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 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wysiwywg Geschrieben 7. Februar 2008 Autor Teilen Geschrieben 7. Februar 2008 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++; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Toothrot Geschrieben 7. Februar 2008 Teilen Geschrieben 7. Februar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wysiwywg Geschrieben 7. Februar 2008 Autor Teilen Geschrieben 7. Februar 2008 stimmt... :upps dann müsste da was solange das feld ungleich 0 ist drin stehn oder? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Toothrot Geschrieben 7. Februar 2008 Teilen Geschrieben 7. Februar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wysiwywg Geschrieben 7. Februar 2008 Autor Teilen Geschrieben 7. Februar 2008 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wysiwywg Geschrieben 7. Februar 2008 Autor Teilen Geschrieben 7. Februar 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
paulknulst Geschrieben 9. Februar 2008 Teilen Geschrieben 9. Februar 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wysiwywg Geschrieben 9. Februar 2008 Autor Teilen Geschrieben 9. Februar 2008 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.