Athene Posted March 8 Report Share Posted March 8 Hey, Ich würde gerne ein Textbasiertes Rollenspiel, wie in den 70ern programmieren und möchte die Eingabe des Spielers analysieren. Jetzt hab ich gelesen, dass man das am besten mit einem Parser macht. Allerdings habe ich keine Ahnung wo ich anfangen soll, einen zu programmieren. Hat da vielleicht jemand Ideen oder Tipps wie das funktioniert? Quote Link to comment Share on other sites More sharing options...
Sascha Posted March 8 Report Share Posted March 8 Moin, ein "Parser" ist ein komplett abstraktes Konzept. Es ist einfach nur ein Ding, dass Text anschaut und versucht, diesen so umzuwandeln, dass das Programm damit etwas anfangen kann. Das kannst du implementieren, wie du willst. Ein simpler Ansatz wäre z.B. so: public void Parse(string input) { if (IsCommand(input, "go to", out var place)) { GoTo(place); return; } if (IsCommand(input, "go", out var direction)) { GoTo(direction); return; } } private void GoTo(string place) { // ... } private void Go(string direction) { // ... } private bool IsCommand(string input, string command, out string parameter) { parameter = null; if (input == command) { return true; } if (input.StartsWith(command + " ")) { parameter = input.Substring(command.Length + 1); return true; } return false; } IsCommand schaut, ob der gegebene Input gleich dem gegebenen Kommando ist. Wenn nicht, wird noch geschaut, ob der Input mit dem Kommando anfängt, danach aber noch etwas kommt. In beiden Fällen wird true zurück gegeben, und in letzterem noch alles, was nach dem Kommando im Input steht. Parse geht jetzt mithilfe dieser Methode durch eine Reihe von Kommandos und der erste, der erkannt wird, kriegt seine entsprechende Methode ausgeführt. Jetzt brauchst du noch irgendwelche Datenstrukturen für deine Welt. Schließlich macht dasselbe Kommando unterschiedliche Dinge, wenn man woanders ist oder irgendwelche anderen Bedingungen sich geändert haben. Die Methoden da oben müssen also je nach Situation andere Ergebnisse haben. Es gehört also noch ein bisschen mehr dazu als das Verstehen von Eingaben, aber da es ja um einen Parser ging, entmystifiziert das Beispiel da oben das Thema hoffentlich. Man kann das bestimmt noch viel schöner machen, z.B. mit einem Dictionary - aber funktionieren würde es auch so schon. Quote Link to comment Share on other sites More sharing options...
gombolo Posted March 8 Report Share Posted March 8 Ich würde damit anfangen eine Klasse zu programmieren die einen Text in einzelne Wörter trennen kann und diese in einer Liste speichert. Danach würde ich mit der Analyse des Textes fortfahren... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.