Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Kann ich so auf Subs zugreifen?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Kevin



Anmeldungsdatum: 03.11.2005
Beiträge: 29
Wohnort: Gummersbach-----NRW

BeitragVerfasst am: 29.11.2005, 10:49    Titel: Kann ich so auf Subs zugreifen? Antworten mit Zitat

verwundert
Ja Hi erstmal ich habe eine frage ich mache gerade für meine Mom zu Weinachten ein kleines Textadventure und Habe 2 Probleme
Punkto eins--->SUB´s sind ja zur Übersicht kann ich jetzt Beispielsweise die einzelnen Level in SUB´s packen und mit goto darauf zugreifen?
Punkto Zwei-->Ich mache die Verschiedenen Auswahlmögluichkeiten mit IF..THEN..END IF
Allerdings wenn man insgesamt zweimal etwas eingibt beendet er dass Programm Automatisch ich gebe euch mal ein kleines BSP. wie ich dass immer (ab nem Bestimmten Punkt im Game mache):
Code:
PRINT:"Was willst du machen?"
PRINT" (1)Auspacken
PRINT" (2)Drauftreten
INPUT Wahl$
IF Wahl$  = 1 THEN
PRINT"Warum willst du dass denn Auspacken ???"
PRINT"FEHLGESCHLAGEN"
input abc$
goto Level1
END IF
IF Wahl$ = 2 then
PRINT"DU HAST MAMA GENUG GENERVT!"
PRINT"MISSION ERFOLGREICH"
input abc$
GOTO Level2
END IF



könnt ihr mir helfen BITTE

Kevin Ich brauch nen Kaffee...
_________________
Lean Back
Enjoi the Life
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 29.11.2005, 11:12    Titel: Antworten mit Zitat

Also um auf Subs zuzugreifen brauchst
du anstatt goto gosub.
zum Beispiel
gosub marke

marke:
'Inhalt des Levels

return

Achte darauf dass die Sub unter gosub steht, also
wie in dem Beispiel.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kevin



Anmeldungsdatum: 03.11.2005
Beiträge: 29
Wohnort: Gummersbach-----NRW

BeitragVerfasst am: 29.11.2005, 12:56    Titel: Antworten mit Zitat

Hähh aber die SUB´s zeigt er soch bei 4.5 nur dann an wenn ich auf SUB´s klicke sonst wenn ich Z.B schreibe
Code:

Level1:
SUB
PRINT "DIES IST LEVEL 1"
END SUB

Dann steht da hinterher nur noch
Code:

Level1:
Hmmm....



Und ich muss dann auf SUB´s klicken damit er
Code:

SUB
PRINT "DIES IST LEVEL 1"
END SUB

anzeigt.
Kevin Ich brauch nen Kaffee...
_________________
Lean Back
Enjoi the Life
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 29.11.2005, 14:04    Titel: Antworten mit Zitat

Das was ich beschrieben hab war eine lokale Sub,
die den Vorteil hat dass man Variablen nicht als global
deklarieren muss um von der Sub darauf Zugriff
zu haben, was allerdings für dich glaub ich nicht so relevant ist.
Mach am besten mal die Sprungmarken weg, ich glaub nicht
das das so seltsam funktionieren kann. Der Grund
warum dein Programm beendet wird ist der, dass das Programm
nicht mehr dahin zurückgeht wo du das goto aufgerufen hast.
Mach das besser so:schreib danach hinter das SUB level1 bzw level2, dann lass
einfach das goto weg und schreib () dahinter, um die SUb aufzurufen.
Du benötigst dafür keine extra goto Anweisung.
z.B.:
SUB level1()
PRINT "DIES IST LEVEL 1"
END SUB

So kannst du dann im Hauptprogramm level1 aufrufen:
level1()
Dementsprechend bei Level 2.
Wenn ich Müll schreibe korrigiert mich bitte jemand
ich kenn mich damit auch nicht so gut aus.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 29.11.2005, 16:42    Titel: Antworten mit Zitat

Also, ich glaub die Klammern muss man nicht unbedingt setzen. zwinkern
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kevin



