IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Sprungbefehle in Ausführungsblöcken
AntwortenNeues ThemaNeue Umfrage

Sprungbefehle in Ausführungsblöcken

Geschrieben um 14:22 am 22.07.2005 | Zitat | Editieren | Löschen
neon
Mitglied
Student Gumby
Beiträge: 37

Hallo und guten Tag erstmal,

ich habe ein kleines Problem bei der Programmierung meines ersten Adventures mit TAG.

Ich habe einen Ausführungsblock, durch den ein Menüsystem eines Computers abgebildet wird. Das funktioniert komplett über wenn/dann-Abfragen und bis jetzt klappt auch alles was ich damit machen will. Das einzige Problem ist, wenn ich einen Punkt aufgerufen habe, der kein neues Untermenü mehr enthält, ist der Ausführungsblock zuende und ich lande wieder in der normalen Befehlseingabe. Da aber mehrere Funktionen über das Menü gesteuert werden können, ist es etwas nervig, das Computerterminal im Spiel immer wieder bedienen zu müssen, um eine weitere Aktion auszuführen.

Deshalb die Frage:

Gibt es bei T.AG. eine Anweisung, mit der ich an den Anfang des Anweisungsblocks zurückgehen kann um die Anweisung komplett von vorn auszuführen?

Oder gibt es ersatzweise eine Möglichkeit, Sprungmarken zu setzen, die mit einem Sprungbefehl angesprungen werden?

Ich gebe zu daß ich noch nicht das komplette Handbuch durchgelesen habe, aber in den Beispielen die ich bis jetzt gesehen habe, habe ich nichts gefunden.

Geschrieben um 14:53 am 22.07.2005 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

neon:

Gibt es bei T.A.G. eine Anweisung, mit der ich an den Anfang des Anweisungsblocks zurückgehen kann um die Anweisung komplett von vorn auszuführen?

Oder gibt es ersatzweise eine Möglichkeit, Sprungmarken zu setzen, die mit einem Sprungbefehl angesprungen werden?

Einen Sprungbefehl und Sprungmarken gibt es in T.A.G. nicht. Du könntest aber eine Schleife schreiben, die nur dann verlassen wird, wenn eine lokale Variable wahr oder falsch ist, etwa so:


Aktion Menue

Ausf

    lokal t

    lokal Abbruch

    lösche Abbruch

    wiederhole

        Text '(a) Anzeige

            [x](s) Software

            [x](b) beenden

           

            Eingabe:'

        Auswahl t 'asb'

        wenn (t = 1) ...

        wenn (t = 2) ...

        wenn (t = 3) dann

            setze Abbruch

            Text 'Bye, bye...'

        Ende

    bis (Abbruch)

EndeAusf

Oder du könntest eine Endlosschleife schreiben, aus der du dann mit stop oder Bed herausspringst:


Aktion Menue

Ausf

    lokal t

    wiederhole

        Text '(a) Anzeige

            [x](s) Software

            [x](b) beenden

           

            Eingabe:'

        Auswahl t 'asb'

        Bed (t < 3) 'Bye, bye...'

        ...

    bis (t = 100)   ! t kann eigentlich nie 100 sein

EndeAusf

Du kannst dir auch einmal den Code zu reden.adx anschauen, dort wird auch ein Menüsystem benutzt.

Geschrieben um 14:59 am 22.07.2005 | Zitat | Editieren | Löschen
Gast
Gast

neon:

Hallo und guten Tag erstmal,

Hallo zurück!

neon:

Ich habe einen Ausführungsblock, durch den ein Menüsystem eines Computers abgebildet wird. Das funktioniert komplett über wenn/dann-Abfragen

Wäre da nicht Jenach geschickter? Nur ein Vorschlag, ohne deinen Code zu kennen.

Bed(ingung) darfst du aber nicht verwenden, weil das ja ein implizites Stop verursacht.

neon:

Das einzige Problem ist, wenn ich einen Punkt aufgerufen habe, der kein neues Untermenü mehr enthält, ist der Ausführungsblock zuende und ich lande wieder in der normalen Befehlseingabe.

Der Ausführungsblock ist erst mit einem Stop zuende - oder wenn er keine Befehle mehr enthält.

Ich denke, dein Problem ist ganz einfach lösbar, indem du den Code in eine Schleife einbaust, die solange läuft, bis eine bestimmte Flagge gesetzt wird. Gibt der Spieler, sagen wir einmal, 0 ein (für: Aktion abbrechen), setzt du diese Flagge, und du kommst zur Standard-Texteingabe zurück (bzw. der Spieler).

Siehe Handbuch, Kapitel 5.3.

