Snake Klon [Fertig - Vorstellung per Github und YT-Video + Bitte um Feedback]

Hallo,

Ich möchte euch meinen Snake Klon vorstellen, welchen ich in Java geschrieben habe.
Dieses ist mein 1. komplett fertiggeschriebenes Spiel überhaupt. Vorher hatte ich zwar mal einen Moorhuhn und SpaceInvander Klon geschrieben, aber diese waren nur maximal halb fertig (ohne Menü, wenig Inhalt) und zudem so gut wie garnicht OO-getreu und eher dreckig umgesetzt („Hauptsache es funktioniert“).

Mit diesem Projekt hatte ich das Ziel, möglichst OO-getreu und sauber zu programmieren (Design-Patterns habe ich nicht verwendet).

Ich veröffentliche dieses Projekt einerseits, um anderen Neugierigen einen Einblick zu geben und um zu zeigen, wie ich dies und jenes umgesetzt habe. Zum anderen erhoffe ich mir das ein oder andere Feedback zu meinem Quellcode. Mich würde sehr intressieren, wie ihr meinen Codeaufbau findet. Ist er akzeptabel? Auch von der OO her? Oder habe ich so gut wie alles falsch gemacht, was man nur falsch machen kann? Was hättet ihr anders gemacht?
Hierbei würde mich insbesondere Intressieren:

  • Ist es OO-getreu / gut, dass die Referenzvariable „gui“ in der Klasse „App“ static ist? Ich bekam es irgendwie nicht anders hin. In der main wollte ich nur 1 Objekt erstellen, welche dann den Stein ins Rollen bringt.
  • Die Umsetzung der Spielmenüs

Damit ihr mein Projekt besser bewerten könnt, anhanddessen was ich (eurer Meinung nach) schon können muss, teile ich euch Infos zu meiner Person mit:

  • Informatikstudent im (ab Oktober) 5. Semester
  • Programmieren gelernt im 1. Semester, also vor fast 2 Jahren begonnen

Features des eigentlichen Snake Klons:

  • Startmenü
  • Pausenmeü
  • Wand/Schlangen Kollisionserkennung
  • 3 Schwierigkeitsgrade

Im Anhang befindet sich die entsprechende .jar Datei. Wer diese nicht öffnen möchte, kann sich auch ein Gameplayvideo von mir auf Youtube ansehen, bei dem ich alle Features kurz vorstelle.

Quellcode auf Github:

Die .jar Datei:

Youtube-Video:

//youtu.be/8RycA6sosFo

Hallo,

bitte nicht böse sein, aber ich schreib einfach mal auf was mir einfällt:

1 ) Die App-Klasse benötigt kein Attribut “gui” du kannst einfach schreiben new GUI().createGameWindow();
2) In der Gui-Klasse steht viel drin. Zu viel. Ich würde die jeweiligen Menüs in eigene Klassen auslagern. ggf mit einem gewissen “State”-Interface. Also bsp. MenuState,GameState,OptionState.
3) e.getKeyCode()==27 Woher kommt hier die magic number 27? Da wäre es doch besser die Konstanten zu benutzen. KeyEvent.VK_ESCAPE.
4) Sowohl die Snake-Elemente sowie das Futter sind Spiel-Elemente. Hier könnte man über eine gemeinsame Oberklasse (also Vererbung) Code sparen bzw. wiederverwenden. Hier bietet sich vielleicht dann auch eine List anstatt List an.
5) private boolean snakeUp = false;private boolean snakeDown = false; private boolean snakeLeft = false;private boolean snakeRight = true; Hier könnte man ein Direction-Enum schreiben, dort werden jeweils ein “Richtungsvektor” sowie die “verbotene Richtung” gespeichert. => Weniger If-Else-Kaskaden.
6) snakeGame.getDifficultyLevel_thread() Ich weiß ich bin fies, aber “_” verwendet man üblicherweise nicht bei Methodennamen.
7) Ich hab das Spiel nicht gespielt, aber laut Code ist es mögl., dass Futter auf der Schlange “spawn”. Das ist doch n bissl unschön oder? Ich fände es besser, wenn nur freie Felder dafür in Betracht gezogen werden.
8) if(snake.isSnakeUp()==true) == if(snake.isSnakeUp())
9) private String menuSelection = "Start game"; Hier vielleicht wieder ein eigenes Enum schreiben. String gefällt mir hier weniger.

Bitte nimms mir nicht übel, das ist mir jetzt so beim 2-3 Mal überfliegen aufgefallen.

Danke für deine Kritik.

[QUOTE=Sunshine]

Bitte nimms mir nicht übel, das ist mir jetzt so beim 2-3 Mal überfliegen aufgefallen.[/QUOTE]

Ganz im Gegenteil, ich erwarte ja Kritik, damit ich weiß, was ich falsch gemacht habe oder hätte besser machen können. Wenn dir oder anderen noch mehr Kritik einfällt, dann bitte ich euch dies hier ruhig alles reinzuschreiben! :wink:

Deine Kritik beruhigt mich aber schon etwas, da deine Kritikpunkte (meiner Meinung nach) alles eher Details sind (bis auf 2) und 4) vielleicht).

Die Dotfiles und bin-Folder gehören IMHO nicht ins Repository.
Nicht jeder nutzt Eclipse.