Work In Progress

Hi,

lange Zeit war es ruhig hier. Liegt daran, dass ich derzeit viel Zeit mit meinem Sohn verbringe und falls er mal schläft, dann mache ich das meistens auch. :wink:
Aber so ganz ohne sein Hobby kommt man nicht aus, man muss die wenige Zeit, die man hat, nur besser nutzen.

Es wird zwar kein Projekt derzeit fertig aber ich kann ja mal zeigen, was ich derzeit mache.

Ein kleines Mathespiel, wo man die Funktion herausfinden muss, um mit dem Baby alle Obststücke einzusammeln. Ziel ist es wieder sein Wissen für Funktionen aufzufrischen und durch die Variable t (=Zeit) kann sich der Graph auch verändern etc … mal schauen wie ich voran komme, kann mir das Spiel gut auf Tablets oder Smartphones vorstellen und könnte für die Visualisierung / Lernen von Graphen gut sein.

Außerdem nutze ich ab und zu den Abend im Bett um etwas zu spielen. Damit ich nicht immer mein Handheld wechseln muss, habe ich mir einen supergamegirl gebaut. Ein Raspberry Pi 3 mit großem Akku, coolem 3D Gehäuse, Sound etc. Doch muss zugeben, kein billiger Spaß sich das zu holen und selber zusammenzubauen. Aber das Ergebnis lohnt sich. =) Kann ich nur jedem Empfehlen.
Jetzt baue ich gerade ein Pigrrl Zero und überlege ihn dieses Weihnachten in meinem Adventskalender zu verlosen.


Anderes kleines Projekt ist ein neues TowerDefence Spiel. Dazu hatte ich auch mal Lust. Bei diesem Versuche ich es mal so RICHTIG zu polishen. Deshalb wird es ewig dauern und wahrscheinlich nie rauskommen, oder vielleicht doch… mal schauen

Woher kommt die Grafik beim Towerdefense Spiel? Sieht sehr nice aus.

Vor einiger Zeit hab ich auch mal mit nem TD angefangen, liegt sogar auf github rum. Wie immer mit Fokus auf halbwegs vernuenftigen Code und vor allem guter Performance (kann seeeehr viele Units bewegen und (Schaden-)effekte berechnen). Der Gamecontent (Units, Tuerme, Projektile, Effekte, Buffs…) werden allesamt per json konfiguriert, also kein Codeaenderung noetig, um z.b. Schaden eines Turms zu aendern).

Find ich super, dass du neben Sohnemann noch zu sowas kommst :slight_smile:

[QUOTE=schalentier]Woher kommt die Grafik beim Towerdefense Spiel? Sieht sehr nice aus.

Vor einiger Zeit hab ich auch mal mit nem TD angefangen, liegt sogar auf github rum. Wie immer mit Fokus auf halbwegs vernuenftigen Code und vor allem guter Performance (kann seeeehr viele Units bewegen und (Schaden-)effekte berechnen). Der Gamecontent (Units, Tuerme, Projektile, Effekte, Buffs…) werden allesamt per json konfiguriert, also kein Codeaenderung noetig, um z.b. Schaden eines Turms zu aendern).

Find ich super, dass du neben Sohnemann noch zu sowas kommst :-)[/QUOTE]

Die Grafiken habe ich im Netz für wenig Geld gefunden und haben sie mir mal gegönnt.
Das Spiel entsteht auch und ist kein gewöhnliches TowerDefence Spiel mehr. Als Spieler muss man nun die “Monster” auf die Strecke schicken (also wann welches Monster und während des Laufens kann man Zaubersprüche ausführen) und die KI baut halt die Türme. Fand ich ganz spannend und wird auch gut. =)

Aber zeigen möchte ich erst einmal das andere Spiel “BabyGraph”. Das ist in den letzten Tagen echt gut weitergekommen und macht schon Spaß. =)

