# [Spielevorstellung] SnailRail



## BRoll (15. Jul 2012)

[OT]Hallo Java Forum, ich bin ganz neu hier, und will mich erstmal mit einer
Spielevorstellung vorstellen 
Ich programmiere jetzt etwa 2 Jahre mit Java und bin 18 Jahre alt. [/OT]

Snail Rail ist eins meiner ersten größeren Projekte,
man spielt eine Schnecke und hüpft in Leveln herum.
Wie gesagt ist es also ein Jump&Run Spiel, welches ich ausschliesslich 
mit Java programmiert habe. Als "fremden" Code habe ich nur die EasyOGG Jar
für das einfache abspielen von OGG Sound-Dateien gebraucht, der Rest ist
100% eigener Quelltext. 

Grafiken & Musik sind auch von mir erstellt.
Wäre toll wenn ihr das Spiel mal ausprobiert und schreibt wie es euch gefällt 

Ich habe zusätzlich noch den MapEditor miteingebaut, damit ihr eure eigene Maps
erstellen könnt.

Steuerung und alles Weitere wird in der Spielevorstellung erklärt:

*Hier kommt ihr zur richtigen Spielevorstellung + Download:*
Snail Rail

EDIT:
An alle die das Spiel getestet/gespielt haben:
Wie fändet ihr die Idee von mir einen Multiplayer einzubauen?
Ich hätte es gerne schon gleich von Anfang an gemacht,
aber mein programmierter Server funktioniert nicht richtig (er läuft im 400ms takt xD).
Ich würde gerne einen Multiplayer mit verschiedenen Spielmodis wie: Zeitrennen,
Punkterennen, Münzsammler, Survival (alle schnecken kämpfen gegeneinander mit schleimbällen)
, usw... 
Wie gefällt euch die Idee? Und gäbe es vielleicht jemand der schonmal einen Server/Client
mit Java programmiert hat und mir helfen würde?



mfg BRoll


----------



## Kr0e (15. Jul 2012)

Top! Eines der wenigen wirklich professionell wirkenden Spiele, die hier vorgestellt werden.
Sowohl das Menü, als auch die Idee mit dem Laufen an der Wand... Daumen hoch.


----------



## Fab1 (15. Jul 2012)

> Top! Eines der wenigen wirklich professionell wirkenden Spiele, die hier vorgestellt werden.
> Sowohl das Menü, als auch die Idee mit dem Laufen an der Wand... Daumen hoch.



Was will man mehr sagen. Super Arbeit!


----------



## Network (15. Jul 2012)

Den oberen schließe ich mich an. 
Bei mir klemmts ein bischen mit der Steuerung. Festsaugen per Leertaste geht irgendwie immer nur mit einem bestimmten Timing.

Gruß
Net

PS: Ein Multiplayer fände ich jetzt persöhnlich nicht unbedingt das, was das Spiel braucht. Also das werde ich niemals online spielen. Aber das ist auch nur meine "persöhnliche" "Vorstellung".


----------



## BRoll (15. Jul 2012)

Network hat gesagt.:


> Den oberen schließe ich mich an.
> Bei mir klemmts ein bischen mit der Steuerung. Festsaugen per Leertaste geht irgendwie immer nur mit einem bestimmten Timing.
> 
> Gruß
> ...



Hmm.. ich habe gedacht ich hätte das Problem gelöst?
Naja, anscheinend kanns wohl doch noch passieren, dass wenn man zu lange
auf der Taste bleibt die Schnecke gleich wieder loslässt. 
Vielleicht liegts aber auch an den Tastendruckeinstellungen?
Naja ich werde demnächst schauen ob ich das noch besser hinbekomm.

Ok, ich stelle mir einen Multiplayer schon ganz lustig vor, wenn da mehrere Schnecken
auf einer Map rumhüpfen, und sich gegenseitig mit Schleimbällen abschiessen.
Habe mir das so ähnlich vorgestellt wie ein einfaches Teeworlds (ist ein lustiges und kostenloses
Onlinespiel)

Bin mal gespannt ob einer alle Level schafft


----------



## Kr0e (15. Jul 2012)

Zu deiner Frage bzg. Netzwerk:

Das ist alles in allem keine triviale Erweiterung. Man müsste sich hier die Frage stellen "Wie komplex will ich das ganze angehen ?". Wenn man einen simplen Netzwerkmodus macht mit einem Quake 3 Netzwerkmodell (Packete as-fast-as-possible versenden), sollte es ansich einfach gehen. 

Allerdings könnten hier Input-/Visual response lags auftreten. Also du drückst Vorwärts und der Befehl dauert ca. 150 ms z.b. bis er wirklcih eine Auswirkung zeigt (Aufgrund der Latenzen im Interner z.b.).
Dies führt zu einem sehr unintuitiven Spielerlebnis. Paradebeispiel wäre hier z.b. CSS (bzw. Source network engine allgemein). Dort werden zahlreiche Tricks verwendet, um genau solche Probleme zu umgehen.

Wenn du hier mehr wissen willst, schrebi mir mal ne PM. Hab sowas in der Art neulich gemacht für die Uni....


Solange du mit dem einfachen Prinzip leben kannst, würde ich dir auch dieses empfehlen.

PS: Beim einfachen System dann UDP für die Positionspakete (Rohdaten) und TCP für wichtige Events, Mapladen, Chat, Input vom Clienten, Todesnachrichten etc.


----------



## BRoll (15. Jul 2012)

Kr0e hat gesagt.:


