hilfe bei code für snake game bei 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.

Woher ich das weiß:Berufserfahrung – Softwareentwicklerin
LowlyTV 
Fragesteller
 29.05.2020, 14:38

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?

0
Lamanini  29.05.2020, 14:43
@LowlyTV

Na du wählst alles aus was du teilen möchtest, und lädst das dann auf Pastebin.com hoch. Dann schickst du hier den Link rein.

0
Lamanini  01.06.2020, 13:36
@LowlyTV

Also, guck dir doch mal Enums an. Das ist deutlich eleganter als Magic Numbers.

Was genau ist jetzt noch deine Frage?

Wie man die Position für das Essen generiert? Wie man es zeichnet?

0
LowlyTV 
Fragesteller
 01.06.2020, 13:56
@Lamanini

also wie der code aussieht das das essen an einer zufälligen position generiert wird und die die schlange es dann ist und dann wenn es es gegessen hat das ein punkt beim lable score dazu kommt

0
Lamanini  01.06.2020, 14:02
@LowlyTV

Ü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();
}

0
LowlyTV 
Fragesteller
 01.06.2020, 14:28
@Lamanini

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

0
Lamanini  01.06.2020, 14:32
@LowlyTV

Ich habe den Code nicht genau auf deinen Code angepasst, er stellt nur die Idee dar.

Vielleicht guckst du dir lieber noch mal die Grundlagen des Programmierens in einer Console-Application an. Ich glaube da fehlt noch was.

0
LowlyTV 
Fragesteller
 01.06.2020, 14:53
@Lamanini

ich habe bei der if eingesetzt snakeposition da das mein kopf ist aber wenn ich .position mache dann geht es nicht da es das nicht gibt warum weißt du das oder kannst du mir das anhand des codes sagen?

0
Lamanini  01.06.2020, 14:54
@LowlyTV

Du kannst einfach abfragen, ob das x der Schlange gleich dem x des Essens ist, und ob das y der Schlange gleich des y der Schlange ist.

0
LowlyTV 
Fragesteller
 01.06.2020, 14:55
@Lamanini

mein start point heißt doch startingpoint aber wenn ich .position mache steht da das es keine defination für position gibt warum?

0
Lamanini  01.06.2020, 14:56
@LowlyTV

Ja, weil es diese Variable nicht gibt. Frag stattdessen

Startingpoint.X == snake.X && Startingpoint.Y == snake.Y ab.

0
LowlyTV 
Fragesteller
 01.06.2020, 15:53
@Lamanini

ok also bast die if so?  if (startingPoint.X ==food.X == startingPoint.Y ==food.Y) aber es ist noch rot unterwellt warum?

0
Lamanini  01.06.2020, 15:57
@LowlyTV

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:

https://www.youtube.com/watch?v=xVgSDk1hKhA

0
LowlyTV 
Fragesteller
 01.06.2020, 16:03
@Lamanini

ok danke aber warum wird bei  food.X = rdm.Next(Width);

      food.Y = rdm.Next(Height); diesem code teil angezeigt das konvertierung von double in int nicht möglich ist wo kann ich das ändern also conver.toint32 hinzufügen?

0
LowlyTV 
Fragesteller
 01.06.2020, 16:15
@Lamanini

danke für das video aber ich muss es genau so machen und da wäre es nett wenn du mir da helfen könntest

0
LowlyTV 
Fragesteller
 01.06.2020, 16:17
@Lamanini

danke geht aber wenn ich start dann wird noch keine essen generiert aber warum? was muss ich tun?

0
LowlyTV 
Fragesteller
 01.06.2020, 16:23
@Lamanini

was muss ich in die methoden in der if schreiben? könntest du mir das sagen das wäre mir sehr wichtig?

0
Lamanini  01.06.2020, 16:29
@LowlyTV

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.

0
LowlyTV 
Fragesteller
 01.06.2020, 16:30
@Lamanini

ok aber ich meine die methoden changefoodposition, makeSnakelonger, addScore

0
Lamanini  01.06.2020, 16:31
@LowlyTV

Die musst du selber schreiben. Was sie tun sagt der Name ja.

0
LowlyTV 
Fragesteller
 01.06.2020, 16:34
@Lamanini

ja das kann ich aber nicht machen da es eine aufgabe ist und da ich dazu hilfe brauche habe ich hier gefragt darum wäre es nett wenn du mir dabei noch helfen kannst

0
Lamanini  01.06.2020, 16:36
@LowlyTV

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.

0
LowlyTV 
Fragesteller
 01.06.2020, 16:38
@Lamanini

ja das ist mir bewusst und ich arbeite gerade aber diese aufgabe wird benotet und darum hilft er uns nicht und wenn ich den code habe kann ich mich da rein denken wie ich das auch alleine geschafft hätte aber dazu benötige ich den code

0
LowlyTV 
Fragesteller
 01.06.2020, 16:49
@Lamanini

ja ok aber sollten sich das essen doch generieren oder oder wo und wie muss ich das machen?

0
Lamanini  01.06.2020, 17:58
@LowlyTV

Schick mir mal eine FS, wir schreiben am besten per PN weiter.

0
MrAmazing2  29.05.2020, 16:15

„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?

0
Lamanini  29.05.2020, 16:22
@MrAmazing2
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.

1
MrAmazing2  29.05.2020, 16:41
@Lamanini
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?

1
Lamanini  29.05.2020, 17:06
@MrAmazing2

Die zweite Methode, also die mit der Liste würde ich benutzen. Ist robuster.

1

Instantiate(meinPunkt, Vector2(Random.Range(0f, 10f), Random.Range(0f, 10f));

der punkt wird irgendwo in einem bereich von x/x 0-10f generiert.

MrAmazing2  29.05.2020, 16:17

Und was wenn da ein Teil der Schlange ist? Da fehlt noch ein bisschen Code.

0