Autor |
Nachricht |
< Statuszeile Inform 6 |
|
Verfasst am:
Mo, 29 Jun 2015 - 22:07
|
|
|
Kompassleser

Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain
|
|
Hallo,
ich baue gerade die cyoa.h etwas um (eine einfache extension um cyoas zu erstellen), soll nix großes werden, ich will einfache Geschichten für einen Leseanfänger erstellen mit einfachen Auswahlmöglichkeiten die Geschichte voranzubringen.
D.h. eine spiel.inf und die cyoa.h sind dann alles, keine verblib, parserm usw.
Nun hätte ich aber gerne eine Statuszeile um z.B. Punkte und den aktuellen Ort anzuzeigen.
Ich habe versucht, die DrawStatusline mit den dazugehörigen Subs aus der parserm zu extrahieren, das ging aber völlig schief. Man muss sie völlig auseinander nehmen, viele Variablen/Globals wie z.B. location gibt es ja nicht.
Gibt es eine einfache Möglichlkeit für eine Statuszeile? Oder gibt es eine andere Extention um cyoas zu schreiben? Ich meine, mit menu.h ging sowas auch, aber das alles ist schon etwas länger her bei mir.
Kris |
|
|
|
 |
|
Verfasst am:
Di, 30 Jun 2015 - 12:09
|
|
|
Experte

Anmeldungsdatum: 25.03.2010
Beiträge: 660
|
|
Wenn du etwas anzeigen willst, muss es ja logischerweise vorher irgendwo gespeichert sein. Wenn es bei dir keine location-Variable gibt, wie willst du dann den Ort ausgeben? Solche strukturellen Fragen solltest du dir stellen, bevor du über technischen Lösungen grübelst. |
|
|
|
 |
|
Verfasst am:
Di, 30 Jun 2015 - 12:53
|
|
|
Kompassleser

Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain
|
|
Die Struktur habe ich, nur heißt die location bei mir eben curr_situation, genauso habe ich natürlich eine Variable für die Punktzahl usw.
Meine Frage zielte auf eine isolierte Routine für eine Statuszeile die man dann nach belieben anpassen kann.
Hat jemand schonmal sowas irgendwo gesehen? |
|
|
|
 |
|
Verfasst am:
Di, 30 Jun 2015 - 21:16
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Wenn Du Deine eigene DrawStatusLine() schreiben möchtest, kommst Du, glaube ich, an Z-Maschinen-Assembly (oder GLK für Glulx) nicht vorbei. Ich habe damit noch nie was gemacht, aber vielleicht findest Du bei der Auflistung der Opcodes einen Anfang (z.B. SPLIT_WINDOW):
http://inform-fiction.org/zmachine/standards/z1point0/sect15.html#split_window _________________ Worichtung willst du ingehen? |
|
|
|
 |
|
Verfasst am:
Fr, 3 Jul 2015 - 8:37
|
|
|
Kompassleser

Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain
|
|
Hallo Christian,
vielen Dank für den Hinweis. Das ist mir momentan dann erst mal zu viel Aufwand, wäre aber mal eine Projekt für längere Winterabende ;-)
Dann gibt es noch keine Statuszeile sondern Punkteausgabe u.ä. auf Tastendruck.
Viele Grüße
Kris |
|
|
|
 |
|
Verfasst am:
Fr, 3 Jul 2015 - 10:55
|
|
|
Experte

Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg
|
|
Jetzt bin ich neugierig geworden und habe mal probiert, die wichtigsten Opcodes für eine Statuszeile aus dem DM4, §42, S. 308 ff. zusammenzustellen:
Code: | [ Main;
DrawStatusLine();
print "^^^Nix los hier!";
];
! Wie in DM4 §42, S. 308 beschrieben
[ DrawStatusLine;
@split_window 2; ! Zwei Zeilen für die Statusleiste
@set_window 1; ! Wähle Fenster 1 aus (1 = oberes Fenster, 0 = unteres Fenster)
@set_cursor 1 1; ! Setze Cursor an Position (1,1) (oben links)
style reverse; ! Inverse Farben für den Text
font off; ! Proportionalschrift aus
@buffer_mode 1; ! Zeilenumbruch nur nach Wörtern
@erase_window 1; ! Fenster 1 löschen
! Statuszeile auf voller Breite mit Leerzeichen füllen
HFill(' ', 0->33);
@set_cursor 1 1; ! Cursor auf erste Position der ersten Zeile setzen
print "Status: Laaaangweilig!";
@set_cursor 2 1; ! Cursor auf erste Position der zweiten Zeile setzen
HFill(' ', 0->33);
@set_cursor 2 1;
print "Der Bildschirm hat ", 0->32, " Zeilen und ", 0->33, " Spalten.";
! Und dann wieder alles zurücksetzen
style roman; ! Normaler Schrift-Stil
font on; ! Proportionalschrift an
@set_colour 1 1; ! 1 = Default
@set_window 0; ! Aktuelles Fenster: Unten
];
[ HFill ch rows i;
for (i = 0 : i < rows : i++) {
print (char) ch;
}
]; |
Mit @set_colour kann man auch noch Farben ändern usw. Kapitel 42 im DM4 erzählt eigentlich alles Wichtige. (Und das Kapitel ist nicht so lang wie eine Winternacht. Aber interessanter.) _________________ Worichtung willst du ingehen? |
|
|
|
 |
|
Verfasst am:
Fr, 3 Jul 2015 - 11:37
|
|
|
Experte

Anmeldungsdatum: 25.03.2010
Beiträge: 660
|
|
Hier ist eine Routine, die ich mal benutzt habe:
Code: | [ DrawStatusLine width posa;
@split_window 1; @set_window 1; @set_cursor 1 1; style reverse;
width = 0->33; posa = width-30;
spaces width;
@set_cursor 1 2;
print (string) "bla";
@set_cursor 1 posa;
print (string) "blubb";
@set_cursor 1 1; style roman; @set_window 0;
]; |
D.h. der erste String ist links oben, der zweite rechts oben. |
|
|
|
 |
|
Verfasst am:
Mo, 20 Jul 2015 - 9:46
|
|
|
Kompassleser

Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain
|
|
Hallo,
zuerst mal Sorry, dass ich mich nicht mehr gerührt habe, ich hatte dann doch mal über die OP-Codes gelesen, aber bei dieser Hitze habe ich nicht weiter daran arbeiten wollen und frönte anderen Hobbies.
Danke euch beiden, dass Ihr geschaut und geschrieben habt. Ich werde jetzt wohl doch eine Statuszeile einbauen, das gibt dann doch ein wenig Textadventure-Feeling.
Gruß
Kris |
|
|
|
 |
|