PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie erschaff ich ein Scrabble einen "wortrausfinder" zu programmieren.


Melanie
04.09.2002, 16:53
Hab mir das so vorgestellt, das das Programm die Buchstaben aus den Buffer nimmt (die ich vorher ja kopiert hab, also in den Buffer gesteckt hab) und sie mit einer Liste (Textdatei) aus richtigen Wörtern vergleicht. Und dann wieder in den Buffer reintut und vielleciht auch gleich mit anzeigt was das nun für ein wort ist.

Ist sowas überhaupt möglich?

Welche Componenten muss ich da benutzen? Oder gibt es vielleicht irgendwo ein vergleichbares Tutorial?

Melanie sagt: Danke


ups, hab vergessen zu sagen das ja in scrabble spiel die buchstaben verdreht sind. Und das ja das "Problemchen" ist :)
soll ja so ein kleines fuschprogramm sein :)


Manu
04.09.2002, 16:57
Sorry, hab nicht ganz kapiert, was du vorhast.
Du willst aus einem Array von buchstaben alle möglichen Kombinationen bilden und diese dann mit einer langane Liste deutscher korrekter Wörte abgleichen?

Melanie
04.09.2002, 17:04
oh, ich glaub das wird aufwendig.

Aber in Prinzip ist das richtig. Es soll die Wörter aus der Liste nehmen und nachschauen welches die Buchstaben enthält die ich ihn gebe.

Manu
04.09.2002, 17:07
Naja, aufwändig ist es in der Tat, aber einmal gecoded eben dann für alle Wörter/Buchstaben einsetzbar.

Zudemw ürde diese Art des vergleichs mit eine Liste einiges an Rechenzeit brauchen.. wofür is es gedacht?

Eine KI zu einem Scrabble Spiel?

DerWolf
04.09.2002, 17:08
Wenn ich bloß genau wüsst was bei scrabble is ;) Aber ich denk du gibts von mir aus 5 Buchstaben an, und der PC soll dann kontrollieren in welchem Wort in der Text-Datei alle diese buchstaben enhalten sind oder? Sorry, bin heut etwas langsam ;)

Nachtrag:
Habs nu kapiert. Wollt nun nich noch ein beitrag schreiben.

Melanie
04.09.2002, 17:33
Jah, das ist richtig, das will ich auch machen. :)

Ich habe einen chat mal gesehen das es einen Scrabbl script gibt. Und da man ja mit delphi nicht in aderes programm eingreifen will (noch schwieriger :)) dachte ich mir das müsste über den buffer funktionieren.

der script an sich gibt das wort mit durchgemischten buchstaben vor und man muss es erraten. Das will ich etwas erleichtern.

Manu
04.09.2002, 17:36
Das is aber nicht Scrabble.. Scrabble is doch das mit dem Spielfeld, wo man die buchstaben zu Wörtern legt, oder? *grübel*

Egal.. wenn du es so willst, dass du eine Liste mit lauter Wörtern aht, dein Programm dann dort irgendeins rausnimmt und es zermurkst sozusagen und dem user vorlegt, dann geht das recht einfach.


Ist es so gedacht?
Dann geb ich dir die Theorie gleich :)

Melanie
04.09.2002, 17:43
Der soll einfach die wörter in der liste mit den Buchstaben vergleichen die ich ihn gegeben hab.

So ist das glaub ich am einfachsten erklärt :)

P.S Ungefähr sowas ist das dann auch :) ich krieg die Buchstaben kopiere sie. Und das zukünftige Programm vergleicht sie mit ein paar ausgewählten wörtern in meiner liste (textdatei vielleicht) Also ob dieselben Buchstaben schon irgendwo sind. :)

Hoffentlcih hab ich das verstöndlch ausgedrückt und niemanden noch mehr verwirrt.

Melanie sagt: Danke :)

Manu
04.09.2002, 17:47
Ich muss nochmla nachhaken :)

1. Es gibt eine txt Datei, in jeder Zeile steht ein Wort. Dein programm sucht sich ein zufälliges Wort aus der Liste. Merkt sich das Wort, verdreht dann die Buchstaben des Wortes und gibt die einzelnen Buchstaben in falscher Reihenfolge dem User. Dieser muss dann das Wort eraten. Wenn er dasselbe Wort eingibt, wie das, dass gespeichert ist vom Anfang, dann korrekt, gewonnen, aus.

oder..

2. Es gibt ne txt Datei mit den Wörtern. Der User bekommt rein zufällig irgendwelche Buchstaben ausm Alphabet vorgesetzt und soll daraus ein Wort bilden. Um zu prüfen, ob es das Wort gibt, wird seine Eingabe mit der Liste abgeglichen. Die Liste müsste also theorethisch den Duden enthalten;)

Welche Varainate denn nun genau? :)