> Zu deiner Frage bzg. Netzwerk:
> 
> Das ist alles in allem keine triviale Erweiterung. Man müsste sich hier die Frage stellen "Wie komplex will ich das ganze angehen ?". Wenn man einen simplen Netzwerkmodus macht mit einem Quake 3 Netzwerkmodell (Packete as-fast-as-possible versenden), sollte es ansich einfach gehen.
> 
> ...



Solche Gedanken sind mir auch schon durch den Kopf gegangen,
und da ich mich nicht so gut damit auskenne würde mir die
einfachere Variante auf jedenfall erstmal reichen.
Ich will eigentlich nur eine einfache  1 Server zu  8 Clienten Verbindung haben,
die schnell genug läuft damit das Spiel noch flüssig läuft. 
Online muss auch erstmal nicht unbedingt, ich würde das Spiel halt gerne
mit Freunden zusammen mal mit einer LAN Verbindung spielen.

Ich schreib dir ganz bestimmt demnächst eine PM, vielleicht willst du ja
mal meinen Quellcode für den Server sehen? Bis jetzt hat keiner gewusst
dem ich den Quellcode gezeigt hatte warum die Verbindung so langsam ist (wie gesagt 400ms takt).
Das würde mir schon genügen den Grund dafür zu wissen.


----------



## Kr0e (15. Jul 2012)

Kein Problem, schreib mir einfach und dann schauen wa mal, woran es liegt. Hab ab Mi Sem. Ferien  Insofern...

Bis dahin:

https://github.com/Kr0e/gruppe33

War unser Abschlussprojekt für das 2te Semester. Bomberman in Java (Netzwerkfähig). Falls du iwas daraus brauchst, bedien dich. Ist Open Source... Vlt ist auch der Netzwerkpart interessant ?

PS: Bzg. der Geschwindigkeit... Es gibt eine Socketfkt, die heißt "TcpNoDelay". Per default ist die dummerweise FALSE. Das bedeutet TCP Delay. Auch zu finden unter dem Begriff "Nagle"-Algorithmus.
Der sollte bei Spielen ausgemacht werden. Im Prinzip macht der Algo. folgendes: Wenn Daten zum Senden bereit sind und diese Daten eine gewisse Marke unterschreiten, wartet der Algo noch weitere 100 - 300 ms (Impl. abhängig) bis er wirklich verschickt. TCP versucht so Bandbreite auf Kosten der Latenz zu sparen. Wie gesagt, das kann man ohne Probleme ausschalten. Ist einfach eine Socketoption.


----------



## Firephoenix (15. Jul 2012)

Kurz mal angespielt, sieht echt gut aus:
-Schöne Grafik
-Angenehmes Menü (keine Standard-Buttons)
-Angenehme Sounds (und Soundfeedback bei Aktionen)
-Das Springen wirkt teilweise etwas hart (besonders wenn man bei niedriger Decke dauerhüpft)
-Die Idee mit dem Festsaugen an der Wand ist cool

Die Webseite von dir schaut auch gut aus (schau mal nach deinem Impressum - scheint down zu sein)

Basiert das Spiel eigentlich auf AWT/Swing?

Gruß


----------



## BRoll (15. Jul 2012)

Firephoenix hat gesagt.:


> Kurz mal angespielt, sieht echt gut aus:
> -Schöne Grafik
> -Angenehmes Menü (keine Standard-Buttons)
> -Angenehme Sounds (und Soundfeedback bei Aktionen)
> ...



Oh das mit dem Impressum muss ich noch ändern, hatte vor kurzem Serverwechsel,
dadurch haben sich die Links geändert.
(Danke für den Hinweis)

Also es basiert nicht auf AWT bzw Swing, ich habe mir alle
Grafikkomponenten selbergeschrieben (also durch Mausabafagen
und Bildern). Ich benütze nur die Standard Grafik-API also 
einfach die Paint-Methode, darauf bauen dann meine
GUI-Elemente auf. Ist zwar nicht ganz so einfach da man viel
mit der Positionierung arbeiten muss, aber ich finde es sieht besser aus
bzw. man hat mehr grafische Freiheit.

Die Website hab ich auch selber gemacht, ist aber schon älter.
Also bei GAMES sind nur kleinere Kurzspiele mit Highscores
die ich vor ca. 2 Jahren geschrieben habe. Nur die Projekte
sind aktuell und auch "richtige" Spiele. 

Zum harten Springen:
Ja da hast du Recht, wenn die Schnecke in einem niedrigen Gang läuft und dann springt
wackelt der ganze Bidlschirm ganz schön hin und her. Ist halt durch die Absprunggeschwindigkeit
und den harten Stoß an der Decke. Wüsste nicht wie/was ich daran ändern kann, man sollte
halt lieber nicht die Sprungtaste in niedrigen Gängen gedrückt halten, sonst wird man ganz schön durchgeschüttelt


----------



## ...ButAlive (15. Jul 2012)

Hallo BRoll,
Dein Spiel sieht echt gut aus, nur hab ich unter Linux ein paar Probleme. Prinzipell läuft es aber:

1. Die Save-Datei kann nicht angelegt werden. Unter Linux gibt es c: nicht. Wäre besser wenn du es vielleicht im User-Home ablegen würdest. Mit 
	
	
	
	





```
System.getProperty("user.home")
```
 kannst du den Pfad Plattformübergreifend abfragen.


