{"id":148,"date":"2012-05-27T19:35:16","date_gmt":"2012-05-27T17:35:16","guid":{"rendered":"https:\/\/herr-rau.de\/blogs\/inform\/?page_id=148"},"modified":"2012-08-23T17:09:02","modified_gmt":"2012-08-23T15:09:02","slug":"die-regeln-der-welt-inform-7-als-mvc-betrachtet","status":"publish","type":"page","link":"https:\/\/herr-rau.de\/blogs\/inform\/?page_id=148","title":{"rendered":"Aktionen 1 &#8211; Die Regeln der Welt"},"content":{"rendered":"<p><em>Kurzfassung: Regeln bei Inform 7 sind so etwas wie Event-Handler. Der Spieler tippt etwas ein, das wird in ein Event umgewandelt (eine gew\u00fcnschte Aktion), und die Regeln legen in verschiedenen Ebenen fest, wie mit diesem Wunsch umgegangen wird.<\/em><\/p>\n<p>Jede Welt hat ihre Naturgesetze, und auch eine Spielwelt hat ihre Regeln. <\/p>\n<p><strong>Was passiert, wenn man einen Apfel, den man in der Hand h\u00e4lt, fallen l\u00e4sst?<\/strong><br \/>\n(Antwort: Der liegt danach am Boden. Sonst passiert nichts, insbesondere ist der Apfel also nicht zermatscht oder so etwas. So lebensnah ist unsere Spielwelt erst einmal nicht.)<\/p>\n<p><strong>Was passiert, wenn man einen Apfel, den man auf dem Boden findet, nimmt?<\/strong><br \/>\n(Antwort: Man hat danach den Apfel in seinem Besitz. Der Apfel ist also insbesondere nicht mehr auf dem Boden.)<\/p>\n<p><strong>Was passiert, wenn man einen Apfel, den man in der Hand h\u00e4lt, isst?<\/strong><br \/>\n(Antwort: Der Apfel ist danach weg. Sonst passiert nichts, insbesondere hat man jetzt nicht mehr Vitamine oder Energie oder so etwas.)<\/p>\n<p>Dieses Verhalten der Welt wird durch Regeln bestimmt, die <code>rules<\/code>. Die wichtigsten Regeln sind die, die die Aktionen der Spielerfigur betreffen. Zwar gibt es auch Regeln, die ohne Zutun des Spielers eine Rolle spielen, aber im Gro\u00dfen und Ganzen ist die Spielwelt eine statische Welt, und Ver\u00e4nderungen in ihr werden vor allem durch Aktionen der Spielerfigur ausgel\u00f6st, also mittelbar durch das, was der Spieler in die Eingabezeile eintippt.<\/p>\n<hr\/>\n<h3>Was geschieht, wenn der Spieler etwas eintippt<\/h3>\n<p><strong>Stufe 1: Das Ein- und Ausgabefenster (die Kommandozeile)<\/strong><\/p>\n<p>Jedes Spiel beginnt damit, dass der Spieler erst einmal den ausgegebenen Text in seinem Textfenster liest. Daraufhin gibt er eigenen Text in die Eingabezeile ein. Das kann zum Beispiel &#8220;take the apple&#8221; oder &#8220;put the apple in the box&#8221; sein, man kann aber genauso gut &#8220;grmblhx nix&#8221; schreiben.<\/p>\n<p>Der Parser versucht zu verstehen, was der Spieler gemeint hat. Dazu versucht er als Erstes, ein Verb zu identifzieren: take, drop, eat &#8211; Inform kennt etwa 140 verschiedene davon, <code>commands<\/code> genannt. Diesen Verben sind <strong>Aktionen<\/strong> zugeordnet.<br \/>\nZum Beispiel beziehen sich &#8220;drop the apple in the box&#8221; und &#8220;put the apple in the box&#8221; trotz der verschiedenen Verben die gleiche Aktion: <code>inserting something into something.<\/code><br \/>\nDaf\u00fcr beziehen sich &#8220;open the box&#8221; und &#8220;open the locked door with the key&#8221; trotz des gleichen Verbs auf zwei verschiedene Aktionen: <code>opening something<\/code> beziehungsweise <code>unlocking something with something<\/code>.<br \/>\nEs ist Aufgabe des Parsers herauszufinden, welche Aktion der Spieler meint. Dann versucht er, den eventuell vorhandenen Rest des Textes in ein direktes Objekt und vielleicht noch ein indirektes Objekt zu teilen. Danach schickt er die Aktion samt den eventuellen Objekten an die n\u00e4chste Stelle zur Weiterverarbeitung.<\/p>\n<p><strong>Stufe 2: \u00dcberpr\u00fcfen der Aktion, ob sie ausgef\u00fchrt werden kann<\/strong><\/p>\n<p>Nicht alle Aktionen sollen ausgef\u00fchrt werden. &#8220;Iss die Kiste&#8221;, &#8220;Nimm den Ozean&#8221;, &#8220;Zieh die Jacke aus&#8221; (beziehungsweise die Aktionen, die dadurch ausgel\u00f6st werden) werden m\u00f6glicherweise nicht ausgef\u00fchrt. Daf\u00fcr sorgen sogenannte <strong>check rules.<\/strong> Die lauten sinngem\u00e4\u00df etwa:<\/p>\n<ul>\n<li>Man kann nichts essen, was nicht essbar ist.<\/li>\n<li>Man kann nichts nehmen, was nicht tragbar ist.<\/li>\n<li>Man kann nichts ausziehen, was man gar nicht anhat.<\/li>\n<\/ul>\n<p>Von diesen Check-Regeln gibt es sehr viele. Zu jeder Aktion (Inform kennt etwa 80 davon) geh\u00f6rt ein Satz von Check-Regeln, die angeben, unter welchen Bedingungen die Aktion scheitert. Wenn die Aktion scheitert, auch das ist in den Check-Regeln jeweils angegeben, wird Stufe 1 angewiesen, eine entsprechende Nachricht an den Spieler auszugeben. Also etwa: &#8220;So etwas kann man nicht essen\/tragen&#8221; oder &#8220;Du kannst nichts ausziehen, was du gar nicht anhast.&#8221; <\/p>\n<p>Wenn keine Check-Regel Einspruch erhebt, dann war die Aktion erfolgreich, und jemand anderes k\u00fcmmert sich darum, was dann passiert.<\/p>\n<p><strong>Stufe 3: Die Spielwelt und ihr Zustand<\/strong><\/p>\n<p>Die Spielwelt ist voller Objekte, und jedes Objekt hat bestimmte Attribute und Attributwerte. Aktionen des Spielers k\u00f6nnen (wenn sie ausgef\u00fchrt werden) den Zustand der Objekte ver\u00e4ndern: der gegessene Apfel wird aus dem Spiel genommen, der fallen gelassene Apfel landet auf dem Boden und verl\u00e4sst den Besitz der Spielfigur.<br \/>\nZu jeder Aktion geh\u00f6rt ein Satz von <strong>carry out rules<\/strong>. Die geben an, was in der Spielwelt geschieht, wenn die Aktion tats\u00e4chlich ausgef\u00fchrt wird.<br \/>\nDie lauten sinngem\u00e4\u00df etwa:<\/p>\n<ul>\n<li>Ein gegessener Gegenstand verschwindet aus der Welt.<\/li>\n<li>Ein fallen gelassener Gegenstand ist nicht mehr im Besitz der Person, die ihn hat fallen lassen, und befindet sich in dem Raum, in dem sich die Person aufh\u00e4lt.<\/li>\n<\/ul>\n<p>Carry-out-Regeln k\u00f6nnen oft kurz sein, da die Frage, ob sie \u00fcberhaupt angewendet werden k\u00f6nnen, an die Check-Regeln delegiert wird.<\/p>\n<p><strong>Zur\u00fcck zu Stufe 1: Das Ein- und Ausgabefenster (die Kommandozeile)<\/strong><\/p>\n<p>Zu jeder Aktion geh\u00f6rt auch ein Satz von <strong>report rules<\/strong>. Die geben an, was nach dem erfolgreichen Ausf\u00fchren der Aktion an den Spieler als Text ausgegeben wird. Der soll ja auch etwas mitkriegen davon, was sich in der Welt so ge\u00e4ndert hat (und was nicht). Und dann geht der ganze Zyklus wieder von vorne los.<\/p>\n<hr\/>\n<h3>Zusammenfassung<\/h3>\n<p>Beim Analysieren einer Aktion werden nacheinander ausgef\u00fchrt\/\u00fcberpr\u00fcft:<\/p>\n<ul>\n<li>alle Check-Regeln, die zu der Aktion geh\u00f6ren (und wenn eine davon Einspruch erhebt, wird statt einer Weiterverabeitung sinnvollerweise eine Nachricht an die Textausgabe gesendet);<\/li>\n<li>alle Carry-out-Regeln, die zu der Aktion geh\u00f6ren, und die Welt entsprechend ge\u00e4ndert;<\/li>\n<li>alle Report-Regeln, die zu der Aktion geh\u00f6ren, und die dem Spieler sinnvollerweise sagen, was geschehen ist.<\/li>\n<\/ul>\n<p>Als Diagramm:<br \/>\n<a href=\"https:\/\/herr-rau.de\/blogs\/inform\/files\/aktionen-mvc-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/herr-rau.de\/blogs\/inform\/files\/aktionen-mvc-1-1024x575.png\" alt=\"\" title=\"aktionen-mvc-1\" width=\"584\" height=\"327\" class=\"alignnone size-large wp-image-226\" srcset=\"https:\/\/herr-rau.de\/blogs\/inform\/files\/aktionen-mvc-1-1024x575.png 1024w, https:\/\/herr-rau.de\/blogs\/inform\/files\/aktionen-mvc-1-300x168.png 300w, https:\/\/herr-rau.de\/blogs\/inform\/files\/aktionen-mvc-1-500x281.png 500w, https:\/\/herr-rau.de\/blogs\/inform\/files\/aktionen-mvc-1.png 1030w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/herr-rau.de\/blogs\/inform\/files\/aktionen-mvc-2.png\">(alternative Darstellung mit etwas mehr Text)<\/a><\/p>\n<p><em>Damit will ich sagen, dass Inform intern nach Model-View-Controller aufgebaut ist. Es gibt Ausnahmen, also Carry-out-Regeln, die eine Textausgabe an den Spieler schicken, wie bei <code>examining<\/code> &#8211; ohne Textausgabe k\u00f6nnte man nicht sagen, dass die Aktion tats\u00e4chlich ausgef\u00fchrt worden w\u00e4re. Aber es gibt ein klares Modell, eine klare Text-Ein-\/-ausgabe Aktionsw\u00fcnsche des Spielers, die von einer Kontrollinstanz \u00fcberpr\u00fcft werden. Tats\u00e4chlich stehen alle Regeln in Regelb\u00fcchern, die der Reihe nach durchgegangen werden.<\/em><\/p>\n<hr\/>\n<p>Check-, Carry-out- und Report-Regeln muss man in der Regel nicht selber schreiben, die bringt Inform gleich mit. Man braucht sie eigentlich nur dann, wenn man Inform eine neue Aktion beibringen m\u00f6chte, die es noch nicht gibt &#8211; sagen wir: tanzen. Dann sollte es Check-, Carry-Out- und Report-Regeln f\u00fcr diese Aktion geben.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kurzfassung: Regeln bei Inform 7 sind so etwas wie Event-Handler. Der Spieler tippt etwas ein, das wird in ein Event umgewandelt (eine gew\u00fcnschte Aktion), und die Regeln legen in verschiedenen Ebenen fest, wie mit diesem Wunsch umgegangen wird. Jede Welt &hellip; <a href=\"https:\/\/herr-rau.de\/blogs\/inform\/?page_id=148\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":145,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-148","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/herr-rau.de\/blogs\/inform\/index.php?rest_route=\/wp\/v2\/pages\/148","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/herr-rau.de\/blogs\/inform\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/herr-rau.de\/blogs\/inform\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/herr-rau.de\/blogs\/inform\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/herr-rau.de\/blogs\/inform\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=148"}],"version-history":[{"count":0,"href":"https:\/\/herr-rau.de\/blogs\/inform\/index.php?rest_route=\/wp\/v2\/pages\/148\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/herr-rau.de\/blogs\/inform\/index.php?rest_route=\/wp\/v2\/pages\/145"}],"wp:attachment":[{"href":"https:\/\/herr-rau.de\/blogs\/inform\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}