Melanie
04.09.2002, 17:56
:) Dankeschön das du dir soviel mühe machst um mir zu helfen.

Es ist eher die 2te Variante. Ich bekomm ein paar "zuffälige" Buchstaben und möchte dann diese mit meiner Liste vergleichen wo in jeder Zeile ein Wort drin steckt. :)

p.s das mit duden ist nicht umbedingt nötig, da der wortschatz von den spiel relativ gering ist. Es sind halt nur ungefähr 150 Wörter dadrin :)

Manu
04.09.2002, 17:58
Also.. der Anwender bekommt also zufällige Buchstaben.. wieviele? auch zufällig?

Dann überlegt der Anwender und gibt ein Wort ein, mit so vielen der Buchstabenw ie möglich.

Dann sucht das Programm nach diesem Wort in der Liste. Wenn es drin steht, dann gibts Punkte. Je nachdem wie viele der Buchstaben verwendet wurden mehr oder weniger..

So?

Melanie
04.09.2002, 18:08
so ungefähr, der Anwender bekommt zuffälige Buchstaben, es ist eine Zuffälige menge von 6 bis max 16 Buchstaben. Und das Programm soll diese Buchstaben Mit meinen Wörtern in der Textdatei vergleichen. :). Und die Rechenzeit könnte man auch verkürzen, indem man es so einstellt das das Programm nur die Wörter absucht die die gleiche anzahl der buchstaben haben :).
(ist mir jetzt eingefallen).

P.S die Buchstaben zahl ist irrelewant. Da es immer gleich viel punkte gibt :).

Manu
04.09.2002, 18:11
So.. und nochmla Nachhaken :)

Dein programm soll selbst aus den Zufallsbuchstaben ein Wort aus der Liste suchen?

Oder de User sieht die Zufallsbuchstaben, denkt sich das Wort aus, gibt es ein und danachw ird dann gesucht?

Melanie
04.09.2002, 18:13
das Programm soll mit den Zufallsbuchstaben ein Wort finden.

Manu
04.09.2002, 18:15
Achso, doch die komplizierte Version ;)

Du musst in einer Schleife alle Möglichen Kombinationen in eine Stringliste adden, danach in einer Schleife nach allen Einträgen der Stringliste in der txt scuhen.

Soweit die Theorie :)

Ich werde mich mla nach Codeschnippseln umsehen.

mfg

Melanie
04.09.2002, 18:22
uff, danke :) Also eine Prozedur erstellen wo immer "if" "else" "then" die wörter In der Textdatei abgesucht werden? Und dass für jeden Buchstaben was ich gekriegt hab.

DerWolf
04.09.2002, 20:23
Ich hab schon mal ein Beispiel geschrieben, dauert aber etwas lang je länger die Wörter werden. Ich habs ma angehängt. meinst du sowas?

PS:
Da is noch ein Problem wenns mehrere Wörter mit genau den gleichen Buchstaben gibt, zeigt immer nur eins an. kann man aber schnell ändern. Dabei ist eine txt Datei in der die vergleichswörter stehn. Die müssen aber Alphabetisch geordnet sein!

Melanie
04.09.2002, 23:46
wow, suuper, vielen dank. Sowas wollte ich auch machen. (hätte halbes Jahr dran gesessen :) )





Super Board. Hier wird einen noch geholfen.


Vielen Dank


P.S Hab eine halbe stunde drangessesen und gewartet bis er mir das zusammenreimt und dann gemerkt dass es and der Alphabethischen reihenfolge liegt *klatsch an den kopf* :)

DerWolf
05.09.2002, 12:41
Melanie, du solltest das eigentlich als beispiel nehmen und versuchen ein eigenes Verfahren zu entwickeln. Außerdem sind da noch kleinere Bugs drinnen. Und effizient isses auch nich. Versuch besser mal selber was zu machen anstatt mein Code zu nehmen :) Bye

Melanie
05.09.2002, 19:23
werde ich auch machen. Mir hat der nötige ansatz gefehlt. Den du mir jetzt gegeben hast. Und deshalb danke ich dir.

belze
05.09.2002, 19:32
mal so theoretisch:
Wenn das script 6 buchstaben hat und erst alle möglichen Kombis
ausrechnen soll, wären das insgesamt 6!, also 720, also nicht allzu viel. Sollte an und für sich kein Problem sein für nen Rechner, das Vergleichen mit einer Wortliste, wie lange würde das dauern, wenn wir mal von 1000? Wörtern ausgehen?
Scrabble auffem Compi wäre mal was feines :)

Manu
05.09.2002, 19:39
1. 6 Buchstaben sind zuwenig.. ;)

2. 1000 Wörter is ein Witz :) Frag mal info@duden.de wieviele Wörter es gibt :D