```
java.io.FileNotFoundException: C:\Temp\SnailSave.txt (No such file or directory)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(FileInputStream.java:120)
	at java.io.FileInputStream.<init>(FileInputStream.java:79)
	at java.io.FileReader.<init>(FileReader.java:41)
	at LoadandSave.checkSaveFile(LoadandSave.java:112)
	at Hauptmenu.<init>(Hauptmenu.java:44)
	at Main.<clinit>(Main.java:34)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:247)
	at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
```

2. Irgendwie scheint es, als gibt es mit den Sounds ein Problem. Wenn ich dein Programm starte kommt:


```
javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 22050.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian not supported.
	at com.sun.media.sound.DirectAudioDevice$DirectDL.implOpen(DirectAudioDevice.java:492)
	at com.sun.media.sound.DirectAudioDevice$DirectClip.implOpen(DirectAudioDevice.java:1278)
	at com.sun.media.sound.AbstractDataLine.open(AbstractDataLine.java:107)
	at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1059)
	at com.sun.media.sound.DirectAudioDevice$DirectClip.open(DirectAudioDevice.java:1149)
	at Sound.loadSound(Sound.java:136)
	at Sound.loadSounds(Sound.java:122)
	at Main.init(Main.java:94)
	at Main.main(Main.java:57)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
```

Im Menu höre ich noch Musik, im Spiel selbst kommt gar kein Ton mehr. Da läuft immer nur:


```
java.lang.Exception: Unable to open the sourceDataLine: javax.sound.sampled.LineUnavailableException: line with format PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian not supported.
```

durch die Konsole. 

Mein System: Fedora 17 mit Oracle JDK 1.6.0_32.


----------



## BRoll (15. Jul 2012)

Oh, ok ich hab es bis jetzt nur auf Windows getestet.
Danke für den Tip mit User.Home, das werde ich dann verwenden.

Das mit den Sounds verstehe ich nicht, die Sounds sind .wav Dateien
die ich mit dem Standard AudioClip von Java einlese.

Ich weiß auch nicht was ein "little-endian not supported" bedeutet xD

Tut mir Leid dass ich dazu jetzt nicht weiß wie man das ändern könnte,
vielleicht kennt sich hier jemand aus dem Forum besser aus.

Aber den Speicherpfad werde ich auf jedenfall verbessern.


----------



## Bile Demon (16. Jul 2012)

BRoll hat gesagt.:


> Als "fremden" Code habe ich nur die EasyOGG Jar
> für das einfache abspielen von OGG Sound-Dateien gebraucht, der Rest ist
> 100% eigener Quelltext.



Hallo BRoll,

ich kann dein Spiel hier leider noch nicht testen, aber die Screenshots sehen wirklich beeindruckend aus. Wenn das Spiel sich so verhält wie es aussieht, kann ich nur sagen: Für deine 18 Lenzen, Hut ab! Da haste sicher ne Weile dran gekaut, bis das mal stand. Der Leveleditor sieht auch nach viel Arbeit aus. Dein Spiel schau ich mir heute Abend mal genauer an.

Ich arbeite zur Zeit selbst auch (wieder mal) an einem kleinen Spiel, und ich finde es witzig, dass wir da dieselbe Basis gewählt haben: Ich verwende nur EasyOGG für die Titelmusik (weil ich keinen eigenen OGG-Decoder schreiben will/kann), ansonsten keine externen Libs, keine Frameworks, alles soweit wie möglich selbst gebaut. Ich habe festgestellt, dass EasyOGG sich nicht für sehr kurze Sounds eignet (< 100 ms), daher habe ich zumindest für die Soundeffekte doch wieder WAV verwendet.

Überhaupt frustriert mich die Performance von JavaSound sehr. Die komplette Anwendung fängt an zu ruckeln, wenn man in kurzer Zeit mehrere Soundeffekte abspielt. Wahrscheinlich liegt das am Overhead für das Starten und Stoppen der Threads im Hintergrund.


----------



## Kr0e (16. Jul 2012)

Bile Demon hat gesagt.:


> Überhaupt frustriert mich die Performance von JavaSound sehr. Die komplette Anwendung fängt an zu ruckeln, wenn man in kurzer Zeit mehrere Soundeffekte abspielt. Wahrscheinlich liegt das am Overhead für das Starten und Stoppen der Threads im Hintergrund.




Volle Zustimmung! Habe ja oben einen Link gepostet... Bomberman.. Wir haben auch JavaSound genommen und waren ebenfalls sehr enttäuscht von dem enormen Ressourenverbrauch...

Man muss hier an dieser einfach mal sagen... Java ist keine Sprache für Spiele, zumindest nicht von Haus aus. Ich empfehle definitiv Slick (2D Opengl) und OpenA(audio)L(ibray), ebenfalls in Slick einfach integriert. Das wird sonst alles nichts...

Oder man schaut über den Tellerrand und nimmt eine andere Sprache oder sogar eine Engine wie z.B. Unity. Es kommt immer drauf an, was man machen will. Aber ich habe mich schon zu oft über Java-Kinderkrankheiten geärgert. Im Bereich Multimedia ist Java einfach extremst unbrauchbar, bzw nur mit viel Arbeit. Da bieten andere System bei weitem sehr viel produktivere Lösungen...


----------



## BRoll (16. Jul 2012)

Bile Demon hat gesagt.:


> Hallo BRoll,
> 
> ich kann dein Spiel hier leider noch nicht testen, aber die Screenshots sehen wirklich beeindruckend aus. Wenn das Spiel sich so verhält wie es aussieht, kann ich nur sagen: Für deine 18 Lenzen, Hut ab! Da haste sicher ne Weile dran gekaut, bis das mal stand. Der Leveleditor sieht auch nach viel Arbeit aus. Dein Spiel schau ich mir heute Abend mal genauer an.
> 
> Ich arbeite zur Zeit selbst auch (wieder mal) an einem kleinen Spiel, und ich finde es witzig, dass wir da dieselbe Basis gewählt haben: Ich verwende nur EasyOGG für die Titelmusik (weil ich keinen eigenen OGG-Decoder schreiben will/kann), ansonsten keine externen Libs, keine Frameworks, alles soweit wie möglich selbst gebaut. Ich habe festgestellt, dass EasyOGG sich nicht für sehr kurze Sounds eignet (< 100 ms), daher habe ich zumindest für die Soundeffekte doch wieder WAV verwendet.



Ansich fande ich das Projekt nicht wirklich so schwer, da ich das ganze Programm
mir vorher im Kopf überlegt habe, konnte ich die schwierigen Punkte und Problemstellen
so gleich besonderes ausführlich behandeln.
Mein Problem ist, ich weiß meistens alles wie ich es genau umsetzen kann/werde,
bloß fehlts mir dann an Erfahrung um dafür die besten Elemente zu benutzen.
Deshalb programmier ich so gut wie alles selber, da hab ich einen genauen Überblick
was es wirklich bewirkt (und man lernt natürlich wie man Anwendungen auf ihre elementare 
Bestandteile zerlegt). 
So von der Arbeitsdauer sag ich mal ca. einen Monat, obwohl ich an manchen Tagen
richtig viel gemacht habe, und dann mal wieder 3 Tage nichts 
Mittlerweile ist auch mein Problem dass meine Projekte immer größer werden, weil ich
mich verbessern will im Programmieren, und ich so schnell neue Sachen dazulerne,
dass ich zwischendrin das halbe Projekt neuer und besser umschreibe. 

Und genau so ein Problem war bei mir die Soundausgabe: Ich hab die Sounds, weiß wann sie abgespielt
werden, fehlt nur noch wie mans macht. Mit dem normalen JavaSound hängt sich oft das Spiel kurz auf, oder Sounds werden manchmal nicht abgespielt bei zu oftem aufrufen (zb. bei Schüsse kann man JavaSound vergessen ).  Dann hab ichs Internet durchsucht und EasyOGG gefunden,
da sowieso Lieder im WAV Format das Projekt unnötig aufblähen.
Für die Sounds verwende ich jetzt Clip und nicht AudioClip, damit finde ich erreicht man
bessere Ergebnise.


----------



## Bile Demon (16. Jul 2012)

1 Monat ist wirklich wenig, dafür dass das Programm so umfangreich aussieht, mit den ganzen Grafiken, Menüs, dem Editor, dem Itemshop, etc. Überrascht mich. 6 Monate hätte ich mir jetzt eher vorstellen können, vor allem weil du selbst sagst, dir fehlt noch Erfahrung. Wenn jemand nun genau wüsste was zu tun ist, dann wäre 1 Monat immer noch relativ kurz, denke ich.

Was verstehst du unter "normalem JavaSound"? Clip gehört doch zur JavaSound-API. Das ist zwar meines Erachtens tatsächlich die bessere Wahl als AudioClip (von java.applet), aber die Performanceprobleme habe ich da auch. Wie du schon selbst festgestellt hast, für sehr oft hintereinander abgespielte Sounds (Schüsse etc.) hängt das Spiel dann immer ganz kurz. Vielleicht sollte ich mir doch mal ein paar Audiolibs beilegen.

Mein Problem mit diesen ganzen Game-Frameworks ist, dass ich nicht gewillt bin, dutzende megabytegroße Libs an ein Spiel dranzuhängen, das selbst (vom Code) nur 400 kbyte groß ist. Da würde ich mich ja fühlen als wäre mein Spiel nur ein kleines Skript für eine fertige Spiele-Engine, und ich rufe nur noch start(), stop(), jump() etc. auf


----------



## Noisefever (16. Jul 2012)

Ich finde das Spiel auch sehr gelungen, für dein Alter wirklich respektabel!
Die Steuerung ist allerdings wirklich verbesserungswürdig. Auch den Sprung würde ich nicht so ruckartig enden lassen. Bleibt man auf der Sprungtaste wirkt das ganz schnell komisch. Das mag eine persönliche Vorliebe sein, aber ich würde auch nur 1x Springen bei gehaltener Taste.

Der Sound hat mich bei meiner "Engine" etliche frustrierte Stunden gekostet. Ich habs letzlich hinbekommen, manage aber im Prinzip alles selbst, inklusive dem Abspielen Byte für Byte in einem Thread. Mit Clip.Play() wirst du möglicherweise niemals glücklich werden. Den Code dafür könntest du haben wenn du willst, müßtest ihn halt vermutlich noch anpassen.
Allerdings glaub ich daß du am besten fährst wenn du eine der populären Libs nimmst.


----------



## BRoll (16. Jul 2012)

Bile Demon hat gesagt.:


> 1 Monat ist wirklich wenig, dafür dass das Programm so umfangreich aussieht, mit den ganzen Grafiken, Menüs, dem Editor, dem Itemshop, etc. Überrascht mich. 6 Monate hätte ich mir jetzt eher vorstellen können, vor allem weil du selbst sagst, dir fehlt noch Erfahrung. Wenn jemand nun genau wüsste was zu tun ist, dann wäre 1 Monat immer noch relativ kurz, denke ich.



Ja ich weiß dass es sich wenig anhört, aber ich hab das ganze Programm in meinem Kopf,
und muss es dann nur noch hinschreiben, ein paar Sachen testen und vielleicht
noch was umändern, aber ansonsten steht die Struktur von Anfang an halt.
Was noch dazukommt, dass ich alle Sprites und Lieder selber gemacht habe,
aber das nicht zum ersten Mal, deshalb bin ich in dieser hinsicht auch ziemlich schnell.

Durch die fehlende Erfahrung versuch ich halt alles selber zu machen und keine Libs verwenden,
sondern alles aus Grundfunktionen aufzubauen. Das spart mir dann auch viel Kompatibilitätsprobleme
beim programmieren. 

Meistens arbeite ich an mehreren Projekten abwechselnd/gleichzeitig, keine Ahnung wie ich das alles schaff. Man fängt halt mal so langsam an, dann steht das Grundgerüst da. Dann denkt man sich nichts
böses arbeitet munter weiter und plötzlich sinds schon 40 Klassen xD (so gehts mir meistens).
Dann denkt man sich schon hinterher wie man so viel schreiben konnte in so kurzer Zeit 



Bile Demon hat gesagt.:


> Was verstehst du unter "normalem JavaSound"? Clip gehört doch zur JavaSound-API. Das ist zwar meines Erachtens tatsächlich die bessere Wahl als AudioClip (von java.applet), aber die Performanceprobleme habe ich da auch. Wie du schon selbst festgestellt hast, für sehr oft hintereinander abgespielte Sounds (Schüsse etc.) hängt das Spiel dann immer ganz kurz. Vielleicht sollte ich mir doch mal ein paar Audiolibs beilegen.
> 
> Mein Problem mit diesen ganzen Game-Frameworks ist, dass ich nicht gewillt bin, dutzende megabytegroße Libs an ein Spiel dranzuhängen, das selbst (vom Code) nur 400 kbyte groß ist. Da würde ich mich ja fühlen als wäre mein Spiel nur ein kleines Skript für eine fertige Spiele-Engine, und ich rufe nur noch start(), stop(), jump() etc. auf



Ja ich verwende Clip von Java, da passieren die Soundfehler fast nie (auf jedenfall bei mir).
Jo also Game-Frameworks habe ich noch nie was gesehen was ich wirklich benutzen würde,
aber meistens verstehe ich die Dinger eh nicht, da programmier ichs einfach mal schnell selber,
ist zwar dann vielleicht nicht so gut, aber es ist selber gemacht und nicht so groß.


----------



## Kr0e (16. Jul 2012)

Bile Demon hat gesagt.:


> Mein Problem mit diesen ganzen Game-Frameworks ist, dass ich nicht gewillt bin, dutzende megabytegroße Libs an ein Spiel dranzuhängen, das selbst (vom Code) nur 400 kbyte groß ist. Da würde ich mich ja fühlen als wäre mein Spiel nur ein kleines Skript für eine fertige Spiele-Engine, und ich rufe nur noch start(), stop(), jump() etc. auf




Das halte ich für eine äußerst merkwürdige Einstellung. Wenn du ein Baumhaus bauen würdest, würdest du dann auch erst den Hammer erfinden und die Nägel gießen ? Viele denken "oh eine Engine, dann muss ich ja nur noch Drag&Drop-Like die Komponenten zusammenklicken".

Außerdem: Du benutzt ja auch die Java Standardlibrary. Zugegeben, die musst du nicht ausliefern, aber dennoch benutzt du sie. Ich denke nicht, dass du deine eigenen Klassen für Listen/Maps etc. schreibst. Das wäre das Reinvent-The-Wheel prinzip und hat allerhöchstens noch was im Hobbykeller zu suchen.

Ich kann aus eigener Erfahrung nur sagen, dass Engines die Produktivität und die Kreativität steigern. Wenn man sich absichtlich dagegen entscheidet, dann halte ich das nur für Lernzwecke angebracht. Wenn man allerdings zielorientiert arbeitet, kommt man an Engines/Frameworks nicht rum. 

Bestes Beispiel ist ja gerade der Sound... Die meisten Engines haben solche Probleme perfekt gelöst und bietet auch noch zahlreiche Filter dazu an.

Ein weiteres Beispiel ist Blender oder jedes andere Modellprogramm. Du kannst mir nicht erzählen, dass du die Polygone deines Models per Hand ausm Kopf in die Datei schreibst, nur weil es mit Blender lediglich ein bisschen klicken wäre.


Richtige Projekte, GROßE Projekte, sind auch mit Engines und Frameworks enorm umfangreich.

Aber klar es geht natürlich immer um das Vorhaben. Ein kleines 2D Spiel mit niedrigen Anforderungen ist mit Java noch am unproblematischsten. Aber auch im 2D Bereich gibt es sehr viele bessere Varianten..

Unity, Flash... z.b.


----------



## Firephoenix (16. Jul 2012)

Slick2d wäre dann sicherlich einen Blick für dich Wert, etwas Einarbeitungszeit muss man einplanen, Slick2d ist aber gut aufgebaut, und zwingt einen nicht dazu, dass komplette Framework zu verwenden (du kannst z.b. nur die upate und render-methoden nutzen und deine eigenen Sprites und Tilemaps bauen, oder du verwendest die vorgegebenen Animationen von Slick - oder schreibst dir eigene  ).

