IF-Forum

» IF-Forum - Autorencafé - Schreiben! - I6: Verben überprüfen
AntwortenNeues ThemaNeue Umfrage

I6: Verben überprüfen

Geschrieben um 17:20 am 14.09.2010 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062
<td valign="top"><div class="post"><p>Ich möchte gerne das Verben-Wörterbuch eines Spiels durchsuchen und überprüfen, ob Verben definiert wurden, die bestimmte Endungen tragen (&#8216;e&#8217; und &#8216;en&#8217;).</p> <p>Wie man die Endungen bei einer Vokabel prüft, kann ich mir gerade noch zurechtlegen, aber wie man das Lexikon von Z-Machine und Glulx durchsucht, ist mir ein Rätsel.</p> <p>Was muss ich machen? Wo muss ich nachschlagen?</p> <p>Hilfe!</p> <p>Edit: Okay, für die Z-Maschine habe ich etwas in der Art hinbekommen. Muss ja wohl in Glulx auch irgendwie gehen &#8230;</p> <p>Es werden nur neue, vom Autor definierte, Verben berücksichtigt.</p> <p>&#8220;`Array LibcheckIgnoreVerbs table</p> <p>    &#8216;baumle&#8217;   &#8216;durchstoe&#8217; &#8216;ende&#8217;    &#8216;klettre&#8217;   &#8216;konsultie&#8217;</p> <p>    &#8216;lage&#8217;     &#8216;meldungen&#8217; &#8216;nee&#8217;     &#8216;noe&#8217;       &#8216;oeffne&#8217;</p> <p>    &#8216;pronomen&#8217; &#8216;punkte&#8217;    &#8216;restore&#8217; &#8216;save&#8217;      &#8216;schnueffe&#8217;</p> <p>    &#8216;scope&#8217;    &#8216;score&#8217;     &#8216;showme&#8217;  &#8216;streichle&#8217; &#8216;superbrie&#8217;</p> <p>    &#8216;trace&#8217;    &#8216;tree&#8217;      &#8216;verbose&#8217; &#8216;verschlie&#8217; &#8216;wedle&#8217;</p> <p>;</p> <p>&#91; YLibcheck i j k l last last2 ignore<em>verbs</em>num;</p> <p>    ignore<em>verbs</em>num = LibcheckIgnoreVerbs&#8212;>0;</p> <p>    for &#40;i = dict<em>start &#58; i &lt;= dict</em>end-dict<em>entry</em>size &#58; i=i+dict<em>entry</em>size &#41; &#123;</p> <p>        j = i->#dict_par1;</p> <p>        if &#40;0 ~= j&amp;1&#41; &#123;</p> <p>            for &#40;k = 1 &#58; k &lt;= ignore<em>verbs</em>num &#58; k++ &#41;</p> <p>                  if &#40;LibcheckIgnoreVerbs&#8212;>k == i&#41; j=-1;</p> <p>            if &#40;j==-1&#41; continue;</p> <p>            last = LastCharacterAddress&#40;i&#41;;</p> <p>            last2 = LastCharacterAddress&#40;i, 1&#41;;</p> <p>            if &#40;last == &#8216;e&#8217; || &#40;last == &#8216;n&#8217; &amp;&amp; last2 == &#8216;e&#8217;&#41; &#41;</p> <p>                print &#8220;Das Verb &#8216;&#8221;, &#40;address&#41; &#40;i&#41;,</p> <p>                      &#8220;&#8217; endet mit &#8216;e&#8217; oder &#8216;en&#8217;.^&#8221;;</p> <p>        &#125;</p> <p>     &#125;</p> <p>     print &#8220;^^&#8221;;</p> <p>&#93;;&#8220;`</p> </div></td>
Geschrieben um 08:46 am 15.09.2010 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Retired Gumby
Beiträge: 702
<td valign="top"><div class="post"><p>Blöderweise werden die globalen Variablen dict<em>start, dict</em>end und dict<em>entry</em>size nur für Z-Code, aber nicht für Glulx gesetzt. Ansonsten würde Dein Code auch für Glulx funktionieren.</p> <p>Leider gibt die <a href="http://www.eblong.com/zarf/glulx/technical.txt">Glulx Inform Technical Reference</a> keinen genauen Aufschluss über den Ort des Dictionaries, daher muss man sich diese Werte aus der Rouitine Tokenise__ zusammensuchen.</p> <p>Schneller Fix:</p> <p>&#8220;`&#91; YLibcheck i j k l last last2 ignore<em>verbs</em>num;</p> <p>    ignore<em>verbs</em>num = LibcheckIgnoreVerbs&#8212;>0;</p> <p> </p> <p>    #ifdef TARGET_GLULX;   </p> <p>    dict<em>start = #dictionary</em>table + WORDSIZE;</p> <p>    dict<em>entry</em>size = DICT<em>WORD</em>SIZE + 7;</p> <p>    dict<em>end = dict</em>start + #dictionary<em>table&#8212;>0 * dict</em>entry_size;</p> <p>    #endif;</p> <p>   </p> <p>    for &#40;i = dict<em>start &#58; i &lt; dict</em>end &#58; i = i + dict<em>entry</em>size &#41; &#123;</p> <p>        j = i->#dict_par1;</p> <p>        if &#40;0 ~= j&amp;1&#41; &#123;</p> <p>            for &#40;k = 1 &#58; k &lt;= ignore<em>verbs</em>num &#58; k++ &#41;</p> <p>                  if &#40;LibcheckIgnoreVerbs&#8212;>k == i&#41; j=-1;</p> <p>            if &#40;j==-1&#41; continue;</p> <p>            last = LastCharacterAddress&#40;i&#41;;</p> <p>            last2 = LastCharacterAddress&#40;i, 1&#41;;</p> <p>            if &#40;last == &#8216;e&#8217; || &#40;last == &#8216;n&#8217; &amp;&amp; last2 == &#8216;e&#8217;&#41; &#41;</p> <p>                print &#8220;Das Verb &#8216;&#8221;, &#40;address&#41; &#40;i&#41;,</p> <p>                      &#8220;&#8217; endet mit &#8216;e&#8217; oder &#8216;en&#8217;.^&#8221;;</p> <p>        &#125;</p> <p>     &#125;</p> <p>     print &#8220;^^&#8221;;</p> <p>&#93;;&#8220;`</p> <p>Natürlich wäre es sauberer, diese Variablen dort, wo auch die Z-Code-Pendants gesetzt werden, zu definieren, damit alles durchgängig ist.</p> <p>Das habe ich unter I6 mit Latin1-Glulx getestet. Ich hoffe, dass der Code auch mit Unicode-Glulx funktioniert.</p> <p>Oh, und wenn man das Kleiner-Gleich in ein einfaches Kleiner-Als umwandelt, spart man sich die Subtraktion von dict<em>entry</em>size.</p> </div></td>
Geschrieben um 10:49 am 15.09.2010 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

Super, alles perfekt!

Danke!

AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz