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:

Problem mit Sleep

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



Anmeldungsdatum: 01.09.2009
Beiträge: 8

BeitragVerfasst am: 02.09.2009, 19:11    Titel: Problem mit Sleep Antworten mit Zitat

Hallo,
Ich bin 12 Jahre alt. Ich habe vor einer Woche mit dem programmieren angefangen. Ich kenne mich noch sehr wenig aus.
Ich möchte ein kleines Programm, das "spiel wer wird millionär" nur in Buchstaben. Nur bleibe ich schon sehr früh hängen.
Hier ist das Programm:


dim bal as integer
Print "Wilkommen bei wer wird Milionär! Wenn sie mit dem Spiel beginnen möchten drücken sie auf enter. Um das programm zu beenden drücken sie Esc"
sleep
cls
Print "Frage 1: Peter Kreuder komponierte 1936 den Schlager, Ich wollt' ich wär' ein ...?"
sleep
Print "A: Hund"
sleep
print "B: Huhn"
sleep
print "C: Hummer"
sleep
print "D: Huflattich"
sleep
Print "Ihre Antwort:",bal
sleep
select case bal
case a,b,d
Print "Sie haben Verloren"
sleep 4000
CASE c
Print "Herzlichen Glückwunsch! 100 Euro"
sleep
End selelect



Wenn man als Antwort c eingibt (sollte die richtige sein), kommt "sie haben Verloren" und dann wird das programm nach 4 sek. beendet. Doch ich will, dass das hier kommt, wenn man c eingibt:
"Herzlichen Glückwunsch! 100 Euro"
Ich glaube das liegt an dem "sleep 4000". Aber ich sag dem Programm doch, dass es nur "sleep 4000" ausführen soll wenn man a,b oder d eingibt.
(Wenn man die sleep-Befele weglässt, wird das programm sofort beendet.)
Was muss ich vorgehen ?
Ich würde mich sehr über Eure Antworten freuen. lächeln
Danke,
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 02.09.2009, 19:30    Titel: Antworten mit Zitat

Zur Eingabe brauchst du Input und nicht Print und es muss eine Stringvariable sein.

So gehts:
Code:
dim bal as String

Print "Wilkommen bei wer wird Milionär! Wenn sie mit dem Spiel beginnen möchten drücken sie auf enter. Um das programm zu beenden drücken sie Esc"
sleep
cls
Print "Frage 1: Peter Kreuder komponierte 1936 den Schlager, Ich wollt' ich wär' ein ...?"
sleep
Print "A: Hund"
sleep
print "B: Huhn"
sleep
print "C: Hummer"
sleep
print "D: Huflattich"
sleep
Input "Ihre Antwort:",bal
Sleep

select case bal
case "a","b","d"
Print "Sie haben Verloren"
CASE "c"
Print "Herzlichen Glückwunsch! 100 Euro"
End select

Sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ninis



Anmeldungsdatum: 01.09.2009
Beiträge: 8

BeitragVerfasst am: 02.09.2009, 19:32    Titel: Antworten mit Zitat

tut trotzdem nicht
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ninis



Anmeldungsdatum: 01.09.2009
Beiträge: 8

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

und wenn man die sleeps weglässt wird dass Programm beendet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ninis



Anmeldungsdatum: 01.09.2009
Beiträge: 8

BeitragVerfasst am: 02.09.2009, 19:39    Titel: Antworten mit Zitat

trotzdem danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
tim.vogt



Anmeldungsdatum: 01.03.2009
Beiträge: 56

BeitragVerfasst am: 02.09.2009, 19:44    Titel: Antworten mit Zitat

Mach doch bitte mal das Sleep nach dem Input weg, dann sollte es klappen.

Edit:Ok, das falsche Sleep..
_________________
"Nichts ist wahrhaftig und alles ist erlaubt."


Zuletzt bearbeitet von tim.vogt am 02.09.2009, 19:56, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 02.09.2009, 19:53    Titel: Antworten mit Zitat

Hallo,

das eigentliche Problem dürfte das SLEEP vor dem INPUT sein. Wenn man nämlich die Eingabetaste drückt, um die letzte Zeile ("D: Huflattich") angezeigt zu bekommen, dauert der Tastendruck in der Regel lange genug, um auch noch beim INPUT als "Datenfreigabe" zu wirken, ehe überhaupt etwas eingegeben wurde.
Wenn man tatsächlich die ganzen SLEEPs haben möchte, die die Textausgabe künstlich "bremsen", müsste man vor die INPUT-Anweisung Folgendes schreiben:
Code:
DO: SLEEP 1: LOOP UNTIL INKEY = ""

bzw. im größeren Zusammenhang:
Code:
...
PRINT "D: Huflattich"
SLEEP
DO: SLEEP 1: LOOP UNTIL INKEY = ""
INPUT "Ihre Antwort:", bal

