Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Frustrierender Bahnhofsbau
#10
Programmablauf
Ständig sitzt man vor der Kiste und ist zum Zuschauem verdammt, ähnlich beim Autosave.
Ich vermute, die Eingabe (Tatstatur, Maus) wird vom Hauptprogramm abgefragt. Da jetzt aber jedes Unterprogramm erstmal oberwichtig einige Schleife abarbeiten muß, tritt das Hauptprogramm gar nicht mehr in Aktion.
Außer beim Speicher sollte folgendermaßen vorgegangen werden:
Die Schleife wird als "kopfgesteuerte" Schleife (z.B. while - wend) aufgebaut. Jetzt kommt die Initialisierung ins Unterprogramm. Und das Unterprogramm setzt ein Flag, falls der Schleifenzähler nicht gegen Null laufen kann.
Der Schleifenkörper kommt so ins Hauptprogramm, das er bei Bedarf höchstens einmal durchlaufen wird. Die Schlußbedingung setzt das Flag zurück bzw. entfällt, wenn der Schleifenzähler gegen Null läuft.
Nun kann nach jedem einzelnen Durchlauf der Schleife die Eingabe im Hauptprogramm abgefragt werden. Und der Spieler kann (fast) ständig Einfluß auf das Geschehen nehmen.

Anfang Listing

[font=Courier New]Do ; Beginn Hauptprogramm
[font=Courier New]..On menu gosub m_enu ; Abfrage ob irgendetwas anliegt wie Tastatureingabe Mausklick und ggf. bearbeiten.
[font=Courier New]..If Zähl<> 0 ; Schleifenkörper bei Bedarf bearbeiten
[font=Courier New]....Sum=Sum+Zähl
[font=Courier New]....Zähl=Zähl-1
[font=Courier New]....If Zähl=0
[font=Courier New]......Print Sum ; Ergebnisausgabe.
[font=Courier New]....Endif
[font=Courier New]..Endif
[font=Courier New]..On menu gosub m_enu ; Nach jedem einzelnem Durchlauf des Schleifenkörpers wird die Eingabe abgefragt. Wird die Schleife nicht durchlaufen, wird die Eingabe 2-mal hintereinander abgefragt.
[font=Courier New]loop ; Rücksprung Beginn Hauptprogramm.

[font=Courier New]Procedure m_enu
[font=Courier New]..On Klick=1 gosub Klick ; Mit linkem Mausklick wird hier das Addieren der Zahlen von 0-100 gestartet.
[font=Courier New]return

# Vorbereitung des Addierens aller Zahlen von 1-100 im Unterprogramm statt im Hauptprogramm. Oder besser der Zahlen von 100 - 1, weil der Zähler gleichzeitig der Wert ist und rückwärts läuft.

[font=Courier New]Procedure Klick
[font=Courier New]..Sum = 0 ; saldierenden Speicher = 0 setzen.
[font=Courier New]..Zähl = 100 ; Zähler initialisieren
[font=Courier New]return

Ende Listing.

Normal wäre:
[font=Courier New]Procedur m_enu
[font=Courier New]..If Klick = 1
[font=Courier New]....Sum=0
[font=Courier New]....For Zähl = 1 to 101
[font=Courier New]......Sum=Sum+Zähl
[font=Courier New]....Next Zähl
[font=Courier New]....Print Sum
[font=Courier New]..Endif
[font=Courier New]return

Aber was ist heute noch normal?............

Eleganter ist natürlich
[font=Courier New]every 5 gosub m_enu
Möglich in GfA-Basic auf Atari.
Es werden alle 5*20msec = 100msec ein Interrupt ausgelöst und die Eingabe abgefragt. Gefahr hierbei ist natürlich eine mögliche Rekursion falls die Eingabe eine Schleife wie z.B. das Speichern auslöst. Wird immer nur die Initialisierung einer Schleife ausgelöst, besteht die Gefahr der Rekursion eigentlich nicht.

mfG
Hans Dampf.



P.S:
Aus dem Wörterbuch
rekursiv, lat. (siehe auch rekursiv).
Zitieren


Nachrichten in diesem Thema
Frustrierender Bahnhofsbau - von Timba - 05-01-2006, Thursday-22:18:21
[Kein Betreff] - von martinalex - 05-01-2006, Thursday-22:50:52
[Kein Betreff] - von prissi - 05-01-2006, Thursday-23:34:15
[Kein Betreff] - von Timba - 05-01-2006, Thursday-23:49:57
[Kein Betreff] - von Redsauger - 24-03-2006, Friday-01:23:26
[Kein Betreff] - von prissi - 24-03-2006, Friday-01:59:46
[Kein Betreff] - von Gotthardlok - 24-03-2006, Friday-15:31:16
[Kein Betreff] - von prissi - 24-03-2006, Friday-17:58:52
[Kein Betreff] - von Gotthardlok - 25-03-2006, Saturday-00:33:15
[Kein Betreff] - von Hans Dampf - 25-03-2006, Saturday-04:58:36
[Kein Betreff] - von Timba - 28-03-2006, Tuesday-17:46:55
[Kein Betreff] - von Hans Dampf - 30-03-2006, Thursday-05:11:55
[Kein Betreff] - von Wurzelgnom - 30-03-2006, Thursday-07:43:50
[Kein Betreff] - von Hans Dampf - 31-03-2006, Friday-00:23:16

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste