hilfe bei code für snake game bei c# wpf?
ich habe ein snake game wo sich die schlange bewegt jetzt braucht ich das essen welches sie wenn man mit der schlange rein fährt isst. wie sieht der code aus das sich ein punkt generiert und wie läuft das ganze ab das die schlange ihn essen soll also wenn die schlange ihn berührt hat dann soll ein punkt beim label score dazu kommen.
aber wie geht das das ein punkt wie bei der schlange erstellt wird und so?
hat jemand einen code ich habe es erstellt mit c# wpf
2 Antworten
Das Essen hat eine X und Y Position, und diese wird zufällig erzeugt.
Jedes mal wenn sich die Schlange bewegt prüfst du die Position von ihrem Kopf mit dem des Essens ab. Wenn es gleich ist wird das Essen zerstört und die Schlange einen länger. Dann brauchst du natürlich neues Essen.
Du kannst dann natürlich auch den Score erhöhen.
Und was wenn da ein Teil der Schlange ist?
Dann wird das Essen eben erst sichtbar, wenn die Schlange da weg ist. Hab ich bis jetzt immer so gemacht. Aber man kann natürlich es auch anders machen.
Packt man das also in eine While-Schleife, solange bis eine gültge Position gefunden ist? Geht das performancemäßig denn klar wenn so 98/100 Feldern belegt sind?
100 Schleifendurchläufe sind kein Problem für einen PC.
Was du natürlich auch machen kannst ist über alle Felder zu iterieren, und die Freien in eine Liste einzufügen. Dann nimmst du einfach ein zufälliges Feld aus der Liste, das ist dann garantiert frei. Wobei du damit natürlich feste 101 Operationen hättest. Aber immerhin umgehst du so die Ungewissheit, wie lange es genau dauert.
Dann wird das Essen eben erst sichtbar, wenn die Schlange da weg ist. Hab ich bis jetzt immer so gemacht.
Das kannste dann aber nichmehr als Snake bezeichnen :D
Welche Methode würdest du empfehlen? While oder mit Array? Was ist professioneller?
Die zweite Methode, also die mit der Liste würde ich benutzen. Ist robuster.
wie kann man den code irgendwie kopieren damit ich ihn teilen kann da ich es leider noch nicht ganz kapiere und du mir vil besser helfen könntest?
https://pastebin.com/RQSPLNqS hier der link zu meinem code bei meiner neusten frage habe ich das ganze nochmal erklärt
Überleg mal, wie du das aufteilen kannst. Immer alles in kleine Batzen aufteilen.
Als erstes die zufällige Position. Dafür brauchst du einen Random Number Generator.
Random rdm = new Random();
Mit diesem kannst du dir jetzt Zufallszahlen in einem bestimmten Bereich geben lassen:
Point food = new Point();
food.x = rdm.Next(Width);
food.y = rdm.Next(Height);
Und dann musst du bei jeder Bewegung der Schlange prüfen, ob sie das Futter erreicht hat.
if (snake.Head.Position == food.Position)
{
changeFoodPosition();
makeSnakeLonger();
addScore();
}
ok danke ich habe jetzt den code jetzt eingegeben und dann habe ich bemerkt das ich gar nicht snake.head habe ist das bei mir mit startingposition gemeint? und was würdest du noch für einen code in die methoden geben in der if Bedienung ? hier der link zum code: https://pastebin.com/xf0XgZz2 danke dir sehr
Du musst natürlich dir die richtigen Variablennamen raussuchen.
Und du kannst nicht mehrere == machen, und das willst du ja auch gar nicht abfragen.
Was du brauchst ist etwas wie:
currentPosition.X == food.X && currentPosition.Y == food.Y
Ich sehe aber, du hast noch Probleme mit if-Abfragen u.Ä.
Was du mal machen kannst ist dir ein Tutorial anzuschauen, wo jemand Snake programmiert. Dann lernst du, wie man das macht.
Auf die Schnelle hab ich mal das hier gefunden:
Du, Das Projekt ist zu viel für dich. Dir fehlen die Grundlagen.
Ich kann auch nicht in Mathe jemandem beibringen, wie man Integralrechnung macht, der Probleme bei Multiplikation hat.
Ich kann dir nur den Tipp geben, Das Projekt erstmal ein paar Wochen in die Zukunft zu schieben.
was muss ich in die methoden in der if schreiben? könntest du mir das sagen das wäre mir sehr wichtig?
Wie gesagt.
currentPosition.X == food.X && currentPosition.Y == food.Y
Dafür muss aber Food außerhalb der Methode in der Klasse deklariert sein.
Du, dir fehlen absolute Grundlagen. Da kann ich dir nicht helfen. Ich kann dir jetzt keine Programmierenvorlesung halten. Der Code den du da hast hat einige Probleme. Die du aber nicht verstehst, weil dir die Grundlagen fehlen, kann ich dir auch schlecht sagen was falsch ist.
Frag doch lieber deinen Lehrer um Hilfe. Er weiß, was er euch schon beigebracht hat. Aber so wird das nichts. Das sind nicht einfach nur ein paar Zeilen, die falsch sind, sondern das ganze Prinzip muss dir erst noch klar werden.
Instantiate(meinPunkt, Vector2(Random.Range(0f, 10f), Random.Range(0f, 10f));
der punkt wird irgendwo in einem bereich von x/x 0-10f generiert.
Und was wenn da ein Teil der Schlange ist? Da fehlt noch ein bisschen Code.
„Das Essen hat eine X und Y Position, und diese wird zufällig erzeugt.“
Und was wenn da ein Teil der Schlange ist?
Packt man das also in eine While-Schleife, die solange eine Zufallsposition ermittelt bis eine gültge Position gefunden ist? Geht das performancemäßig denn klar wenn so 98/100 Feldern belegt sind?