 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ninis
Anmeldungsdatum: 01.09.2009 Beiträge: 8
|
Verfasst am: 02.09.2009, 19:11 Titel: Problem mit Sleep |
|
|
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.
Danke, |
|
Nach oben |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 02.09.2009, 19:30 Titel: |
|
|
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 |
|
 |
ninis
Anmeldungsdatum: 01.09.2009 Beiträge: 8
|
Verfasst am: 02.09.2009, 19:32 Titel: |
|
|
tut trotzdem nicht |
|
Nach oben |
|
 |
ninis
Anmeldungsdatum: 01.09.2009 Beiträge: 8
|
Verfasst am: 02.09.2009, 19:36 Titel: |
|
|
und wenn man die sleeps weglässt wird dass Programm beendet |
|
Nach oben |
|
 |
ninis
Anmeldungsdatum: 01.09.2009 Beiträge: 8
|
Verfasst am: 02.09.2009, 19:39 Titel: |
|
|
trotzdem danke |
|
Nach oben |
|
 |
tim.vogt

Anmeldungsdatum: 01.03.2009 Beiträge: 56
|
Verfasst am: 02.09.2009, 19:44 Titel: |
|
|
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 |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 02.09.2009, 19:53 Titel: |
|
|
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 02.09.2009, 19:54 Titel: |
|
|
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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 02.09.2009, 20:39 Titel: |
|
|
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 |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 02.09.2009, 23:33 Titel: |
|
|
Zunächst mal willkommen an Board!
ä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 |
|
 |
|
|
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.
|
|