Das Rendering mit Slick ist teilweise aber wesentlich angenehmer als mit reinem Java per Awt/Swing.
Allerdings bringt Slick2d keine gui-elemente wie buttons mit, dafür könnte man dann z.B. auf TWL zurückgreifen (erfordert auch einarbeitungszeit, ist dann aber zum Teil deutlich anpassbarer als Oberflächen mit Boardmitteln).

Gruß


----------



## BRoll (16. Jul 2012)

Ja du hat schon recht Kr0e, aber ich verwende solche Engines noch nicht
weil ich erstmal verstehen will was die genau machen.
Wenn man immer nur jump() aufruft und dann der Spieler hüpft weiß man hinterher
immer noch nicht was da genau passiert (zb. eine x/y verschiebung plus geschwindigkeitsänderung).
Deshalb versuch ich noch so viel selber zu machen wies geht, damit ich mir
vorstellen kann was da passiert, und mir auch mal helfen kann wenn es eine bestimmte
Funktion in einer Engine nicht gibt. 
Ich schreib mir meistens dann universelle klassen die ich in mehreren Projekten verwende,
die ähnlich wie eine einfache Engine funktionieren.

Klar muss man den Hammer nicht neu erfinden, aber manche müssen ihn erstmal selber zusammenbauen
um zu wissen mit welchem Ende man zuschlagen muss. Natürlich wird man ihn dann beim zweiten
Verwenden nicht mehr zerlegen


----------



## Kr0e (16. Jul 2012)

Grandioses Sinnbild =) Ich stell mir grad jemanden vor, der mit dem Stiel des Hammers Nägel reinhaut 

Aber Slick2D wäre kein Nachteil. Ist keine Engine sondern mehr ne kleine Lowlevel Library und äußerst praktisch.


----------



## Bile Demon (16. Jul 2012)

Kr0e hat gesagt.:


> Das halte ich für eine äußerst merkwürdige Einstellung. Wenn du ein Baumhaus bauen würdest, würdest du dann auch erst den Hammer erfinden und die Nägel gießen ? Viele denken "oh eine Engine, dann muss ich ja nur noch Drag&Drop-Like die Komponenten zusammenklicken".



Hallo Kr0e,

versteh mich nicht falsch, für ein großes Projekt, und sowieso wenn es um 3D ginge (was in meinem Fall nicht zutrifft) würde ich dann wohl auch irgendwann auf Frameworks zurückgreifen, weil ich sonst Monate damit zubrächte damit man auf dem Bildschirm überhaupt mal was bewegtes sieht.
Aber schon allein für den Lerneffekt den du ansprichst, weil es nicht schadet, wenn man am Anfang mehr von Hand macht, und weil meine Java2D-Versuche nicht sooo umfangreich sind, verzichte ich im Moment darauf. Wie gesagt, ich versuche (noch) möglichst viel alleine zu machen. Aber bevor ich meine Arbeit ein zweites Mal ausprogrammieren müsste, würde ich mir das lieber sparen und gleich auf ein Framework setzen.

Und richtig, die Java Standard Libraries muss ich nicht selbst ausliefern, das ist der Unterschied. Ich muss ja auch kein Betriebssystem mit ausliefern, auf dem die JVM läuft. Da muss man für sich wohl eine Grenze ziehen. Mich stört eben einfach der Gedanke, wenn ich mein Spiel mit 99% fremdem Code ausliefern muss, damit meine 1% damit laufen können. Muss man nicht verstehen, ist meine Einstellung dazu.


----------



## BRoll (16. Jul 2012)

Kr0e hat gesagt.:


> Grandioses Sinnbild =) Ich stell mir grad jemanden vor, der mit dem Stiel des Hammers Nägel reinhaut
> 
> Aber Slick2D wäre kein Nachteil. Ist keine Engine sondern mehr ne kleine Lowlevel Library und äußerst praktisch.



Ja beim Hammer passts jetzt nicht so ganz 

Ich würds schon gerne mal probieren, aber ich schaffs meistens nicht solche
Sachen in mein Projekt zu importieren, bzw. bräuchte ich wahrscheinlich ewig mich
da rein zuarbeiten, weil mir schon viele Fachwörter noch fremd sind.
Werds aber sicher mal probieren.


----------



## Plopo (16. Jul 2012)

Bei mir startet die Jar Datei nicht,


```
Exception in thread "main" java.lang.ExceptionInInitializerError
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:56)
Caused by: java.lang.IllegalArgumentException: No line matching interface Clip supporting format PCM_SIGNED unknown sample rate, 16 bit, stereo, 4 bytes/frame, big
-endian is supported.
        at javax.sound.sampled.AudioSystem.getLine(Unknown Source)
        at javax.sound.sampled.AudioSystem.getClip(Unknown Source)
        at Sound.loadSound(Sound.java:134)
        at Sound.<init>(Sound.java:22)
        at Main.<clinit>(Main.java:32)
        ... 3 more
```

Habe Java 6 build 29 installiert.
Betriebssystem Windows 7 Home Premium x64.

PS: Der Map Editor funktioniert.


----------



## Kr0e (16. Jul 2012)

Und wieder einmal ist das Problem hier anscheinend JavaSound...


----------



## Apo (16. Jul 2012)

Finde das Spiel auch gut.

Das Design des Menus ist schick und sehr praktikabel.
Der Umfang ist auch sehr gut gegeben.
Die Grafiken ingame sind auch ganz gut und gegen das Spielprinzip kann man ja nicht viel sagen. Die Idee mit dem Wandklettern ist immer wieder gut und wurde hier auch schön umgesetzt.
Sehr nette Idee mit dem ingameshop