Anmeldungsdatum: 03.11.2005
Beiträge: 29
Wohnort: Gummersbach-----NRW

BeitragVerfasst am: 29.11.2005, 18:45    Titel: Antworten mit Zitat

Dass eine Problem konnte ich beheben hab den Falschen Variablenamern genommen lol
Aber dass mit dfen Subs hab ich imma noch nicht ganz gecheckt!


Kevin Ich brauch nen Kaffee...
_________________
Lean Back
Enjoi the Life
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 29.11.2005, 19:01    Titel: Antworten mit Zitat

Hallo,

schaut mal hier: http://www.o-bizz.de/qbtuts/selfqb/index.htm#kap14

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kevin



Anmeldungsdatum: 03.11.2005
Beiträge: 29
Wohnort: Gummersbach-----NRW

BeitragVerfasst am: 29.11.2005, 19:36    Titel: Antworten mit Zitat

Also geht man zhuz einer Sub mit call?
DANKE AUF JEDEN FALL!!!

Kevin Ich brauch nen Kaffee...
_________________
Lean Back
Enjoi the Life
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 29.11.2005, 19:45    Titel: Antworten mit Zitat

Ja. Über Sprungmarken aufgerufene Unterprogramme (GOSUB) sind nicht dasgleiche wie richtige SUBs. Mit Subs kann man, um es ganz einfach und nicht ganz korrekt auszudrücken, deine Programmierumgebung um weitere Befehle erweitern.

Beispiel:
Code:
DECLARE SUB XCOLOR (Farbe%)
CLS
COLOR 5
PRINT "So sieht COLOR 5 aus!"
XCOLOR 5
PRINT "So sieht XCOLOR 5 aus!"
SLEEP: END

SUB XCOLOR (Farbe%)
NeueFarbe%=Farbe%*2
If NeueFarbe%>15 THEN NeueFarbe%=NeueFarbe%-15
COLOR NeueFarbe%
END SUB


Ein Unterprogramm, das du über GOSUB aufrufst, ist eigentlich nur eine Sprungmarke, nach deren Ausführung du wieder zum aufrufenden Punkt zurückhüpfen kannst.

Beispiel:
Code:
CLS
PRINT "Erster Schritt."
GOSUB bla
PRINT "Dritter Schritt."
GOSUB bla
SLEEP: END

bla:
PRINT "Nächster Schritt."
RETURN


Ich hoffe, dass ich's verständlich beschrieben habe.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Eastler_dart



Anmeldungsdatum: 25.09.2005
Beiträge: 177
Wohnort: Baden-Würtemberg + Sachsen

BeitragVerfasst am: 30.11.2005, 00:56    Titel: Antworten mit Zitat

Hallo Kevin, Hallo alle,

hab dein Beispielprog mal durchgelesen. Dazu fallen mir noch ein paar (nicht erfragte zwinkern ) Tipps ein:

1) du hast die Zeile INPUT abc$ drin.
Diese Zeile kann ich mir nur damit erklären, daß du das Programm anhalten und auf (irgendeinen) Tastendruck des Anwenders warten willst.
Sowas geht eleganter und irritiert nicht so sehr beim durchlesen:
Code:
 DO 
LOOP WHILE INKEY$ = ""

Mal Wörtlich übersetzt: Do Loop Durchlaufe diese Schleife While Inkey$="" solange keine Taste gedrückt ist


2) zu deinem Sub Verständnis (und um das auf Taste-Drücken-Warten noch eleganter zu gestalten) mal folgendes Szenario:

Programmbefehle
....
PRINT "Du kannst das nicht treten"
DO
LOOP WHILE INKEY$ = ""
Goto Level11
...

Hier ist es für späteres Bearbeiten des Codes zu empfehlen, dieses "AufTasteWarten" in eine SUB zu packen. Erst mal wie das geht, danach noch Erklärungen:

