javafx snake mit OO exception?

... komplette Frage anzeigen

2 Antworten

Das Problem hat Androidhecker bereits beschrieben.

Die Lösung für diesen Fehler: 

Erstelle folgenden Konstruktor in deiner Klasse Move:

public Move(Spielfeld spielfeld) {
    this.objekt1 = spielfeld;
}

Dadurch kannst du in Move auf das Spielfeld zugreifen ohne dort ein neues Spielfeld zu erstellen.

in deiner Main sieht das dann so aus:

Spielfeld objekt1 = new Spielfeld();
Move objekt2 = new Move(objekt1);

Allerdings wenn dieses Problem behoben ist, treten andere Probleme auf.

sagt mir wenn ihr schon dabei seid, wie der quellcode jetzt ist und was ich wieder besser machen muss 

Vorerst nur kleinere Dinge:

  • Keine Umlaute in Methoden verwenden: äöü sondern dafür ae oe ue verwenden*.Einige schwören darauf die Anwendung komplett in englisch zu halten. Ich persönlich bin der Meinung, dass der Programmierer seinen eigenen Code leicht verständlich lesen können soll. (Natürlich ausnahmen wenn man für ein internationales Unternehmen arbeitet)
  • Methoden sollte man immer klein Schreiben: "void Bewegung" -> "void Bewegung".
  • Variablen-Zugriffsrechte: In der Regel lässt man Variablen nicht von außen ändern und sollten daher private sein. für einen Zugriff von Außen sollte man getter und setter verwenden.

Was die Codestruktur betrifft, würde ich nochmal genauer ins Detail gehen, aber auf die kürze bekomme ich das Snake-Spiel noch nicht richtig zum laufen.

 *= Einige Source-Verwaltungen ersetzen Sonderzeichen wie äöüß durch Kryptische Zeichnen. Was dann bei Aktualisierung deinen Code unbrauchbar machen könnte.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von gut4fr5g4
25.08.2016, 14:56

Habe es jetzt fast fertig und von dir un androhecker gesagten dinge beachtet, ich hoffe, du nimmst dir nochmal die zeit und guckst es dir nochmal an (schicke es so gegen abend nochmal rein! danke!!!)

0
Kommentar von gut4fr5g4
25.08.2016, 15:34

Methoden sollte man immer klein Schreiben: "void Bewegung" -> "void Bewegung".

das versteh ich jetzt nicht, wie du das meinst?

Was muss jetzt am anfang klein, was groß?

also klassen klein, packages klein, und was noch?

0

Du erstellst für die Klasse Move deine eigene Instanz von Spielfeld, dessen kästchen Array ist jedoch leer.

Noch ein bisschen Kritik:

1. Dein Timer wird nicht beendet, wenn das Fenster geschlossen wird -> es läuft ewig im Hintergund weiter.

2. Keine Umlaute in irgendwas.

3. Soll Move ein Substantiv sein? Sieht mir eher nach einem Verb aus, Klassen sind keine Dinge gemacht werden, sondern sie sind Dinge.

4. Wenn du eine Konstante groß schreibst, sollte sie auch final, also konstant sein.

5. Methodennamen vorne IMMER klein.

6. Dein if Konstrukt im Timertask ist höchst ineffizient. Ein else if wäre besser, ein switch sähe noch schöner aus.

7. Dann solltest du deine Zugriffslevel auch richtig setzen, wenn du die Fehler nicht selber siehst, kann dir da auch ein IDE helfen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von gut4fr5g4
24.08.2016, 21:34

danke für die kritik! muss ich wohl doch noch einiges ändern, ich dachte projekte groß, packages klein und klassen groß am anfang?

ja if im timer habe ich jetzt viel effizienter gemacht

Wie kann ich denn den array "aktualisieren"?

0
Kommentar von androhecker
24.08.2016, 22:38

Nein nein. Du erstellst zwei Mal ein Spielfeld, in Main und in Move. Du brauchst aber nur ein einziges.

2
Kommentar von androhecker
25.08.2016, 10:18

Nein, Klassen vorne groß und CamelCase. Und Klasse oder Class schon gar nicht in den Name. Das ganze sollte so aussehen: (com, oder sonstige Domain tld).(example bzw deine Domain).(Programmname klein).(Programmname groß mit CamelCase) Das vordere sind deine Pakete und das letzte deine Hauptklasse in deinem Hauptpaket.

0
Kommentar von androhecker
25.08.2016, 16:43

Ist trotzdem nicht ganz passend, die Klasse implementiert nur eine Methode, das könntest du genauso gut einfach in Spielfeld setzen. Wie schon gesagt, du solltest möglichst mit realen Objekten arbeiten. Die Klasse Snake, welche die Methode move() implementiert wäre wesentlich sinnvoller.

0
Kommentar von androhecker
25.08.2016, 18:49

Klassennamen sind vorne immer noch groß, Snake und Move. Wo ist der Link zum Code?

0

Was möchtest Du wissen?