So das BabyGraph entsteht weiter und wächsttttttt =) Es hat schon 36 Level und man kann sich mit anderen vergleichen, weil die besten Lösungen online gespeichert werden und als gestrichelte Linie dann angezeigt werden.

Ich würde sagen, dass ist ein richtig schönes kleines Projekt. Jetzt muss die Kollisionserkennung noch zu 100% funktionieren und der Editor implementiert werden, dann steht der Veröffentlichung nichts mehr im Weg.

Habt ihr Ideen was ihr euch bei solch einem Spiel wünschen würdet?

So das BabyGraph Projekt wächst und gedeiht weiter.

Heute habe ich es ermöglicht, dass man sich mit allen anderen vergleichen kann. Wenn man eine Lösung gefunden hat, wird sie hochgeladen. Und immer die besten Lösungen (kürzeste Funktion und kürzeste Zeit) werden mit angezeigt. Aber natürlich wird nicht direkt verraten, wie die Funktion genau lautet, sondern nur wieviel Zeichen benutzt wurden oder wieviel Zeit benötigt wurde. Außerdem wird die beste Zeitlösung als Polygon gestrichelt mit angezeigt. (siehe Screenshot).
Außerdem gibt es nun 49 Levels. Ich denke mal das sollte ausreichen für ein paar schöne Stunden. 0)

Außerdem habe ich den Editor angefangen. Wenn alles klappt wird er morgen fertig. Wenn dann noch die letzten Macken in der Kollisionerkennung weg sind, dann ist es mehr oder weniger fertig. Dann fehlt “nur” noch die Android Version.

So nun gibt es einen Editor und die erste Version ist online zum testen, falls jemand Lust und Laune hat.
Ist auch nur eine kleine Jar-Datei. Außerdem habe ich es noch ein bisschen „gepolished“. Bin mit dem Look nun eigentlich ganz zufrieden.

Frage:
Ich update die Funktion, wenn eine Zeit Variable mit drin ist, nur alle 100 ms. Ich würde sie gerne lieber alle 10 ms updaten, weil es dann flüssiger aussieht. Das Problem dabei ist nur, dass die Neukalkulation der Werte bei langen Funktionen wie (’((2^((14-x+t)/6))-e^(-(((x-96)/12)^2))32+2^((x-96)/2))(1-1/(1+20))’) ~15ms bei meinem Rechner benötigt. Somit stockt das ganze Spiel dann. Das ist sehr unschön.
Kennt jemand von euch eine Lösung? Also Ziel ist es, aus einem String mit einer gültiger Funktion möchte ich die Werte schnell berechnen lassen, um sie dann anzuzeigen. Ich berechne derzeit die y Werte von x >= -500 bis x <= 500 in 0.1 Schritten.
Getestet habe ich die Libs exp4j, javaluator, meinen eigenen solver and the javax.script.ScriptEngine. Aber leider benötigen alle zu lange. Ich gebe zu das fuchst mich.
Derzeitige Lösungvorschläge, die mir im Kopf rumschwirren: Entweder nicht so genau rechnen oder es in einen extra Thread auslagern und die Werte für die nächsten Schritte schon vorberechnen lassen.
Aber am schönsten wäre halt eine Lib, die schnell genug ist. :wink:

Zwei neue Screenshots:


Ich hätte die Werte einfach vorberechnet. So viele sind das ja nicht - maximal ein paar Tausend. Die paar kB kann man auch bei Geräten mit wenig Arbeitsspeicher im RAM halten.

Vielleicht reicht es schon, wenn du erst einmal feststellt, welche Werte du auf den Pixeln der x-Achse hast und dann nur für diese Werte f(x) berechnest, oder machst du das schon so? 15 ms kommt mir recht lang vor.

Ja, hatte ich auch erst ausprobiert immer die nächsten 10 Sekunden vorzuberechnen. Aber so richtig glücklich hat mich die Lösung nicht gemacht.

Das ist auch richtig. Ich muss nicht immer von -500 bis 500 alle Werte berechnen. Mir reichen ja die, die ich auch anzeige. Aber das hätte viel Arbeit nach sich gezogen, weil dann auch einige Berechnung anders gewesen wären.