A) Eröffne eine Sub über das Menu (Bearbeiten)-(NeueSub)
Gib einen klar sprechenden Namen ein. z.B. AufTasteWarten und bestätige diesen mit (RETURN).
Jetzt scheint dein Programmfenster leer zu sein aber keine Angst, Qbasic zeigt dir nur den Inhalt von der neuen SUB an, alles andere läßt Qbasic in der Anzeige einfach nur weg, ist aber noch da.
Zwischen die beiden vorgegebenen Zeilen schreibst du nun die Befehle, um auf eine Taste zu warten, sodaß das ganze dann so aussieht:
Code:
 SUB AufTasteWarten
   DO
   LOOP WHILE INKEY$=""
END SUB 

Deine SUB ist fertig.
Jetzt drückst du (F2), dabei kriegst du die Liste, welche Programmteile Qbasic anzeigen soll. Schätze mal, da SUBs für dich neu sind, hast du nur zwei Einträge. Programmnamen_deines_Programmes und AufTasteWarten. Setze mit den Cursortasten den schwarzen Balken auf deinen Programmnamen und bestätige mit (RETURN)

Nun stehst du wieder im Hauptteil deines Programmes. Siehst also wie bisher deine Programmzeilen. Beachte, Die Zeilen aus der SUB siehst du nun nicht. Wie grad erklärt weißt du nun aber, mit der (F2) Taste kriegst du eine Liste aller Programmteile und kannst hin und her springen.

In deinem Hauptteil des Programmes die SUB aufrufen:
Jetzt mußt du nur noch in deinem Hauptprogramm auf die SUB verweisen, woimmer im Programm auch auf (irgend-)eine Taste zu warten ist.
Das mach der Befehl CALL. Auch wenn man ihn auch beim Aufruf weglassen darf, schreib das CALL immer mit dazu, ist vieel übersichtlicher.

Hier nochmal das Beispiel von vorhin, nun mit Aufruf:
Code:

Programmbefehle
....
PRINT "Du kannst das nicht treten"
CALL AufTasteWarten
Goto Level11
...

So. Nun müßte das funktionieren.
Bedenke bitte, ich habe hier (mit Absicht) die "einfache" Verwendung von SUBs beschrieben, bei der keine Parameter übergeben werden, damit du schneller erkennen kannst, wie das geht. Bei Parameterübergabe werden Daten/Variablennamen in Klammern hinter die SUB-Namen geschrieben, das würde hier aber zu weit führen.

Wenn du die Sub angelegt und dein Programm abgespeichert hast, öffne dein Listing mal mit nem normalen Textanzeigeprogramm, EDIT(unter DOS) oder notepad / Editor (unter Windows). Hier siehst du deine "bisherigen" Zeilen und auch die angelegte SUB. Schnell wirst du sehen, eigentlich ist ne sub fast gleich wie mit ner Sprungmarke:---RETURN. Ganz neu ist hier nur die allererste Zeile, aus der QBasic lesen kann, welche SUBs angelegt sind. Ändere aber hier nichts, ändere immer und nur in QBasic an deinem Programm.

Mit dem Auslagern des TasteWarten in eine Sub kannst du später mal gleichzeitig noch auf einen Mausklick warten. Wenn du nun an allen Stellen, wo einfach nur zu warten ist, CALL AufTasteWarten schreibst, ist die Mausfunktion für sämtliche Stellen nur EIN EINZIGES MAL, nämlich IN DIESER SUB hinzuzufügen. Ist doch auch ne toller Aspekt, oder?

3) Wenn du mal nicht mit SUBs anlegen kämpfst, schau dir mal Listings an, bei denen die Programmzeilen teilweise eingerückt sind. Ist beim Tippen anfangs etwas umständlich und gewöhnungsbedürftig, aber beim Lesen solcher Listings hilft das ungemein. Ist nur ne optische Sache, hilft aber nebenbei auch, Fehler zu vermeiden (vergessene NEXT oder END IF Zeilen fallen auf). Bestimmte Programmstellen sind damit auch besser zu finden.

Alles in allem mach weiter, sieht gut aus.

Eastler
_________________
Kaum macht mans richtig, schon geht's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
Heizi



Anmeldungsdatum: 19.01.2005
Beiträge: 309

