Klickgame ala "Harveys neue Augen" oder "Edna bricht aus" in Java programmieren... Fragen zu Kleinigkeiten.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Klickgame ala "Harveys neue Augen" oder "Edna bricht aus" in Java programmieren... Fragen zu Kleinigkeiten.

    Hey Leute,
    da ich in den letzten Tagen beide der oben genannten Spiele gespielt habe und ich dieses Prinzip einfach liebe, habe ich mir gedacht soetwas in der Art, vllt etwas kleiner, selber zu porgrammieren.
    Habe mir auch schon überlegt wie in etwa ich es anstellen könnte.
    Nun habe ich mehrere allgemeine und auch spezifischere Fragen.
    1. Würde es sich lohnen so ein Spiel in Java zu Programmieren, oder sollte ich dafür eher eine andere Sprache lernen?(kann inmoment nur Java)

    2. Wie könnte ich es machenl, dass der Charakter nur auf dem Fußboden läuft und nicht auch auf den Gegenständen welche auf dem Hintergrund gemalt sind?

    Das wars erstmal an Fragen, wenn ich das Projekt echt starten sollte werden aber sicherlich noch mehr auftreten.

    LG Henrik
  • Spiele in Java zu programmieren, ist schon wieder eine Sache für sich.
    Normalerweise nutzt man dann doch eher die Sprache C/C++, weil es effektiver in vielen Bestandteilen der Programmierung
    ist, als in Java. Wer aber eine Programmiersprache kann der wird sich in einer anderen schnell zurecht finden, da das Grundprinzip
    das selbe ist.
    Doch ich denk bei deinem Vorhaben lässt sich das auch in Java realisieren.

    Auf Grund deiner zweiten Frage nehme ich mal an das du noch nicht so viel Erfahrung in der Programmierung hast.

    Wie gut bist du den in Java überhaupt?

    Kannst du die grundlegenden Dinge der OOP?
    Hast du GUI-Erfahrung?
    Wenn nein, dann verzichte auf dieses Projekt und mache dich mit den Grundelementen der Programmierung
    vertraut.

    Für dein Spiel:
    Du solltest dir erstmal überlegen welche Objekte du für dein Spiel brauchst und was für
    Eigenschaften und Fähigkeiten haben diese.
    In welcher Weise sind sie abhängig bzw. unabhängig voneinander sind.
    "Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer."
  • Ich habe Erfahrung in Java, und auch mit GUI's in Java programmiert. ( Taschenrechner aus Tutorial, eine Installer welcher .classes in .jars packt usw.)

    Ich hatte mir überlegt, das ich für alle Räume, Objekte(in den Räumen), und Items fürs Inventar eigene Klassen erstelle in denen denn entweder vorher oder per Konstruktor alles Infos und Variablen für diesen Raum, Objekt, Item, gespeichert werden... + die Funktionen die den Gegenstand betreffen.

    Für die Storyabläufe werde ich denke eine class nehmen vllt auch mehrere(in Akte aufgeteilt), für die statischen Dinge (wie Orte, Coordinaten, Namen von Charakteren) könnte ich ein Enum verwenden, bzw, die Namen könnten auch in die class des jeweiligen Objektes rein, was wohl schlauer wäre.
    Das Gameplay also Inventory, das Laufen und Dinge anklicken, kommt natürlich in seperate klassen.
    Jemanden der die Grafiken macht hätte ich auch...

    Genug Ahnung?
  • Edna bricht aus habe ich auch gespielt. Cool gemacht, allerdings war der Resourcenverbrauch extrem. Es ist schon eine Kunst ein 2D-Adventure so lahm zu machen.

    Egal
    Du kannst ein Grafikadventure 100% mit Java machen. Ist eigentlich ganz nett, da es dann auch gleich auf Linux und Mac läuft und nicht nur auf Windows. Es gibt aber auch eine Alternative, wenn du nicht bei 0 anfangen willst.

    Dieser Artikel sollte dich brennend interessieren:
    pro-linux.de/artikel/2/1544/gr…ntwickeln-mit-sludge.html
  • Wenn du Bock hast ein Adventure zu programmieren, solltest du dich entweder mit Java2d beschäftigen oder mit einer Grafikschnittstelle wie OpenGL, dafür gibts auch ein Java Binding (jogl oer LWjGL) Wenn du keine Lust hast von unten anzufangen, kannst du natürlich auf fertige 2D Engines zurückgreifen.

    Java 2D: java.sun.com/products/java-media/2D/index.jsp
    jogl: jogamp.org/
    LWjGL: lwjgl.org/

    Zu deiner ersten Frage: In Java kannst du definitiv ein 2D Adventure machen!
    Deine zweite Frage verstehe ich nicht ganz. Was meinst du mit auf den Gegenständen im Hintergrund?!

    In der Regel hast du in einem Adventure eine Szene, wo sich die Figur auf vordefinierten Wegen bewegen. Die Szene besteht im einfachsten Fall aus einem statischen Hintergrund und Objekten (Grafiken) die sich hinter der Spielfigur befinden und welche die sich vor der Spielfigur befinden. Das musst du natürlich vorher definieren.
  • Henrik Martens schrieb:


    Ich habe Erfahrung in Java, und auch mit GUI's in Java programmiert. ( Taschenrechner aus Tutorial, eine Installer welcher .classes in .jars packt usw.)

    Ich hatte mir überlegt, das ich für alle Räume, Objekte(in den Räumen), und Items fürs Inventar eigene Klassen erstelle in denen denn entweder vorher oder per Konstruktor alles Infos und Variablen für diesen Raum, Objekt, Item, gespeichert werden... + die Funktionen die den Gegenstand betreffen.

    Für die Storyabläufe werde ich denke eine class nehmen vllt auch mehrere(in Akte aufgeteilt), für die statischen Dinge (wie Orte, Coordinaten, Namen von Charakteren) könnte ich ein Enum verwenden, bzw, die Namen könnten auch in die class des jeweiligen Objektes rein, was wohl schlauer wäre.
    Das Gameplay also Inventory, das Laufen und Dinge anklicken, kommt natürlich in seperate klassen.
    Jemanden der die Grafiken macht hätte ich auch...

    Genug Ahnung?
    Jo haste. War nicht bös gemeint von mir, falls du das jetzt denkst :)
    Viel Erfolg mit deinem projekt
    "Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer."
  • So schon ordentlich a coden die ersten classes (Hauptklassen für Räume Items und Objekte und jeweils ein Beispiel) sind schon fertig..

    Nun zum ersten Test mit Bildern, muss das ganzr klar auf den Bildschirm...

    Applet kommt für mich nmicht wirklich in Frage, das das ganze nicht nur im Appletviewer oder Browser laufen soll, und Frame schon garnicht.

    Also stellt sich die Frage JOGL, openGL, oder doch LWJGL?
    Was würdet ihr machen?
  • Während ich auch eine Antwort warte, mache ich mich daran eine Möglichkeit zu finden die Walkmap zu Definieren.
    Habe mal ausgerechnet, wenn ich 100 x 60 (ca. 16 zu 9 format) Punkte habe, und jeden Punkt einzeln an(true) oder aus(false) stellen muss habe ich 6000 Punkte pro Raum die ich definieren (6000 Stelliges 3-Demensionales Array (x Coordinate, yCoordinate , boolean), gehts da nicht leichter=? per Hand eintragen muss!
    Ich meine das wären 18000 Werte die ich
    habt ihr ne idee=
  • Also erstmal ist ein Array mit 6000 Elementen nicht so schlimm... Wenn es Effizient gespeichert ist, ist das nichtmal ein kilobyte. Allerdings speichert Java Boolean-Arrays nicht so effizient und braucht wohl ein byte pro boolean, was immer noch ok ist. Speichereffizienter wäre z.B. ein BitSet. Und du musst ja nicht alle Werte von Hand setzen, du setzt alle Werte standardmäßig auf False und setzt nur die erlaubten auf true, was man bestimmt auch teilweise automatisieren kann (mit geometrischen primitiven wie rechtecken, dreiecken etc.).
    Ne andere Möglichkeit die Werte zu speichern, wäre nur die Koordinaten zu speichern, die true sind. Das könnte man mit ner Hashmap oder ähnlichem realisieren. Da musst du dann halt bei jedem Klick die Hashmap durchsuchen ob die angeklickten koordinaten darin vorhanden sind.

    Vielleicht versteh ich aber auch nicht, was genau du mit Walkmap meinst ;)
  • So nochmal, falls es jemanden interessieren sollte, ich habe inmoment 15 classes, mit insgesamt über 750 Zeilen code.
    Fertig sind die Teile für Items, objekte, charaktere und räume. ausserdem habe ich cie klassen für achivements, dialoge, den player, und den SaveLoadHandler schon angefangen und einige simple funktionen geschirben.
  • Also stellt sich die Frage JOGL, openGL, oder doch LWJGL?

    Kleiner Hinweis: OpenGL ist ja ne Grafik-API die in C geschrieben ist. JOGL und LWJGL sind nur Bindings für OpenGL, sprich, wenn du JOGL oder LWJGL nimmst programmierst du schon OpenGL, wenn du OpenGL nimmst bringt dir das erst einmal wenig, da es ja C ist ;)

    Ich denke die würdet am schnellsten zu Ergebnissen kommen, wenn du die Java 2D API nimmst.

    Wenn du dein Projekt Open Source machen willst, kannst du ja ein Git Repository aufsetzen, dann kannst du unter Umständen durch Hinweise von Anderen noch mehr lernen oder vielleicht findet sich ja auch ein Mitstreiter.
  • OpenSource kommt für mich nicht in Frage, da ich gerne weiss was so wie in meinem Code steht...
    Was ganz gut wäre, wären 2-3 weitere Coder, die ein bischen was können, und Lust und Zeit haben mir zu Helfen.
    Ok, ja da hast du recht, Java2d, hab ich noch nicht dran gedacht, habe vorhin etwas mit lwjgl rumprobiert, doch würde java2d sich ja eher anbieten!
  • So wer daran interessiert ist, was ich schon alles geschrieben habe, oder interesse daran hat bei diesem Projekt mit zu arbeiten
    sollte hier mal gucken :

    github.com/AintLarry/Klickgame…asses/tree/master/classes

    SO da hätten wir:



    Charakter.java - kümmert sich um das handling aller im spiel existierenden Personen (ausser der Spieler an sich)
    CharakterExample.java - Beispiels Charakter, erbt von Charakter.java

    Item.java - kümmter sich um alle Items welche sich im Inventar befinden
    ItemExample.java - BeispielItem erbt von Item.java

    Object.java - kümmert sich um die Objekte die in den Räumen stehen, wenn sich noch nicht im Inventar sind
    ObjectExample - BeispielsObject, erbt von Object.java

    Room.java - kümmert sich um die betretbaren Räume
    RoomExample - BeispielsRausm, erbt vom Room.java

    saveLoadHandler - kümmter sich später ums Speichern und Laden, enthält momentan nur eine methode zum auslesen des ApplicationPath's

    /Edit
    Habe noch etwas in der Object.java geändert, es ist nun festgelegt, und auslesbar, welches item dem inventar hinzugefügt wird beim einsammeln des objektes
    Bei weiteren größeren änderungen werde ich hier ne Note schreiben, bei kleinen nicht unbedingt
    Edit/

    LG Henrik

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Henrik Martens ()

  • Moin Henrik,

    Ich denke du solltest mit dem Oracle Tutorial schon relativ weit kommen: docs.oracle.com/javase/tutorial/2d/

    Ich habe noch ein bisschen Feedback zu deinen Klassen:

    saveLoadHandler.java
    * Nach Java-Konevention werden Klassen IMMER groß geschrieben.
    * Da die Klasse nur statische Methoden enthält, macht es keinen SInn eine neue Instanz zu erzeugen. Von daher solltest du den Konstruktor private oder protected machen. Wenn du ihn private machst, kannst du die Klasse auf final setzen, da ja keiner mehr von ihr ableiten kann.

    Bei dem Rest bin ich mir noch nicht so ganz klar, was er so alles machen soll. Generell, solltest du Attribute/Variablen mit einem etwas aussagekräftigeren Namen belegen, als "s" ;)

    Cheers,
    Benni