Trotzdem is das auf schnellen PCs nicht wirklich ein Problem, allerdings wäre es dann sinnvoller den Algorithmus in Inline Assembler zu implementieren, denn Geschwindigkeitsrekorde stellt Delphi keien auf :/

Melanie
05.09.2002, 22:39
uff, assembler ist für mich doch etwas zu hoch.

dürfte ich eine kleine zwischenfrage einschieben?

könnte mir jemand erklären was hier genau geschiet?



function TForm1.Search(s: string; l, r: integer): boolean;
var c: integer;
begin
if l <= r then
begin
c := Round((l+r)/2);
if UpperCase(slist[c]) < s then
result := Search(s, c+1, r)
else if UpperCase(slist[c]) > s then
result := Search(s, l, c-1)
else
result := true;
end else
result := false;
end;

Patrik Graf
05.09.2002, 23:56
Das tolle an der Pascal-Syntax ist, das man sie lesen kann wie ein Buch...

Kurz gesagt, es passiert genau das was da steht... :D


if l <= r then begin //Wenn l kleiner als r ist dann...

c := Round((l+r)/2); //Der Variablen c den gerundeten Wert von (l+r)/2 zuweisen

if UpperCase(slist[c]) < s then //Wenn Zeile c kleiner als s ist, dann...

result := Search(s, c+1, r) //Die Funktion ruft sich selbst wieder auf um im selben String etwas neues zu prüfen. Das Ergebnis wird dem Ergebnis des jetztigen Aufrufs zugewiesen

else if UpperCase(slist[c]) > s then //Das selbe wie oben, nur ist die Abfrage anders...

result := Search(s, l, c-1) //...

else result := true; //...

end else result := false; //...


Eigentlich nicht sehr schwer zu verstehen... :D Soetwas nennt man eine rekursiven-Funktionsaufruf, was nicht´s anderes bedeutet, als das die Funktion sich eben so lange aufruft, bis sie das Ergebnis hat...

DerWolf
06.09.2002, 11:27
Das nennt man binäres Suchen :) Deshalb muss die Liste der Wörter auch in alphabetischer Reihenfolge sein und jedes Wort darf nur einmal vorkommen. Dachte mir ist vielleicht der effektivste Weg zum Finden des Wortes in der Liste. Weil du da maximal ln(n+1)/ln(2) Vergleiche machen musst. Bei 1000 Wörter also max. 10 Vergleiche :) Das Problem ist, alle Möglichkeiten anhand der Buchstaben durchzuspielen. Da müsste man sich etwas schnelles Überlegen. Ich hab hier nur eine Rekursion genutzt um alle möglichen Anordnungen der Buchstaben zu bekommen. Dann hab ich die Liste mit den Wörtern in der Liste verglichen. Aber ich denk da gibts noch bessere Sachen. Vielleicht fällt euch ja was gutes ein :)

Melanie
12.09.2002, 19:53
:) vielen dank für die erklärungen. Werde jetzt versuchen das proggy zu beschleunigen :) aber sonst funtioniert das wunderbar.

mumpf
29.08.2004, 17:22
Hallo,

ich mache grade so was ähnliches. Hat jemand eine tolle Wortliste?
Vielleicht so den aktuellen oder recht aktuellen Duden als Liste im Optimalfall?

Danke und viele Grüße von

mumpf

Patrik Graf
30.08.2004, 07:59
Hallo,

ich mache grade so was ähnliches. Hat jemand eine tolle Wortliste?
Vielleicht so den aktuellen oder recht aktuellen Duden als Liste im Optimalfall?

Danke und viele Grüße von

mumpf
Ich würde es mal mit info@duden.de versuchen... schreib denen ne Mail das du ein Scrabble coden willst und ne wortliste bräuchtest. Müssen ja nicht alle Wörter sein... dann musst du nur noch ein wenig rumnerfen falls das nichts werden sollte und irgendwann erbarmt sich dann doch einer und schickt dir was... bin ich mir ziemlich sicher. :D

bullshit
02.09.2004, 21:29
Kleine Anmerkung

Hier wird die Frau bevorzugt *lach* .. is ok ..

Wortliste:
ich hab mal sowas gebraucht ... und hab im netz nach *dictionarymaker* (google zum beispiel) ... und es gibt ja soviele deutsche bücher zum downloaden ... ja und damit kannst dir schon eien große liste machen ...

mach dies aber nur fals du keine liste vom duden bekommst ...

see ya
bullshit

Manu
02.09.2004, 23:27
Was soll das denn bringen? Ein dictionary maker erstellt doch keine Liste mit Wörtern, die es gibt, woher soll er die denn auch kennen, wenn er selbst keine Liste hat? ;)
Ein Dictionary Maker erstellt dir einfach ne Liste mit allen möglichen "Buchstabenkombinationen".
Ich glaub kaum, dass bei nem Scrabble Game das Wort "axxufgtp" gültig sein soll oder? :)