Verbesserungswünsche:
- wie schon häufig im Thread angesprochen ... das Springen bzw halten der Schnecke. Finde ich schon schwierig. Eine Möglichkeit wäre: 2 Tasten: eine fürs Springen und eine fürs Anhaften.
- kurze Erklärung wie die Tastenbelegung ist. Womit schieße ich? Den Rest habe ich gleich rausgefunden.
- besseres Feedback warum man 1 oder 2 Sterne anstatt 3 bekommt. Bei Level 1 weiß ich nicht, warum ich keine 3 Sterne bzw volle Punktzahl erhalten habe, obwohl ich alle Sterne eingesammelt habe. Zählt die Zeit auch oder die Schritte?


----------



## Noisefever (16. Jul 2012)

Also ich würde heute NIE WIEDER eine eigene Engine coden! Meine Einstellung war auch: dabei lernt man ja was. Na klar, man lernt aber Sachen die man im Grunde nie wieder braucht. Es sei denn man möchte Lowlevel Enginecoder werden. Strebt man aber an Spieleentwickler zu sein, dann sollte man sich auch ums Spiel kümmern, nicht um die Technik dahinter. Um insgesamt einen guten Programmierstil zu entwickeln, muß man nicht alles gemacht haben (ganz davon abgesehn daß zu einem guten Programmierstil gehört externe Libs zu verwenden anstatt alles neu zu machen).

Ich kann nur sagen: aus heutiger Sicht hab ich die Zeit für die Engine verschwendet und das Spiel, mit der sie groß geworden ist, ist dabei auf der Strecke geblieben. Technisch gut, spielerisch ziemlich mau. (Wens interessiert: Fidget  Noisefever )

Und bei all dem Aufwand den ich da rein gesteckt hab, schaffe ich es einfach nicht sie nach nur 2 Spielen fallen zu lassen. Obwohl es wirklich viel besser wäre einfach eine vorhandene zu nehmen. Die können nämlich all das und noch viel mehr.


----------



## Bile Demon (16. Jul 2012)

Noisefever hat gesagt.:


> Ich kann nur sagen: aus heutiger Sicht hab ich die Zeit für die Engine verschwendet und das Spiel, mit der sie groß geworden ist, ist dabei auf der Strecke geblieben.



Klingt da nicht ein kleines bisschen Stolz mit, dass man das selbst hinbekommen hat? Und wenn es hundert Frameworks gibt, die das besser machen als deine Engine, so ists doch trotzdem ein tolles Gefühl, wenn man von sich sagen kann, dass das alles Eigenarbeit ist. Es ist beruhigend zu wissen, dass ich es kann wenn ich will. Also mir gehts da so. Der Weg ist das Ziel. Da ich kein Grafiker bin, wird mein Spiel sowieso kein Crysis 4, da kann ich auch bei der Engine Abstriche machen ohne dass es weh tut 

Mal davon abgesehen seh ich das genauso: Einmal reicht mir. Beim zweiten Mal kann ich auf das Grundzeug verzichten.


----------



## BRoll (16. Jul 2012)

Apo hat gesagt.:


> Verbesserungswünsche:
> - wie schon häufig im Thread angesprochen ... das Springen bzw halten der Schnecke. Finde ich schon schwierig. Eine Möglichkeit wäre: 2 Tasten: eine fürs Springen und eine fürs Anhaften.
> - kurze Erklärung wie die Tastenbelegung ist. Womit schieße ich? Den Rest habe ich gleich rausgefunden.
> - besseres Feedback warum man 1 oder 2 Sterne anstatt 3 bekommt. Bei Level 1 weiß ich nicht, warum ich keine 3 Sterne bzw volle Punktzahl erhalten habe, obwohl ich alle Sterne eingesammelt habe. Zählt die Zeit auch oder die Schritte?



1. Hatte ich auch schon überlegt, einen Festhalte und einen Absprungknopf,
wird dann doch sinnvoller sein.

2. Stimmt, ist ein bisschen doof die Steuerung nur in der Vorstellung zu erwähnen,
dann werde ich bei Neues Spiel kurz die Steuerung erklären.

3. Ja das Feedback ist so ne Sache, damit bin ich immer noch nicht zufrieden.
Tatsächlich wird es im Moment nur daraus berechnet: Zeit, gesammelte Münzen, besiegte Gegner.
Das werde ich auf jedenfall noch ändern müssen.
Wenn jemand da ne gute Idee hätte kann er es ja sagen, ansonsten
bleib ich bei den Faktoren, bloß mit ner besseren Formel.

Zur Engine:

Mir gehts im Moment so dass ich es einfacher finde mir ne ausreichende Engine für 
ein bestimmtes Spiel zu schreiben anstatt eine Richtige zu verwenden, von der ich
noch keine Ahnung hab. Wahrscheinlich wirds dann schon einfacher wenn ich mich mal
eingearbeitet hab in eine Engine.


----------



## BRoll (16. Jul 2012)

Hab versucht alle Verbesserungsvorschläge umzusetzen,
und angefangen den Multiplayer zu programmieren.

Denn der Server funktioniert jetzt einwandfrei.

Es wird viele Einstellungsmöglichkeiten geben, somit
ist Spielspaß garantiert.

Hier schonmal ein Screenshot des (vorläufigen) Multiplayer-Menüs:





(Gibt es hier eine Spoilerfunktion im Forum?)


----------



## Network (16. Jul 2012)