http://martin-oehm.de/tagman/kap_05.html

neon:

Da aber mehrere Funktionen über das Menü gesteuert werden können, ist es etwas nervig, das Computerterminal im Spiel immer wieder bedienen zu müssen, um eine weitere Aktion auszuführen.

Schon richtig, nur ein Hinweis: Korrekter Weise solltest du dann aber bei jeder Runde den Rundenzähler um 1 vergrößern: Zeit vergeht ja trotzdem.

neon:

Oder gibt es ersatzweise eine Möglichkeit, Sprungmarken zu setzen, die mit einem Sprungbefehl angesprungen werden?

Zum Glück nicht! Du würdest beim Betatesten verzweifeln.

neon:

Ich gebe zu daß ich noch nicht das komplette Handbuch durchgelesen habe, aber in den Beispielen die ich bis jetzt gesehen habe, habe ich nichts gefunden.

Möglichst ohne besserwisserisch zu klingen: Bitte hol das nach. Das Handbuch liest sich ja wirklich schnell und leicht. Alle Erweiterungen brauchst du nicht zu kenne, und die Beispiele musst du auch nicht kennenlernen, aber ohne Handbuchlektüre wirst du so viele einfache Fehler machen, dass das Debuggen des ersten Spiels zur Hölle wird - weil du erkennst, dass du ganze Codeblöcke umschreiben musst, oder du baust eine Ausnahme nach der anderen, und das Chaos wird immer größer.

Schritt für Schritt kannst du dir dann auch die Erweiterungen auf der Seite Nützliches bei Martin anschauen:

http://martin-oehm.de/tag/nuetzl.html

In deinem Fall passt die Erweiterung zum Thema Reden sehr gut; schau sie dir einmal an und versuche, sie zu verstehen (für Anfänger sicher nicht ganz leicht, aber die Mühe wert).

Viele Grüße,

Florian

Geschrieben um 15:01 am 22.07.2005 | Zitat | Editieren | Löschen
Florian
Gast

Ah, der Meister hat gleichzeitig selbst geantwortet. Ich wähnte ihn im Chiemgau.

Geschrieben um 15:05 am 22.07.2005 | Zitat | Editieren | Löschen
neon
Mitglied
Student Gumby
Beiträge: 37

Die erste Möglichkeit gefällt mir am besten.

Ich werde das ausprobieren und später bescheid sagen ob es für meine Zwecke das richtige ist.

Vielen Dank

Geschrieben um 15:16 am 22.07.2005 | Zitat | Editieren | Löschen
neon
Mitglied
Student Gumby
Beiträge: 37

Anonymous:

neon:

Ich gebe zu daß ich noch nicht das komplette Handbuch durchgelesen habe, aber in den Beispielen die ich bis jetzt gesehen habe, habe ich nichts gefunden.

Möglichst ohne besserwisserisch zu klingen: Bitte hol das nach. Das Handbuch liest sich ja wirklich schnell und leicht. Alle Erweiterungen brauchst du nicht zu kenne, und die Beispiele musst du auch nicht kennenlernen, aber ohne Handbuchlektüre wirst du so viele einfache Fehler machen, dass das Debuggen des ersten Spiels zur Hölle wird - weil du erkennst, dass du ganze Codeblöcke umschreiben musst, oder du baust eine Ausnahme nach der anderen, und das Chaos wird immer größer.

Da gebe ich Dir vollkommen recht, ich gehöre nur leider zu den Menschen die besser aus Beispielen oder durch Probieren lernen können als aus Büchern. Ich komme bei Büchern, gerade wenn es um Programmierung geht, nicht weiter als bis Seite 10, dann steht es meistens schon wieder im Regal. Ich probiere das jetzt seit 20 Jahren, es hat keinen Sinn. Wenn ich erst ein ganzes Handbuch lesen muß, endet es damit, daß ich mit Programmieren gar nicht erst anfange.

Davon abgesehen ist das Adventure sowieso schon halb fertig. Mir fehlen nur noch 5 Räume, etwa 10 Objekte und ein bißchen Rätselcode. Es funktioniert alles so wie ich es haben will, und ich denke daß das mit der Schleife auch mein einziges aktuelles Problem lösen wird. Bei allem was noch kommt habe ich schon klare Vorstellungen wie es funktioniert.

Geschrieben um 16:23 am 22.07.2005 | Zitat | Editieren | Löschen
neon
Mitglied
Student Gumby
Beiträge: 37

Ich habe es mit der ersten Möglichkeit hinbekommen. Sieht jetzt so aus wie ich es haben möchte.

Vielen Dank nochmal für die Tipps.

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