Snake Schlange verkleinern geschlossen 

Status
Für weitere Antworten geschlossen.

who93

Registered +
Registriert
Nov. 2008
Beiträge
509
Hallo
Ich habe vor ein Snake mithilfe von C# zu programmieren, doch ich habe insgesamt erst ca 10 Stunden im Unterricht C# gelernt. Ein bisschen Vorkenntnis hab ich jedoch in Visual Basic 2008 Express Edition.
Bis jetzt hab ich folgende Dinge gelöst:
-Das Spielfeld wurde eingeschränkt
-Sobald man über die Beschränkung herrausfährt kommt die Schlange am
anderen Ende wieder herraus
Doch Probleme hab ich bei der Größe der Schlange
Bis jetzt ist es Möglich mit den Pfeiltasten das Symbol (in meien Fall ein °) zu steuern, doch wenn ich z.b. die linke Pfeiltaste drücke werden 2 Symbole angezeigt usw.
Ich möchte das am Anfang die Schlange 5 Zeichen groß ist und wenn ich sie bewege auch 5 Zeichen groß bleibt!
Hier ist mein bisheriger Code:
...
Ich hoffe jemand kann mir helfen!
lg
und vielen dank
who
 
Zuletzt bearbeitet von einem Moderator:
Naja, 5 '°' Zeichen zu schreiben anstatt 1 sollte wohl nicht das Problem sein. ;)
Du musst dir nur merken wo das Ende der Schlange(*) ist und dann kann man halt in jedem Schritt ans Ende z.B. ein Leerzeichen schreiben.

(*) Das koennte man z.B. so machen: Man macht eine Queue (z.B. als Liste), die genau so lang ist wie die Schlange selbst, also am Anfang die Laenge 5. Sagen wir mal die Schlange kuckt am Anfang nach rechts, dann schreibt man in die Queue erstmal 5 mal "Rechts" rein.Und in jedem Schritt bewegt man das Ende in die Richtung, die am Ende der Queue ist. Dann laesst man die Queue 1 mal "nachruecken", so dass der vorletzte Eintrag jetzt der letzte ist etc. und der Anfang ist dann leer. Und an den Anfang schreibt man die Richtung, in die der User gedrueckt hat. Somit steht am Ende der Queue immer das, was der User vor 5 Schritten gedrueckt hat und man weiss also immer genau wo das Ende der Schlange ist.
 
Zuletzt bearbeitet von einem Moderator:
ja das ist kein problem, wenn ich aber statt gerade aus fahre hinunterfahre sind alle nebeneinander, ist aber logisch
 
enn ich aber statt gerade aus fahre hinunterfahre sind alle nebeneinander
Nee, du darfst nur den Kopf neu schreiben, der Rest bleibt so. (Naja und das Ende wird halt "geloescht".)

Du kennst also immer nur 2 Positionen, Anfang und Ende, der Rest ergibt sich automatisch.

Edit: Aso und mit den 5 Zeichen schreiben meinte ich einmalig, nur am Anfang.
 
Zuletzt bearbeitet von einem Moderator:
hm, und das wird wahrscheinlich nur mti einer array gehen
 
das wird wahrscheinlich nur mti einer array gehen

Nein, eine Liste, hab ich doch geschrieben:
Man macht eine Queue (z.B. als Liste)

Ein Array ist bloed, weil es eine feste Groesse hat und das ist stoerend, falls du vor hast die Schlange wachsen zu lassen.

LinkedList(T) Class (System.Collections.Generic)

Das Nachruecken ist somit ganz einfach: RemoveLast und AddFirst: LinkedList(T) Methods (System.Collections.Generic)
 
ok danke ich muss mal nachdenken wie ich das jetzt mache
danke!

Edit: hm ich kapier das mit der Queue nicht
wo finde ich eine gute anleitung wie ich sie nutze, den die von msdn kapier ich nicht ^^
 
Zuletzt bearbeitet von einem Moderator:
hi, wie geht es aber weiter?
Code:
Queue myQueue = new Queue(); 

// Queue füllen 
for(int i = 0; i < 5; i++) 
myQueue.Enqueue(i); 
// Ausgabe an der Konsole 
PrintStack(myQueue); 
Console.ReadLine(); 
}

public static void PrintStack(Queue obj) { 
// alle Elemente aus dem Stack holen 
while(obj.Count != 0) { 
Console.WriteLine(obj.Dequeue()); 
} 
}
jetzt hab 5 Zahlen ausgegeben, doch wie lösche ich wieder eine zahl?
 
Zuletzt bearbeitet von einem Moderator:
vielen dank für deine antwort
doch bei mir kommt jetzt folgender fehler
Error 1 Using the generic type 'System.Collections.Generic.Queue' requires '1' type arguments

bei diesem code:
PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Queue myQueue = new Queue();

// Queue füllen 
for (int i = 0; i  myQueue.Enqueue(i * i);
// Ausgabe an der Konsole 
PrintStack(myQueue);
Console.ReadLine();
}

public static void PrintStack(Queue obj)
{
// alle Elemente aus dem Stack holen 
while (obj.Count != 0)
{
Console.WriteLine(obj.Dequeue());
}
}
}
}
 
Using the generic type 'System.Collections.Generic.Queue' requires '1' type arguments

Richtig. Das ist ne generische Queue. ;)
Da musste, weiss nicht genau wies in C# ist, entweder schreiben:
Code:
Queue myQueue = new Queue();
oder
Code:
Queue myQueue = new Queue();

Oder du nimmst eben die nicht generische Queue, dann muss es oben heissen:
Code:
using System.Collections;
 
ich hab das jetzt anders gelöst
bis auf das das dies chlange noch keine kurven fahren kann funktioniert alles
thx
 
bis auf das das dies chlange noch keine kurven fahren kann funktioniert alles
Ja nee, wer braucht schon Kurven bei Snake...

Was klappt denn nicht?

Also ich krieg hier unter Linux irgendwie keine generische Klassen zum Laufen, aber nicht generisch funktionierts einwandfrei.

Edit: Omg, war n bloeder Fehler von mir, Generics gehen auch einwandfrei.

Und es heisst Queue, also:
PHP:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Queue myQueue = new Queue();

// Queue füllen 
for (int i = 0; i  myQueue.Enqueue(i * i);
// Ausgabe an der Konsole 
PrintStack(myQueue);
Console.ReadLine();
}

public static void PrintStack(Queue obj)
{
// alle Elemente aus dem Stack holen 
while (obj.Count != 0)
{
Console.WriteLine(obj.Dequeue());
}
}
}
}
 
Zuletzt bearbeitet von einem Moderator:
Status
Für weitere Antworten geschlossen.
Zurück
Oben Unten