Wie schiest man denn eig. Schleimbälle? Ich wusste nicht, dass es sowas gibt und hatte deshalb auch die Idee mit dem Multiplayer nicht so toll gefunden.
Wenn ich X drücke passiert nichts ô.o

Gruß
Net


----------



## BRoll (16. Jul 2012)

Network hat gesagt.:


> Wie schiest man denn eig. Schleimbälle? Ich wusste nicht, dass es sowas gibt und hatte deshalb auch die Idee mit dem Multiplayer nicht so toll gefunden.
> Wenn ich X drücke passiert nichts ô.o
> 
> Gruß
> Net



Man schießt Schleimbälle auf X/Y (x für hohen wurf/ y für flachen wurf).

Du musst natürlich vorher welche kaufen, im Item Shop,
um welche werfen zu können.

Wie viele du gerade besitzt siehst du im Menü unter "Equipment"
und ingame dann unter der Münzenanzeige, ist eine extra
Anzeige für deine Schleimbälleanzahl.


----------



## Fu3L (17. Jul 2012)

Ich habs auch kurz getestet und finde es wirklich gut gelungen. 
Das mit dem schwierigen Anheften teile ich auch.
Dazu: x und y finde ich unangenehm, wenn der Daumen auf der Leertaste liegt, s und d wären angenehmer, bei langen Fingern sogar eher w und e.

Und eine Frage: Haben die Löcher im Holz an einigen Stellen eine Bedeutung oder sind die nur zur Zierde?


----------



## BRoll (17. Jul 2012)

Fu3L hat gesagt.:


> Ich habs auch kurz getestet und finde es wirklich gut gelungen.
> Das mit dem schwierigen Anheften teile ich auch.
> Dazu: x und y finde ich unangenehm, wenn der Daumen auf der Leertaste liegt, s und d wären angenehmer, bei langen Fingern sogar eher w und e.
> 
> Und eine Frage: Haben die Löcher im Holz an einigen Stellen eine Bedeutung oder sind die nur zur Zierde?



Hmm also bei so vielen Schwierigkeiten überlege ich gerade eine 
Controller-Einstellung zu machen, dass jeder die Tasten selber belegen kann.

Die Löcher sind nur zur Zierde


----------



## JavaMeetsBlueJ (17. Jul 2012)

Respekt und Hochachtung vor dem was du dir da zusammengebastelt hast, wenn ich überlege, dass ich im gleichen Alter bin wie du, wierd ich glatt neidisch -.- .Hast du dir das alles selbst beigebracht oder hast du Informatik in der Schule?
MfG


----------



## BRoll (17. Jul 2012)

JavaMeetsBlueJ hat gesagt.:


> Respekt und Hochachtung vor dem was du dir da zusammengebastelt hast, wenn ich überlege, dass ich im gleichen Alter bin wie du, wierd ich glatt neidisch -.- .Hast du dir das alles selbst beigebracht oder hast du Informatik in der Schule?
> MfG



Öhm ich bin grad auf einem technischen Gymnasium mit Profilfach Informatik,
aber wir machen in der Schule nicht viel.
Das meiste ist also selber beigebracht, bloß die Anfänge (was für Datentypen gibt es,
wie erstellt man ein Java Projekt, Bedienung von Eclipse...) habe ich in 
Computertechnik gelernt. Dann hatten wir noch kurz ein bisschen OOP durchgesprochen
und ein paar kleine Applets geschrieben, mehr aber nicht xD


----------



## Noisefever (19. Jul 2012)

Bile Demon hat gesagt.:


> Klingt da nicht ein kleines bisschen Stolz mit, dass man das selbst hinbekommen hat? Und wenn es hundert Frameworks gibt, die das besser machen als deine Engine, so ists doch trotzdem ein tolles Gefühl, wenn man von sich sagen kann, dass das alles Eigenarbeit ist.



ja natürlich gehts da um stolz  es ist toll das gemacht zu haben. aber zum eigentlichen ziel "spiele programmiern" bringt es einen nicht gerade auf dem direkten weg. und es kümmert nachher auch keine sau ob du das soundproblem gelöst hast oder nicht 
aber seis drum, die entscheidung ist natürlich jedem selbst überlassen. minecraft ist übrigens auf LWJGL aufgesetzt


----------



## Kr0e (19. Jul 2012)

Noisefever hat gesagt.:


> minecraft ist übrigens auf LWJGL aufgesetzt



Jap und die miese Programmierung kennen wir ja alle


----------



## Firephoenix (19. Jul 2012)

Das liegt dann aber nicht daran, dass Minecraft auf ein Framework aufsetzt.
Selbst wenn ich auf Slick2d aufbaue kann ich mein komplettes Programm nach sauberem OOP aufbauen und ordentlich mit Tests überprüfen.

Der "schlechte" Code von Minecraft liegt wenn dann eher daran, dass Notch wenig im Team programmiert (hat) und einen sehr funktionalen Programmierstil hat (viele Dinge in eine Klasse, kompakten Effizienten Code).

Gruß


----------



## Kr0e (19. Jul 2012)

Frameworks sollten einen schon in eine gewisse Denkrichtung pressen, damit guter Stil gefördert wird. Das ist meine Meinung... Mir ist klar, dass das manche anders sehen. Viele empfinden genau das Gegenteil... Je mehr Freiheiten, desto besser.


Ich denke, wenn Minecraft mit einer Engine gemacht worden wäre, hätte man sehr viel eher und ein sehr viel besseres Produkt gehabt, das besser wartbar wäre.


----------