Ich habe aber eine andere (in meinen Augen) schöne Lösung gefunden. Warum sollte ich generell von -500 bis 500 berechnen wenn meine 50 Levels im Bereich von -25 bis 25 spielen? Also habe ich den Bereich zum Berechnen auf -105 bis 105 verkleinert und siehe da nun kann ich alle 10 ms updaten. Wirklich die beste Lösung ist es nicht, aber eine schnelle und auch performante.
Deshalb, wenn jemand das Spiel ausprobieren möchte, unter BabyGraph findet ihr die aktuellste Jar-Datei. Wenn ich keine Fehler mehr drin finde, ist es auch ein release Kandidat :wink:
Als nächstes Ziel steht nun die Android Version des Spiel an. Dort nehme ich zum ersten Mal libGDX. Mal schauen wie ich mich damit anstelle, aber ich freue mich schon drauf. =)

Ich bin ehrllich gesagt, beiindruckt. :slight_smile:

Vielen lieben Dank für die netten Worte.

ich habe BabyGraph noch weiter verbessert. Es waren noch ein paar (… echt viele) kleinere Bugs drin, die ich verbessert habe. Außerdem nun bei der Auswertung nach einem Level, gibt es nun die Möglichkeit das Level wieder zu starten, ein nächste level zu spielen oder ins Menu zurückzugehen. Wie man es kennt bei einem Smartphonespiel.

Dies ist nun die erste Version, die ich ohne Bauchschmerzen veröffentlichen kann und dazu sage, ich bin stolz auf das Ergebnis. =)

Jetzt geht es endlich an die Portierung aufs Smartphone. =)

Hab gerade einen kleinen Bug gefunden
level 22

cos(x/8-4)*8 hab ich eingegeben. da wird auch angezeigt, (error a goodie is caught in the function) wenn man nun aber die Pfeiltasten betaetigt, dann verschwindet der Error und man kann die Funktion ausfuehren. (und hat dann damit die aktuell beste Loesung :smiley: )

Oh mein Gott. Vielen Dank für den Hinweis. Ich habe den Bug sofort beseitigt. Sollte nun nicht mehr möglich sein.

Yep konnte das verhalten nicht mehr reproduzieren.
Nur für mein Verständnis: die kürzeste und schnellste Lösung werden die auf einem Webspace oder nur lokal gespeichert? falls auf einem Webspace solltest du meine Loesung aus der Datenbank nehmen, weil die strichlierte Linie für jeden sichtbar ist und eben eine ungültige Lösung beschriebt.

Das Spiel ist übrigens recht amüsant

Eine Nachricht noch von Edith:
Noch eine kleine Unschönheit, wenn ich den obigen error habe und dann in das nächste Level gehe ( mit dem Pfeilicon oben am Bildschirm) verschwindet der error nicht, obwohl in dem neuen Level der Input eigentlich keinen Fehler erzeugt.

Vielen Dank, auch dieser Fehler ist nun beseitigt und die zurück Taste ist mit einem Bild hinterlegt.

Ich habe die aktuelle Version gestern Abend auch mal ausprobiert, das macht schon richtig viel Spaß.

Mit fehlten nur einige Tasten zur komfortableren Eingabe der Formeln, zum Beispiel Home und End. Ich weiß, dass es dazu kein Gegenstück auf dem Handy geben wird und du das deshalb vermutlich gelassen hast. Aber das Eingeben auf dem Handy stelle ich mir eh etwas nervig vor.

Wonach wird die Lösung eigentlich bewertet? Kürzeste Zeit vor Länge der Eingabe? Kürzere Eingaben bevorzugt?
Manchmal sind ja durchaus mehrere Lösungen denkbar. Parabel oder Sinuskurve, oder etwa leicht abweichende Skalierungen.

Werden Leerzeichen in der Formel mitgezählt, oder fallen die weg?

Definitiv nicht auf dem Handy, aber für den PC wäre eine Variante witzig, in der man die Funktion als Java-Funktion schreibt, mit allen Möglichkeiten. Hier ist die Funktion verständlicher Weise auf die von dir zur Verfügung gestellten Operatoren beschränkt.

@Crian : gerade die Ideen mti dem Hinzufügen von home und end sind super, folgen in der nächsten Version. Die Leerzeichen werden weggenommen. Aber eigentlich könnte ich auch die mal Zeichen (*) wegnehmen. (also beim hochladen). Wie gesagt nächste Version.
Bei den Bestwerten gibt es unterschiedliche Lösungen. Eine für die kürzeste Lösung und eine mit der schnellsten Zeit, die natürlich nicht identisch sein müssen. Also Hilfe mit angezeigt wird die Lösung der schnellsten Zeit derzeit. Man könnte aber natürlich beide Lösungen anzeigen. Mal schauen. =)

So ich habe mich mal an LibGDX versucht und was soll ich sagen? Boah ist das genial und einfach. =)

Habe innerhalb von sechs Stunden mich mal dran versucht, zwei Spiele umgesetzt/portiert und verschiedene Einstellungen probiert. Super schöne library. Ihr könnt es ausprobieren unter libgdx html test.

Was noch fehlt sind verschiedene Fonts. Deshalb sehen die Schriften echt unschön aus. Es wird halt ein bitmap-font für arial 15 genommen und dann skaliert. Gerade Hochskalieren sieht unschön aus. Nun kann ich ohne Probleme auch babyGrpah umsetzen und habe gleichseitig eine Desktop Version, Android Version, HTML Version und iOS. Doch bin glücklich. =)

Ok ich konnte das mit der hässlichen Schriftart nicht auf mir sitzen lassen und habe einige BitmapFonts dazu gepackt und ein weiteres Spiel.

Jetzt ist es doch schon richtig rund und auf meinem Smartphone sieht es noch schicker aus als in der Browser Variante.

Jetzt kann ich wirklich mit dem Portieren von BabyGraph anfangen.

Na ich bin gespannt!

So nachdem ich noch ein bisschen mit libgdx gespielt habe und die Androidversion von meinen 4k Spielen in den Playstore hochgeladen habe, habe ich mich mit der Portierung von babyGraph beschäftigt. Und was soll ich sagen …
ich bin frustriert.

Die Portierung hat grundsätzlich schnell und gut geklappt. Es gab einige kleine Probleme, weil es nicht so einfach möglich ist ein gefülltes Polygon zu malen und natürlich mussten auch die Buttons minimal angepasst werden. Aber das hat alles super bzw. ganz gut geklappt. Die LibGDX-Desktopversion funktioniert auch sehr gut.
Jetzt habe ich halt “nur” das Problem, dass ich das gleiche Problem habe wie vor einigen Wochen. Die Neuberechnung der Funktionswerte dauert einfach zu lange. Sobald ein “t” ins Spiel kommt, ist es vorbei. Ich habe noch gefühlt unzählige Libs getestet. Bin jetzt bei JEP gelandet, die auf meinem Smartphone ungefähr das Spiel “nur” um Faktor 5 verlangsamt. Mit den anderen Libs und meiner eigenen Lösung kam ich auf Faktor 20 bis 100. Es ist die letzte OpenSource Variante von JEP, danach sollen sie noch ein “riesen Geschwindigkeitssprung” laut Werbung gemacht haben, aber 550 Dollar für die Lib sind mir dann doch zuviel zur Zeit. Da muss der Lottogewinn erstmal kommen …
Falls niemand irgend eine tolle Idee hat, wird es wohl nichts mit der offiziellen Smartphone Version.
Wer das aktuelle Spiel auf Android ausprobieren will, die aktuellste Version findet ihr hier. Aber wie gesagt, sobald die Variable “t” ins Spiel kommt macht es nicht so viel Spaß. Ach man …