Autor |
Nachricht |
< Spielzustand mit scenes organisieren? |
|
Verfasst am:
So, 23 Okt 2016 - 13:04
|
|
|
Wasserträger
Anmeldungsdatum: 22.03.2016
Beiträge: 39
|
|
Hei Leute,
ich melde mich mal wieder mit einem Problem. Mein Quellcode ist so weit gewachsen, dass ich mir technische Tricks überlegen muss, um noch flüssig weiterarbeiten zu können.
So funktioniert z.B. die Replay-Funktion der IDE für mich nicht mehr, da sie nur noch quälend langsam durchläuft. Ich bin inzwischen auf "Linux-Makefile" umgestiegen, ediere mit dem "VIM" und arbeite von der Kommandozeile aus.
Bisher habe ich mich mit dem "test"-Kommando zu einem bestimmten Zustand meines Spiels durchgehangelt. Das wird mir jetzt aber auch zu langwierig.
Kann es vielleicht funktionieren, dass man gezielt über die Definition von SCENES auch einen bestimmten Zustand des Spiels starten kann?
Ich habe z.B. an "scenes" jetzt vorliegen:
ENTIRE GAME
EigeneSzene1
EigeneSzene2
EigeneSzene3
Das Spiel beginnt bei mir ohne eigene Szene: Der PC steht vor einem Haus geht rein und dann fängt EigeneSzene1 an (läuft durch bis Ende), dann kommt EigeneSzene2 (läuft durch bis Ende), dann EigeneSzene3 (läuft durch bis Ende). Nach dem Ende der Letzteren ist der gegenwärtige Spielzustand erreicht, auf dem ich weiterarbeiten will.
Ich kann ja am Anfang im Quellcode eingeben:
"Teil1 is a scene. Teil1 begins when play begins."
Meine Idee ist jetzt, für den ganzen ersten Teil meines Spiels (also Anfangssituation, EigeneSzene1, EigeneSzene2, EigeneSzene3) eine Kontainerszene festzulegen, die solange läuft, wie eben der erste Teil meines Spieles läuft. Dann brauche ich noch eine Kontainerszene für den zweiten Teil.
Dann schreibe ich an den Anfang meines Codes so etwas wie:
"Teil2 is a scene. Teil2 begins when play begins."
Damit könnte ich theoretisch das Spiel mit einer bestimmten Szene starten, aber bevor ich anfange in meinem Quellcode herumzuwühlen und mich dann ärgere, wenn es zu Komplikationen kommt:
Hat ein solches Vorgehen Aussicht auf Erfolg oder kann dies vom Ansatz her nicht funktionieren, weil so nur ein Teil des Quellcodes vom System abgearbeitet wird? So dass vorherige Aufgaben und Enwicklungen des Spielzustandes damit nicht vorhanden sind?
Am einfachsten wäre es natürlich, wenn man den Spielstand einfach speichern könnte, aber das geht wohl nicht, solange man daran herumarbeitet. Ich habs versucht.
Ich weiß, das ist ein kompliziertes Problem, aber ohne andere Meinung dazu, möchte ich meinen Quelltext jetzt nicht grundsätzlich umarbeiten.
Grüße
Textplayer |
|
|
|
|
|
Verfasst am:
Mo, 24 Okt 2016 - 7:17
|
|
|
Experte
Anmeldungsdatum: 25.03.2010
Beiträge: 660
|
|
In der letzten Version von I7, die ich ausprobiert habe, waren Szenen nur Sprungmarken. D.h. wenn du wie vorgeschlagen direkt zu Szene 2 springst, dann wird bis dahin außer der Initialisierung des Spiels kein Code ausgeführt.
Allerdings wäre es möglich, am Einstiegspunkt der Szene 2 synthetisch den kanonisch gewünschten Spielzustand herzustellen. Also sowas wie:
Code: | When Scene2 begins, move player to Garden.
...move knife to player.
...give Bathroom seen. |
Aber das wäre dann rein manuelle Arbeit.
Mich wundert eher, dass du mit den Test-Befehlen nicht mehr zurechtkommst. Bei einem Interpreter ohne More-Prompts kann das doch wohl kaum wirklich lange dauern - oder baust du das neue Zork Zero? ;) |
|
|
|
|
|
Verfasst am:
Mo, 24 Okt 2016 - 7:30
|
|
|
Wasserträger
Anmeldungsdatum: 22.03.2016
Beiträge: 39
|
|
Ok, es funktioniert grundsätzlich, konnte jetzt doch nicht warten, wie immer.
Es stellt sich trotzdem eine wichtige Frage. Was ich noch nicht verstehe, ist Folgendes:
Wie kann ich sicherstellen, dass eine Szene nur dann startet, wenn eine andere Szene schon läuft?
Bei mir funktioniert:
Code: | Actionszene1 begins when the player is in the stairway and Teil1 is happening. |
Einen Parser-Error erzeugt aber diese Zeile:
Code: | Actionszene2 begins when Actionszene1 ends naturally and Teil1 is happening. |
Code: | >--> You wrote 'Actionszene2 begins when Actionszene1 ends naturally and when Teil1
is happening' (source text, line 487): but that's not one of the known ends
for that scene, which must be declared with something like 'Confrontation
ends happily when...' or 'Confrontation ends tragically when...'.
Inform 7 has finished. |
Eigentlich müsste man doch so etwas auch angeben können? Aber die Syntax wird vom Parser so nicht akzeptiert. |
|
|
|
|
|
Verfasst am:
Mo, 24 Okt 2016 - 7:46
|
|
|
Wasserträger
Anmeldungsdatum: 22.03.2016
Beiträge: 39
|
|
Hannes hat folgendes geschrieben: | In der letzten Version von I7, die ich ausprobiert habe, waren Szenen nur Sprungmarken. D.h. wenn du wie vorgeschlagen direkt zu Szene 2 springst, dann wird bis dahin außer der Initialisierung des Spiels kein Code ausgeführt.
|
Gute Sache, geht das auch mit der G-Version, die man leider benutzen muss, wenn man auf Deutsch schreibt?
Hannes hat folgendes geschrieben: |
Allerdings wäre es möglich, am Einstiegspunkt der Szene 2 synthetisch den kanonisch gewünschten Spielzustand herzustellen. Also sowas wie:
Code: | When Scene2 begins, move player to Garden.
...move knife to player.
...give Bathroom seen. |
Aber das wäre dann rein manuelle Arbeit.
Mich wundert eher, dass du mit den Test-Befehlen nicht mehr zurechtkommst. Bei einem Interpreter ohne More-Prompts kann das doch wohl kaum wirklich lange dauern - oder baust du das neue Zork Zero? ;) |
Danke, das ist sehr hilfreich. Ich baue zwar kein Zork Zero, aber mein Spiel wird immer länger, obwohl es nur auf einer Kurzgeschichte von 7 Seiten basiert ;)
Code: | This is the report produced by Inform 7 (build 6G60) on its most recent run through:
The 5863-word source text has successfully been translated into a world with 16 rooms and 24 things, and the index has been brought up to date. |
Die Bildschirmausgabe erzeugt bei mir ständig More-Prompts in Gargoyle-free, wenn ich ein Test-Kommando ausführe, muss also ständig weiter mit der Hand scrollen, kann man das vielleicht irgendwie abstellen? Ich benutze zum Testen immer die Datei "output.z8" im Verzeichnis "Build". Wenn es jetzt natürlich noch einen Interpreter für Linux gäbe, bei dem die Ausgabe ohne More-Prompt erfolgen würde, dann wäre ein weiteres Problem gelöst.
Unsere Posts haben sich leicht überkreuzt. Das mit der Aufteilung des Quellcodes in verschiedene Teile, werde ich jedenfalls jetzt konsequent durchziehen. Das ersparte einem doch Einiges. |
|
|
|
|
|
Verfasst am:
Sa, 29 Okt 2016 - 12:14
|
|
|
Wasserträger
Anmeldungsdatum: 08.11.2010
Beiträge: 48
Wohnort: Lüneburger Heide
|
|
textplayer hat folgendes geschrieben: | Hei Leute,
ich melde mich mal wieder mit einem Problem. Mein Quellcode ist so weit gewachsen, dass ich mir technische Tricks überlegen muss, um noch flüssig weiterarbeiten zu können.
So funktioniert z.B. die Replay-Funktion der IDE für mich nicht mehr, da sie nur noch quälend langsam durchläuft. |
Hi Textplayer, zu diesem anfangs genannten Problem ist mir eingefallen, dass ein ähnliches mal im englischen Forum besprochen wurde, und damals kam man zu dem Schluss, dass ein zu voller "Skein" in der IDE das mitverursacht hat.
Ein Workaround ist deshalb wohl, den Skein immer mal wieder zu trimmen. Der Bug wurde vermutlich erst in einer späteren Version gefixed. |
|
|
|
|
|
Verfasst am:
So, 30 Okt 2016 - 22:02
|
|
|
Wasserträger
Anmeldungsdatum: 22.03.2016
Beiträge: 39
|
|
StJohn Limbo hat folgendes geschrieben: |
Hi Textplayer, zu diesem anfangs genannten Problem ist mir eingefallen, dass ein ähnliches mal im englischen Forum besprochen wurde, und damals kam man zu dem Schluss, dass ein zu voller "Skein" in der IDE das mitverursacht hat.
Ein Workaround ist deshalb wohl, den Skein immer mal wieder zu trimmen. Der Bug wurde vermutlich erst in einer späteren Version gefixed. |
Danke für den Tipp, das ist sehr hilfreich. Ich habs nachvollzogen. Das ist tatsächlich der Fall, der Skein bremst das System aus.
Inzwischen wäre mir ein Interpreter lieb, der die Spielausgabe eines ganzen Testkommandos mit zahlreichen Befehlen in einem Rutsch abarbeitet und keinerlei Interaktion braucht.
Grüße
Textplayer |
|
|
|
|
|
|
Alle Zeiten sind GMT + 1 Stunde (MEZ) |
|
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.
|
|