if-de :: Forum Foren-Übersicht
Autor Nachricht
<  Gib deinen Namen ein!
Tanan
BeitragVerfasst am: Fr, 28 Feb 2003 - 19:13  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 416
Wohnort: Essen

Folgendes schwebt mir vor:

Code:
Bitte gebe deinen Namen ein!

> Jens

Hallo Jens!

Wie läßt sich sowas mit TAG realisieren? Ich habe versucht, einen "String sname" zu definieren und in der "Aktion Verbparser"

Code:
Sei sname wort

zu schreiben. Das führt aber schon beim Kompilieren zu einer Fehlermeldung.

Danke im Voraus!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Ally
BeitragVerfasst am: Fr, 28 Feb 2003 - 21:02  Antworten mit Zitat
Kompassleser
Kompassleser


Anmeldungsdatum: 25.08.2002
Beiträge: 142

(Blah)

Zuletzt bearbeitet von Ally am Sa, 1 März 2003 - 11:47, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Sa, 1 März 2003 - 11:36  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

T.A.G. arbeitet manchmal wie die Z-Maschine: Ihm bekannte Wörter werden in einem Wörterbuch abgelegt. Wenn Das Wort 'jens' irgendwo im Code vorkommt, wird es erkannt, als (beliebiger) Name eines Spielers nicht.

Man muss hier den Umweg über Felder gehen und den Namen in einem Verb- oder Objektparser erkennen. Ich hatte noch ein (einfaches) Beispiel, in dem der Spiele sagen kann "Ich heiße Bernd" und dann Bernd hieß:

Code:

! Feld für den Namen
Feld MeinName (13)

! Ausgabe des Namens
Aktion TextName
Ausf
  Schleife Aux 1 meinName.0
    Sei Aux1 MeinName.Aux
    Text '[Char Aux1]/'
  Ende
EndeAusf

! Eine Deko als Hilfsobjekt
Deko    Metaname
Name    'Name an sich' m
Subst   '.' m

! Das Un-Verb 'ich heiße' definieren
Synonym 'ich heisse' 'ichheisse'

! Befehl zur namensgebung:
! Eigentlich wird bereits alles im ObjParser gemacht
Bef    Ich_Heisse
Name   'dich nennen'
Verb   'ichheisse'
Syntax dasObj (allg)
Ausf
  Text 'OK, du heißt jetzt [TextName].'
EndeAusf

! Belegen des Namens
Aktion ObjParser
Ausf
  Wenn (aVerb = 'ichheisse') und (Wortlänge) dann
    Sei MeinName.0 Wortlänge
    Schleife Aux 1 Wortlänge
      Sei MeinName.Aux Wort.Aux
    Ende
    Sei aObj Metaname
  Ende
EndeAusf


Mit diesem Befehl kann sich der Spieler einen Namen geben, der genau ein Wort lang ist. Der Name wird auf meinName abgelegt: meinName.0 enthält die Länge des Namens, die weiteren Einträge den Namen selbst. (Hallo, Pascal!)

Folgende Erweiterung erlaubt es, längere Namen anzugeben, wobei allerdings jedes Wort auf zwölf Buchstaben beschränkt ist:

Code:

Feld meinName (25)

Aktion TextName
Ausf
  lokal aux  ! Schleifenvariable
  lokal caps ! Großschreibungs-Flagge

  setze caps
  Schleife Aux 1 meinName.0
    ! Ein Leerzeichen muss mit _ simuliert werden
    wenn (MeinName.Aux = "_") dann
      Text ' /'
    sonst
      wenn (caps) dann
        ! Großbuchstabe
        Text '[Char MeinName.Aux]/'
      sonst
        ! Kleinbuchstabe
        Text '[char MeinName.Aux]/'
      ende
    ende

    ! Ein Leerzeichen oder Bindestrich
    ! bewirkt Großschreibung des nächsten Buchstabens
    lösche caps
    wenn (MeinName.Aux = "_" "-") setze caps
  Ende
EndeAusf

...

Aktion ObjParser
Ausf
  lokal x, y, z

  Wenn (aVerb = 'ichheisse' 'heisse') dann
    sei z MeinName.0
    lösche MeinName.0
    solange /(wort = '')
      Inkr MeinName.0 Wortlänge
      Schleife x 1 Wortlänge
        inkr y
        wenn (y < 25) Sei MeinName.y Wort.x
      Ende
      nächstesWort
      wenn /(wort = '') dann
        inkr y
        Inkr MeinName.0
        sei Meinname.y "_"
      Ende
    Ende

    ! Objekt belegen, wenn ein Name eingegeben wurde
    wenn (MeinName.0) dann
      Sei aObj Metaname
      wenn (meinName.0 > 24) dann sei meinName 24
    sonst
      sei MeinName.0 z
    Ende
  Ende
EndeAusf


T.A.G. erkennt die Notation " " (Leerzeichen zwischen Gänsefüßchen) nicht als Leerzeichen, deshalb wird hier jedesmal, wenn ein Leerzeichen im namen ist ein Unterstrich eingefügt.

