Jump to content
Unity Insider Forum

Parser Erstellen


Athene
 Share

Recommended Posts

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? 

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...