2012-11-04 19 views
6

Ich habe in letzter Zeit oft Letterpress gespielt.Was ist ein sinnvoller Algorithmus, um die Buchstaben in Letterpress iOS Spiel zu generieren?

Das Ziel des Spiels ist es so viele blaue Steine ​​wie möglich zu erhalten, indem Wörter aus den Buchstaben auf dem Brett gemacht werden. Wenn Sie Ihr Wort spielen, werden Buchstaben, die das Wort bilden, blau, wenn der Buchstabe nicht von roten Kacheln umgeben ist.

Eine regelmäßige Buchbrett sieht wie folgt aus:

Ich erkannte, dass die Buchstaben auf dem Brett muss mit irgendeiner Art von Regeln erzeugt werden, sonst wird es wirklich schwer sein, das Spiel mit einigen zu spielen Bretter. Ich konnte nur an die Regel denken, wo es eine Anzahl von Vokalen geben muss. Ich frage mich, ob es andere Regeln gibt.

Darüber hinaus frage ich mich, ob dies ähnlich wie die Generierung Boggle dices sein wird.

+7

Ich wäre nicht überrascht, wenn es "nur" zufällig nach einem [Histogramm von Buchstaben] (http://www.google.com/?q=english%20letter%20histogram) (wie in Englisch oder was auch immer gefunden) war) Wörter. Ebenso sind die roten Kacheln nur zufällig. Natürlich müßtest du den Quellcode einsehen, andere Einblicke bekommen * oder * eine Analyse auf dem generierten Board durchführen, um mehr zu sagen. Manchmal zufällig ist ein! @ # $, Aber wer weiß, vielleicht schlägt der Algorithmus die Vorteile mit einem Digram-Bias. –

Antwort

4

Ich entschied mich, eine Lösung basierend auf dem Vorschlag von user166390 zu hacken. Die Frequenzen, die Sie sehen, sind für die englische Sprache, aus Wikipedia entnommen. Wenn sie das Programm ein paar Mal laufen lassen und nur die Ergebnisse anschauen, sehen sie für mich ziemlich spielbar aus. Ich kann im Allgemeinen ein paar Wörter mit vier oder fünf Buchstaben finden, und ich bin nicht einmal sehr gut im Spiel! Wie auch immer, hier ist der Code:

#!/usr/bin/env python 

from random import random 
from bisect import bisect_left 

letters = [c for c in "abcdefghijklmnopqrstuvwxyz"] 
frequencies = [8.167, 1.492, 2.782, 4.253, 12.702, 2.228, 2.015, 6.094, 6.966, 
       0.153, 0.772, 4.025, 2.406, 6.749, 7.507, 1.929, 0.095, 5.987, 
       6.327, 9.056, 2.758, 0.978, 2.360, 0.150, 1.974, 0.074] 

cumulative_frequencies = [sum(frequencies[0:i+1]) for i in xrange(len(frequencies))] 

for i in xrange(5): 
    line = "" 
    for j in xrange(5): 
     line += letters[bisect_left(cumulative_frequencies, random() * cumulative_frequencies[-1])] + " " 
    print line 

Die Idee ist, für jeden Buchstaben erzeugt werden, die roulette wheel algorithm verwenden Sie es mit einer Wahrscheinlichkeit zufällig zu wählen, die proportional zu den gegebenen Frequenzen.

+0

Es ist subtiler als das. Wenn zum Beispiel ein "Q" "gewählt" ist, gibt es eine Logik in dem Code, um sicherzustellen, dass ein gültiges Wort unter Verwendung von "Q" möglich ist. Etc. – jason

+0

Ok, also wird es immer möglich sein, alle Buchstaben in der Tafel für mindestens ein Wort zu verwenden? In diesem Fall bin ich völlig ratlos. –

+0

Warte mal, in dem Beispiel-Board, das das OP gepostet hat, gibt es ein "C" in der oberen rechten Ecke. Wie in aller Welt sollst du das benutzen? Es sei denn Akronyme sind natürlich erlaubt. –

1

Ich habe Loren Brichter gehört, der Entwickler, rede darüber, biss ich kann nicht für das Leben von erinnern, wo. Ich denke, es war auf Guy Ritchies Debug Podcast, aber ich bin mir nicht sicher. Ich erinnere mich an ein paar Dinge.

Er garantiert mindestens eine bestimmte Anzahl von Vokalen.

Die Konsonanten werden getrennt von den Vokalen erzeugt. Dies impliziert separate Briefverteilungen.

Er hat seine eigene Analyse des Wörterbuchs hinter dem Spiel gemacht, um mit der Briefverteilung zu kommen.

Wenn ein Q ein I garantiert gewählt wird, so ist ein Wort immer möglich mit dem Q.

ich viel spielen. Aus irgendeinem Grund hatte ich nie ein Spielende, sondern alle verwendeten Buchstaben. Ich weiß nicht, ob es garantiert ist, dass ein Wort immer mit jedem Buchstaben möglich ist, aber es scheint, dass es praktisch wahr ist, auch wenn es nicht durchgesetzt wird.

+0

Ich habe diesen Podcast auch gehört. Ziemlich sicher, es ist Debug. Ich denke, er hat gesagt, dass er höchstens 7 Vokale erzeugt. Wenn das der Fall ist, frage ich mich, was das Minimum ist, und wie ist er auf diese Zahl als Maximum gekommen? –

+0

Warte, wenn ein Q gewählt wird, wird auch ein I garantiert gewählt? In diesem Fall ist der Algorithmus keine einfache Verteilung. –

+0

Ich erinnere mich daran, Spiele mit einem Q und nein I oder U zu spielen. Sie können immer noch QAT oder ein paar andere machen. Wenn überhaupt, überprüft es nur, ob * irgendein * Q-Wort spielbar ist. – cobbzilla

Verwandte Themen