BeitragVerfasst am: 30.11.2005, 11:23    Titel: Antworten mit Zitat

Stimmt, die Klammern kann man auch weglassen....
bin das halt so gewohnt von C++ lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kevin



Anmeldungsdatum: 03.11.2005
Beiträge: 29
Wohnort: Gummersbach-----NRW

BeitragVerfasst am: 30.11.2005, 14:33    Titel: Antworten mit Zitat

ähmmm happy
Warum denn jedesmal so umständlich mit call bei der eingabe (bin doch faul!)
Ist mir zu viel arbeit ich weiss dass dass so grht aber ich denke mir einfach immer was aus zb
xjdhf$
oder bdsjh$
und dann wartet der auf die ingabe ist doch viel Kürzer wie
Call AufTasteWarten
lol
Aber trotzdem danke klar wenn dass noch für jmnd. anderes wäre (dass Programm) zum Beispiel beilage bei einem TUT dann Würde ich dass Natürlich Alles viel Ordentlicher Schreiben aber so ist es ja nur als kleines Geschenk für meine MOM aber ich hab dass mit den SUB´s jetzt verstande danke und Übrigens Dieses Forum ist echt geil ich versuche jetzt hier mehr aktiv zu sein (schleim)
Und Sry an dass Team wegen dem Kevin Kleinj Account ich habe da einfach nicht nachgedacht KANN ICH DEN ACC. MANUELL LÖSCHEN WENN JA DANN MACHE ICH DASS!!!!!

Kevin Ich brauch nen Kaffee...
_________________
Lean Back
Enjoi the Life
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thomas Antoni



Anmeldungsdatum: 12.10.2004
Beiträge: 220
Wohnort: Erlangen

BeitragVerfasst am: 30.11.2005, 16:47    Titel: Zum Warten auf Taste reicht ein Befehl. Antworten mit Zitat

Zum Warten auf eine Tastenbetätigung reicht ein Befehl, nämlich

Code:

x$ = INPUT$(1)

_________________
+++ Die beliebte QBasic CD-ROM von QBasic.de - 670 MB QBasic-Stuff mit komfortabler HTML-Oberfläche. Für nur 5 EUR bestellbar auf www.antonis.de/qbcdueb.htm +++
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 30.11.2005, 16:49    Titel: Antworten mit Zitat

Schau auch mal auf Qbasic.de unter Tutorials, da sind ein paar ganz gute dabei... zwinkern
Um eines namentlich zu erwähnen: The Real Adoks Way To QBasic.
Da wird alles erklärt, sehr empfehlenswert. lächeln

PS: der 20.000 Post hier im Forum Yahooo!!!!

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Kevin



Anmeldungsdatum: 03.11.2005
Beiträge: 29
Wohnort: Gummersbach-----NRW

BeitragVerfasst am: 30.11.2005, 18:47    Titel: Antworten mit Zitat

jo Adoks way ist Wirklich sehr gut
Hab dass jetzt aber SO LANGSAM zwinkern verstandedn
Adoks Way nimmt mein Informatik Lehrer um uns dass Beizubringen lachen
_________________
Lean Back
Enjoi the Life
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 30.11.2005, 21:16    Titel: Antworten mit Zitat

Sag ich doch!
Und das mit den SUBs und FUNCTIONs findest du nirgendwo besser erklärt grinsen

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 30.11.2005, 23:18    Titel: Zwei Artikel Antworten mit Zitat

Zum Thema SUB-Routinen:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html

Zum Thema Abenteuerspiel:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Abenteuerspiel.html

@Kevin: Vielleicht mag der eine oder ander Artikel in bestimmten Situationen behilflich sein.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kevin



Anmeldungsdatum: 03.11.2005
Beiträge: 29
Wohnort: Gummersbach-----NRW

BeitragVerfasst am: 01.12.2005, 14:11    Titel: Antworten mit Zitat

Na klar hilft sowas übrigens kannst dass tut doch auch an Qbasic.de schicken ist gelungen!!!
_________________
Lean Back
Enjoi the Life
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
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.

 Impressum :: Datenschutz