Freitag, 28. März 2014

Realisierung - Spielfeld berechnen

Die Featureliste war erstellt. Jetzt konnte ich mich um die Umsetzung kümmern. Ich hatte mir vorgestellt, dass eine Spielrunde drei Minuten dauern sollte, und dass zwischen den Spielen eine 30 Sekunden lange Pause sein sollte. In diesen 30 Sekunden muss demnach ein neues Spiel berechnet, die Ranglisten in der Datenbank aktualisiert, und das Ergebnis des letzten Spieles angezeigt werden. Das bedeutet, dass mir für die Berechnung eines neuen Spieles weniger als 30 Sekunden blieben. Kein Problem, dachte ich mir. Ich bin ja nicht der erste, der das versucht. Und Anderen ist das schließlich schon gelungen.

Spielfeld auswürfeln


Jedes Spiel besteht aus einem Quadrat mit 16 zufälligen Buchstaben. Zufällig? Nein, nicht ganz. Es sollen ja schließlich einige Worte auffindbar sein. Also habe ich mir von Wikipedia eine Tabelle mit Häufigkeitsverteilungen besorgt, die ich bei der Ziehung der Buchstaben berücksichtige.

RangBuchstabeHäufigkeit
1E17,40 %
2N9,78 %
3I7,55 %
4S7,27 %
5R7,00 %
6A6,51 %
7T6,15 %
8D5,08 %
9H4,76 %
RangBuchstabeHäufigkeit
10U4,35 %
11L3,44 %
12C3,06 %
13G3,01 %
14M2,53 %
15O2,51 %
16B1,89 %
17W1,89 %
18F1,66 %
RangBuchstabeHäufigkeit
19K1,21 %
20Z1,13 %
21P0,79 %
22V0,67 %
23J0,27 %
24Y0,04 %
25X0,03 %
26Q0,02 %


Außerdem achte ich darauf, dass in einem Spiel mindestens zwei, aber nie mehr als sechs Vokale vorkommen. Damit ist die Wahrscheinlichkeit sehr hoch, dass jedes Spiel einige, aber nicht zu viele Lösungswörter hat.

Spielfeld lösen


Einfach alle Kombinationen durchzuprobieren, und im Wörterbuch nachzuschlagen, war erwartungsgemäß viel zu langsam. Aber dieser brutale Ansatz ist auch gar nicht notwendig. Denn in der Regel steht schon früh fest, dass es keine Wörter gibt, die mit den Buchstaben der zu untersuchenden Kette beginnen. Am Beispiel des Logos von Sechzehn beginnt die Suche mit R, und kann bei RP schon abbrechen. Es gibt keine Wörter die damit anfangen. Als nächstes muss die Kombination RS untersucht werden, für die auch keine Wörter existieren. Also weiter mit RE, RES und RESZ - hoppla schon wieder eine Sackgasse. Auf diese Weise sind letztendlich nur ein verschwindend geringer Bruchteil aller theoretisch möglichen Buchstabenkombinationen tatsächlich zu untersuchen. Die Lösung eines Spielfelds liegt dadurch in der Regel deutlich unter fünf Sekunden.

Der erste Stolperstein auf dem Weg zu einem spielbaren Sechzehn ist ausgeräumt. Jetzt konnte ich also daran gehen, einen Einzelspielermodus zu programmieren, in dem alles Notwendige für das Eingeben und Prüfen von Wörtern vorhanden ist.

Dienstag, 25. März 2014

Vorbereitung - Look & Feel

Der Entschluss ein online Boggle zu programmieren war gefasst. Jetzt ging es darum, vor der ersten Zeile Code ein paar Dinge zu klären:



Look & Feel


Sechzehn sollte frisch und modern aussehen. Daher fiel meine Wahl auf das Bootstrap Framework. Bootstrap wurde ursprünglich bei Twitter entwickelt, und ist inzwischen eines der beliebtesten Projekte auf GitHub. Mit Bootstrap erstellte Webdesigns empfinde ich als optisch sehr ansprechend. Sie haben eine klare Linie, und sie wirken modern.

Das dreispaltige Layout von Sechzehn habe ich einfach von meinen Lieblings-Boggle-Varianten im Netz übernommen (WordsPlay und Wortopia). Wie man sehen kann, ist das Layout von Sechzehn eine Mischung dieser beiden Boggle-Varianten.