SELECT CASE bal
...

Die eingefügte Zeile bewirkt, dass das Programm so lange wartet (dank SLEEP 1 "schläft"), wie der Tastaturpuffer (Abfrage mit INKEY) noch voll ist, also noch eine Eingabe enthält. Erst wenn der Tastaturpuffer leer ist, die Bedingung INKEY = "" also erfüllt ist, wird die sog. Schleife (siehe Befehlsreferenz!) verlassen und man gelangt zum INPUT.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!


Zuletzt bearbeitet von Sebastian am 02.09.2009, 19:55, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 02.09.2009, 19:54    Titel: Antworten mit Zitat

Du musst deine Probleme genauer beschreiben. Ehrlich gesagt verstehe ich nicht, wie bei deinem Programm irgendwas rauskommen konnte, bei mir hat der Compiler gleich wegen den falschen Datentypen gemeckert und ohne Input würde es auch nicht gehen.

Die Sleeps ohne jegliche Zahlen dahinter sind dazu da, das Programm kurz zu stoppen. Wenn du also erst nach einem Tastendruck weitermachen willst, dann eignet sich Sleep, auch wenn es den Tastaturpuffer nicht leert.

tim hat natürlich recht, dass auf das Sleep nach Input verzichtet werden kann, da Input ja eh auf Eingabe wartet.

Das Programm an sich funktioniert aber, wenn man "c" eingibt, kommt das, was du haben willst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 02.09.2009, 20:39    Titel: Antworten mit Zitat

Da hat es gemäss diesem Artikel wieder einmal viel Verbesserungspotenzial drin.

Die wichtigste Grundbasis für dieses Projekt: Datenbank mit den Fragen! Für diesen Fall empfehlenswert: Textdatei (z.B. FRAGEN.TXT => im NOTEPAD.EXE von Windows erstellt) mit einem einfachen Format wie
Code:
Q:Peter Kreuder komponierte 1936 den Schlager, Ich wollt' ich wär' ein ...?
A:Hummer
A:Hund
A:Huflattich
Q:Farben Frankreich-Flagge
A:rot-weiss-blau
A:rot-weiss-grün
A:schwarz-rot-gelb

Hinweis: Klare Definition treffen, z.B. "Q:" die Frage, nachfolgend mit "A:" die Antworten, wobei das erste immer das Richtige ist
=> Diese Daten nun in Stringarrays einlesen: Dabei würde ich mit einem
Code:
Dim Fragen(19) As String, Antworten(99) As String, AnzAnt(19) As Integer, AntwIndex(19) As Integer

arbeiten, damit eine Frage unterschiedlich viele Auswahlantworten besitzen kann.
=> Jetzt muss Dein FreeBasic-Programm mit RND eine Frage "auslosen", anschliessend noch die zugehörigen Antworten mischen. Dabei steht es Dir frei, auch weniger Antworten aufzulisten, d.h. richtige + z.B. noch 3 der 5 falschen Antworten. -> Macht dann das Spiel überhaupt erst interessant, weil eine spezifische Frage nicht immer mit genau gleichem Antwortenprofil erscheint, wenn man Dein Spiel häufiger spielt.

Kann sonst bei Bedarf einen Entwurf zusammenstellen, falls gewünscht.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 02.09.2009, 23:33    Titel: Antworten mit Zitat

Zunächst mal willkommen an Board! lächeln

ähhm ... ich kenne ja nur das Arrangement von den Comedian Harmonists, aber bist du sicher, dass es im Original "Ich wollt' ich wär' ein Hummer" heißt? Das wäre nämlich Antwort C ...

Die erste PRINT-Ausgabe sagt, man könne mit ESC das Programm beenden. Dazu ein Vorschlag:
Code:
DIM bal AS STRING, taste AS STRING

PRINT "Wilkommen bei 'Wer wird Milionär'! Wenn Sie mit dem Spiel beginnen möchten, drücken Sie eine beliebige Taste. Um das Programm zu beenden, drücken Sie ESC"
taste = INPUT(1)
IF taste = CHR(27) THEN END   ' CHR(27) ist die ESC-Taste
CLS
PRINT "Frage 1: Peter Kreuder komponierte 1936 den Schlager, Ich wollt' ich wär' ein ...?"
'[...]

Das mit INPUT(1) bietet sich bei dir auch für die Abfrage der eingegebenen Lösung an, weil die ja nur aus einem Buchstaben bestehen soll.

Die SLEEPs würde ich rauslassen oder zumindest durch GETKEY ersetzen, wegen des schon von Sebastian genannten Tastaturbuffers. Außerdem müssten noch die ungültigen Eingaben abgefangen werden (Eingabe eines Buchstabens, der nicht als Lösung vorkommt).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
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 FreeBASIC. 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