Alea iacta est – Die Würfel sind gefallen

Heute habe ich mich mit Toby unterhalten. Er arbeitet als Softwareentwickler bei Knuddels  und ist schon seit über 12 Jahren mit dem Nicknamen TobyB im Chat aktiv. In seiner Freizeit hat er die beiden coolen Würfelspiele SpeedKnuffel und Knuffel entwickelt.

Knuddelsteam TobyB

Aloha Toby! Du programmierst ja bereits sehr viel in deiner Arbeitszeit. Wie bist du dazu gekommen, Knuffel zu entwickeln?

Als die Möglichkeit aufkam, dass man mit Web-Techniken eigene Apps für seine MyChannels schreiben konnte und ich bei anderen schon gesehen hatte was man damit Tolles machen kann dachte ich mir, ich möchte das auch mal versuchen. Die Suche nach einem geeigneten Projekt war dann auch recht kurz, da ich wusste dass sich das Spiel Kniffel bereits gewünscht worden war. Die Namensgebung war dann auch ein schnell erledigtes Thema, die Kombination aus Knuddel und Kniffel bot sich einfach geradezu an. Lachender Smiley

Deine beiden Spiele Knuffel und SpeedKnuffel sind eigentlich eine User App. Was hast du gemacht, um beide Spiele in einer App abzubilden?

Richtig, die App dahinter ist in beiden Channels die exakt gleiche. Beide Spielvarianten, denn nichts anderes sind es ja, teilen sich sehr große Teile der Logik und auch der Benutzeroberfläche und somit auch des Codes. Lediglich zwei verschiedene Konfigurations-Dateien entscheiden welche der beiden Varianten in dem jeweiligen Channel laufen. In meinem Debug-Channel laufen sogar beide parallel, auch das ist technisch kein Problem. Es gibt natürlich aber auch Code der jeweils nur von der einen Spielvariante genutzt wird.

Das ganze habe ich realisiert indem ich die in JavaScript gegebenen Möglichkeiten Objektorientiertes Programmieren (OOP) wie z.B. Vererbung ausnutze. Beispiel dafür ist meine (wenn es ginge “abstrakte”) Klasse KniffelGame, die sich um allgemeine Dinge wie Spielerverwaltung, Knuddeleinsätze und -ausschüttung und das Starten und Beenden eines Spiels kümmert. Als dann quasi “konkrete Implementierung” davon gibt es einmal DefaultKnuffelGame für Knuffel und SpeedKnuffelGame für SpeedKnuffel, die jeweils von der Klasse KniffelGame erben und diese um Methoden erweitern die spezifisch für die jeweilige Spielvariante sind, wie z.B. die Verwaltung der Blätter der einzelnen Spieler oder das Spielverhalten im Hinblick auf “wer ist wann dran?”, denn Knuffel wird sequenziell gespielt (einer nach dem anderen) und SpeedKnuffel wird parallel gespielt (alle spielen gleichzeitig).

Wenn es um die grafische Oberfläche geht werden eventuelle Unterschiede auch von einer Config aus gesteuert, wie beispielsweise die Größe des HTML User Interface. Der Rest ist eigentlich fast komplett der selbe Code für beide Spiele, da vom Server einfach nur Events mit Update-Informationen kommen die das restliche Aussehen der App unabhängig von der Spielvariante steuern.

Zuerst hast du Knuffel entwickelt, wenig später kam dann SpeedKnuffel. Welche Änderungen hast du an Knuffel vorgenommen, damit es zu SpeedKnuffel wurde und warum hast du sie gemacht?

Da Knuffel ein Spiel ist das sequenziell gespielt wird und man dadurch bei immer größer werdenden Spielergruppen immer längere Wartezeiten hat war es nur eine Frage der Zeit, bis es da etwas anderes geben sollte. Mir wurde von Martin (Entwickler von Knuddelonia) dann vorgeschlagen eine Speed-Variante zu machen die man auch parallel spielen kann. Das verringert jeweils die durchschnittliche Spieldauer pro Spiel und auch die Wartezeit.

Aus den ganzen Überlegungen dazu wurde dann letztendlich die SpeedKnuffel-Variante, die es jetzt gibt.

Bei Knuddels messen wir viele Daten, um unsere Projekte immer besser zu machen. Ich habe mitbekommen, dass du in Knuffel auch Daten misst. Was misst du genau und wie konnten diese Dinge deine App verbessern?

Ich hab im Laufe der Zeit immer mehr Messpunkte eingeführt. Aktuell messe ich: Geöffnete Spiele (mit und ohne Knuddel, Einzel- und Mehrspieler), gestartete Spiele (mit und ohne Knuddel, Einzel- und Mehrspieler), beendete Spiele (Einzel- und Mehrspieler), Knuddel-Einsätze, Knuddel-Auszahlungen, Knuddel-Umsatz, Knuddel-Einnahmen/Geschenke, verschenkte Knuddel und Onlineminuten.

Dadurch konnte ich dann feststellen, dass viel mehr Einzelspieler-Spiele gespielt wurden, was ich aber eigentlich nicht wollte. Dann habe ich dem Mehrspielermodus Bonuspunkte in verschiedenen Varianten gegeben um ihn attraktiver zu machen. Außerdem konnte ich durch das Messen der Knuddel-Transaktionen endlich wirklich wissen, wie viele Knuddel ich täglich verschenke (ich hab insgesamt bisher knapp 6.000 Knuddel verschenkt) und welche Nutzer wie viele davon bekommen. Um das dann gerechter zu gestalten, habe ich die täglichen Knuddel-Geschenke pro Nutzer gedeckelt und auch die Verteilungsformeln mehrfach angepasst und mir Warnmeldungen eingebaut, wenn das System erkennt, dass da jemand nur versucht auf Knuddel-Geschenke zu spekulieren.