Ein erster Mockup war schnell fertig, und seither haben sich lediglich vorsichtige Änderungen im Detail ergeben. Im Grunde ginge es bei diesen Eingriffen ins Layout immer darum, die Sichtbarkeit von Sechzehn für Suchmaschinen zu verbessern. Ach ja. Suchmaschinenoptimierung und Werbung. Auch zwei Themen, über die ich berichten will. Aber nicht jetzt.




Vorbereitung - Features

Der Entschluss ein online Boggle zu programmieren war gefasst. Jetzt ging es darum, vor der ersten Zeile Code ein paar Dinge zu klären:


Features


Frei nach dem Motto "weniger ist mehr", habe ich eine Liste der wirklich wichtigen Features von Sechzehn erstellt. Auf alles, was nicht unbedingt für das Spiel notwendig ist, sollte verzichtet werden. Damit blieben die folgenden Features übrig:

Ob ein Mehrspielermodus mit Ruby on Rails überhaupt realisiert werden konnte, war mir noch nicht klar. Auch die Frage, ob neue Spielfelder mit Lösung innerhalb vertretbarer Zeit generiert werden konnten, musste ich erst noch klären. Dass Touchbedienung im Browser unterstützt wird hatte ich zwar mal gehört, ob dem wirklich so war, wusste ich noch nicht. Und schließlich galt es noch zu klären, ob Ranglisten und kein Zwang zur Registrierung miteinander vereinbar sind. Zumindest dafür hatte ich sofort eine pragmatische Lösung. Spielresultate von nicht registrierten Spieler würden einfach nicht in den Ranglisten auftauchen.

Vorbereitung - Hosting

Der Entschluss ein online Boggle zu programmieren war gefasst. Jetzt ging es darum, vor der ersten Zeile Code ein paar Dinge zu klären:


Hosting


Durch ein Tutorial zum Ruby on Rails Framework bin ich auf Heroku gestoßen. Die eigenen Ruby on Rails Projekte werden einfach in das dortige Versionskontrollsystem hochgeladen, und sind sofort lauffähig. Solange man sich mit den mageren Voreinstellungen zufrieden geben kann, ist Heroku kostenlos. Leider sprengte meine Wörterliste bereits den Umfang der kostenlosen Datenbank, so dass ich zum nächstgrößeren PostgreSQL Paket für 6,50 € im Monat greifen musste.

Sechzehn sollte seine eigene Domain bekommen. Eher zufällig bin ich bei Strato gelandet. Leider musste ich feststellen, dass im Paket der klassischen Domains keine Subdomänen enthalten waren. Die brauchte ich aber unbedingt, um eine Weiterleitung nach Heroku schalten zu können. Also blieb mir nichts anderes übrig, als das kleinste Webhostingangebot für 3 € im Monat zu buchen.

Damit belaufen sich die monatlichen Hostingkosten auf überschaubare 10 €.

Montag, 24. März 2014

Wie alles begann

Ich bin begeisterter Spieler der diversen online Boggle Varianten die im Netz kursieren. Und schon lange hatte ich vor, so ein Spiel mal selber zu programmieren. Es sollte im Browser laufen, einen Mehrspieler Modus haben, und vor allem, es sollte auf deutsch sein.

Eine vernünftige Wörterliste mit deutschen Wörtern sollte sich als das größte Problem herausstellen. Und so dauerte es bis Januar 2014, als ich eher zufällig auf Wikipedia in einem Artikel über die häufigsten Wörter der deutschen Sprache über eine Wörterliste für das aspell Projekt gestolpert bin. Mit dieser 1.6 Millionen Einträge umfassenden Liste in der Tasche (oder besser auf der Festplatte), konnte ich endlich an die Verwirklichung meines lange gehegten Plans gehen. Das Freizeitprojekt Sechzehn war geboren.

Da ich bereits Erfahrung mit kleineren Ruby on Rails Projekten gesammelt hatte, fiel mir die Wahl der Werkzeuge nicht schwer. Sechzehn sollte das nächste Ruby on Rails Projekt werden. Mit PostgreSQL Datenbank, und auf Heroku gehostet.

Inzwischen ist Sechzehn fertig und kann gespielt werden. In diesem Blog möchte ich für mich selbst, und natürlich für jene, die es interessiert, noch einmal die verschiedenen Stufen von der Planung bis zur Fertigstellung von Sechzehn Revue passieren lassen.

Außerdem soll in diesem Blog die fortdauernde Pflege des Wörterbuchs und der Programmversionen dokumentiert werden. Feedback in Form von Anregungen und Kritik ist natürlich ausdrücklich erwünscht!