Man könnte natürlich das Ganze auch in einem Verbparser machen, so dass, wenn eine bestimmte Flagge gesetzt ist, kein Befehl abgefragt wird, sondern der Input als Name betrachtet wird.

Außerdem gibt es einen Bug bei Synonymen: Wenn 'ich' und 'heiße' zusammengefügt werden, taucht das letzte Wort zweimal auf. das ist gefixt, aber die neue Version kommt erst, wenn Allys Halbdunkel-Problem auch gelöst ist.

Die beiden Namensgebungsdemos gibt's hier: http://www.martin-oehm.de/tag/name.zip.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Gast
BeitragVerfasst am: Sa, 1 März 2003 - 11:46  Antworten mit Zitat






Martin hat folgendes geschrieben:

Code:

Wort.x


Ahhh!
Nach oben
Ally
BeitragVerfasst am: Sa, 1 März 2003 - 11:50  Antworten mit Zitat
Kompassleser
Kompassleser


Anmeldungsdatum: 25.08.2002
Beiträge: 142

Martin hat folgendes geschrieben:
Code:
    Sei MeinName.0 Wortlänge

Und gleich noch mal 'Ahhh!'... Okay, ich halte jetzt den Mund.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Tanan
BeitragVerfasst am: Sa, 1 März 2003 - 14:23  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 416
Wohnort: Essen

Super Martin! Einmal mehr vielen Dank. Werd den Code nachher mal ausprobieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Tanan
BeitragVerfasst am: So, 2 März 2003 - 12:23  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 416
Wohnort: Essen

Auch wenn ich den Code nur zu zwei Dritteln verstehe, er klappt wunderbar. Gibt es auch eine Möglichkeit, die Groß- und Kleinschreibung genauso auszugeben, wie der Spieler sie eingegeben hat? Bei Fehlermeldungen klappt das ja:

Code:
> sCHnöffT

Ich kenne das Wort "sCHnöffT" leider nicht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: So, 2 März 2003 - 14:26  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Tanan hat folgendes geschrieben:
Gibt es auch eine Möglichkeit, die Groß- und Kleinschreibung genauso auszugeben, wie der Spieler sie eingegeben hat?

Nein, das geht nicht. Bei den Fehlermeldungen steht dem Parser etwas mehr Information zur Verfügung als im Verb- oder Objektparser. Hier hat der Autor nur das Einheitsformat der Vokabeln vorliegen: Alles in Kleinbuchstaben, mit Umlauten, ohne ß und alle Wörter sind auf zwölf Zeichen zusammengestutzt.

Man kann also mit diesem Code nicht Goethe (oder Oehm) heißen - TAG baut da immer ein ö rein. Die Idee hinter dem Objektparser ist auch eher, Input verstehen zu können, nicht so sehr neuen Output zu erzeugen.
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Tanan
BeitragVerfasst am: So, 2 März 2003 - 15:31  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 416
Wohnort: Essen

Naja, nicht so schlimm. Trotzdem vielen Dank!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Tanan
BeitragVerfasst am: So, 9 März 2003 - 14:48  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 416
Wohnort: Essen

Was ich noch nicht verstehe... warum setzt er nach Einzelbuchstaben ín der Ausgabe einen Unterstrich? Also etwa:

Zitat:
Wie heißt du?

>norbert a meier
Willkommen Norbert A_Meier!

Kann auch sein, daß ich ausversehen am Code was verändert habe, daß sowas auslöst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin
BeitragVerfasst am: Mo, 10 März 2003 - 19:35  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

Tanan hat folgendes geschrieben:
Kann auch sein, daß ich ausversehen am Code was verändert habe, daß sowas auslöst.

Scheint so. Im Original-Code klappt's. (Allerdings geben Namen wie "Robert R" oder "Hans H" komische Ergebnisse, wenn man normal.adv einbindet :-) )

T.A.G. erkennt zwar zwei Anführungszeichen mit Leerzeichen nicht als Leerzeichen, aber man kann die Krücke mit dem Unterstrich auch umgehen, wenn man für ein Leerzeichen den ASCII-Code 32 (oder $20) verwendet:

Code:

    ...
    nächstesWort
    wenn /(wort = '') dann
        inkr y
        Inkr MeinName.0
        sei Meinname.y 32
    Ende
    ....

_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
zuDaniel
BeitragVerfasst am: Fr, 27 Jun 2003 - 12:51  Antworten mit Zitat
Wasserträger
Wasserträger


Anmeldungsdatum: 13.06.2003
Beiträge: 33
Wohnort: Köln

Also ich habe denn Quelltext direkt in die adv-Datei Kopiert, aber das klappt nicht, es erscheinen viele Fehlermeldungen wie:
Zitat:

"Metaname" Unbekannte Variable
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Tanan
BeitragVerfasst am: Sa, 28 Jun 2003 - 9:26  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 25.08.2002
Beiträge: 416
Wohnort: Essen

Bei mir hat es funktioniert. Hast Du den ganzen Quelltext genommen? Also auch die Zeile mit "Deko Metaname"? Dann sollte TAG mit dem Begriff nämlich eigentlich etwas anfangen können.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  T.A.G.

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05