Insgesamt habe ich dadurch gelernt, wie die Nutzer meine Spiele spielen.

knuffel-statistics-demo

Hast du einen Tipp, wie andere Entwickler wertvolle Daten messen können, um fundierte Entscheidungen für Änderungen treffen zu können?

Also man sollte sich natürlich Gedanken darüber machen, was man denn wissen will oder einen Schritt vorher sogar noch, ob es jetzt schon Punkte gibt die man verbessern will (z. B. weil sich jemand beschwert hat). Dann kann man anhand dieser Punkte beobachten, was die Leute machen und diese Daten dann interpretieren.

Dein HTML User Interface hast du mit AngularJS aufgebaut. Welche Vorteile hat für dich die Nutzung dieses Frameworks bei der Entwicklung gemacht?

Ich kannte das Framework bereits aus meiner beruflichen Arbeit und wusste daher schon auf was ich mich einlasse: Was sind die Stärken und was sind die Schwächen. Aber für meinen Zweck passt es, weswegen ich es dann damit gemacht habe.

Einerseits wollte ich einfach mehr Erfahrungen damit sammeln, andererseits nimmt einem das Framework sehr viel der Arbeit ab wenn es darum geht das User Interface zu aktualisieren, wenn sich Werte geändert haben. Und genau das passiert in meinem Spiel ja ständig (jemand würfelt, ich kann immer neue Werte eintragen, …).

Angular bietet dafür ein tolles Data-Binding an: Das heißt vereinfacht, dass ich ein <div> im HTML mit einer Variablen im JavaScript verknüpfe. Jedes Mal, wenn sich diese Variable ändert (z.B. weil der Server einen neuen Wert geschickt hat) kümmert sich Angular von selbst darum, das dazugehörige HTML-Element zu aktualisieren. Ich muss mich nicht selbst darum kümmern. Das Gleiche geht auch in die andere Richtung: Stellt euch einen Click-Handler auf einem Button vor: Auch hier muss man einfach ein Binding erzeugen und mit wenigen Zeilen Code wird dann bei einem Klick ein paar Daten an den Server geschickt.

Ein weiterer Vorteil ist auch, dass es zahlreiche Module für Angular gibt. Angular Material ist die Implementierung der Designsprache Material Design von Google. Google verwendet seit einiger Zeit auf ihren Websiten und in Android. Dadurch kann man mit wirklich wenigen HTML-Elementen das gleiche Design, inklusive aller Animationen und sonstiger Effekte, verwenden. Wer will, sollte einfach mal in Knuffel vorbeischauen.

Diese Diashow benötigt JavaScript.

Was könnten die Entwickler von User Apps deiner Meinung nach besser machen, um noch erfolgreicher zu werden?

Das ist keine einfache Frage. Das ist oft abhängig davon, was man machen will und für wen es sein soll. Ich würde aber empfehlen, darauf zu achten, für welche Plattform man seine App anbietet und wie gut sie dort funktioniert. Das Applet ist für mich die unwichtigste Plattform. Ich optimiere meine Apps vor allem auf den HTMLChat (der Desktop-Client der Zukunft) und die Android App (inklusive Touch und so weiter), da dort einfach die meisten Nutzer unterwegs sind.

Natürlich muss man erst mal sein Grundgerüst und seine Idee irgendwie umsetzen. Wenn das geschafft ist, kann man es dann aber bestimmt für die Nutzer noch viel besser machen.
Ein allgemeiner Tipp es besser zu machen ist, jemanden testen zu lassen, der die App noch nie genutzt hat und dabei über die Schulter zu schauen.

  • Was versucht derjenige zu machen?
  • Welche Aktionen Werden vom Nutzer erwartet und was passiert tatsächlich?
  • Worauf wird geachtet, worauf nicht?

Allgemein würde ich auch dazu raten keine Befehle, die der Nutzer von Hand eingeben muss, zu benutzen. Besser ist es, eine Benutzeroberfläche mit Buttons oder HTML User Interface anzubieten.

Zum Entwickeln selbst kann ich nur sagen: Probiert einfach rum! Und wenn es nicht geht, dann schaut in die Doku, ob es dort vielleicht etwas gibt, was ihr benutzen könnt. Fragt andere Entwickler! (Fast) jeder Fehler oder jedes Problem hat irgendjemand schon gehabt und es gibt immer jemanden, der helfen kann. Zuerst sollte man jedoch immer selbst versuchen, das Problem zu finden, in der Dokumentation nachzuschauen und dann erneut versuchen. Das kann zwar etwas dauern, aber der Lerneffekt ist hierbei deutlich größer.

Es gibt noch viele andere Apps im Knuddels-Universum. Welche 3 gefallen dir am besten?

Uff. Also Knuddelonia finde ich super, das hab ich eine Zeit lang viel gespielt. Ansonsten finde ich Tetris und vor allem SpaceKnuddelz gut. Hab ich auch beides öfter mal gespielt, wesentlich öfter und länger als viele andere Spiele.

Aber ich hab noch nicht die Zeit gehabt mir alles anzuschauen, was es alles gibt. Da sind bestimmt noch ein paar weitere tolle Apps am Start, die ich einfach noch nicht entdeckt habe.

Ciao Toby, vielen Dank!

Gerne! Bis dann. Hoffentlich gibt es bald noch mehr tolle Apps! Smiley mit lächelndem Gesicht

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s