Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
r3001
Anmeldungsdatum: 05.11.2004 Beiträge: 137 Wohnort: Wien
|
Verfasst am: 26.09.2005, 12:00 Titel: [VB] Zahlenraten mit DO-LOOP-Schleifen |
|
|
Hallo!
Wir haben vor einigen Tagen eine Hausaufgabe in VB6 bekommen: ein Zahlenratespiel mit DO-LOOP-WHILE, DO-WHILE-LOOP, DO-LOOP-UNTIL und DO-UNTIL-LOOP (4 verschiedene Forms,a uf dem das Spiel mit jeweils einer der oberen Schleifen realisiert wird). Erst dachte ich, es ist simpel, aber jetzt gehen mir die IDeen aus.
Habe es bereits mit txtBox_Change und _LostFocus, jedoch bekomme ich es nicht hin. Die Schleifen sind irgendwie unnötig in VB, da man ja Buttons hat - unser Prof. will jedoch die Aufgabe per DO-LOOP gelöst haben. Wenn ichs mit Change oder LostFocus mache, gerate ich nur in einer Endlosschleife und das Programm hängt sich auf. Einzige Möglichkeit wäre es, wenn ich das ganze mit einer InputBox realisiere.
Ehe ich aber den Versuch per InputBox starte, wollte ich erstmal von euch wissen,w ie man ein Zahlenratespiel per DO-LOOP in VB realisiert.
Hat hier jemand Tipps (mir reichen auch kleine Denkanstöße)?
Danke schonmal!
R |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 26.09.2005, 15:46 Titel: |
|
|
Hallo.
Code: | 'Auf Form1 eine Textbox und ein Label platzieren.
Private RichtigeZahl As Integer
Private Sub Form_Load()
Randomize Timer
RichtigeZahl=INT(RND*10)+1
Doevents
Me.refresh
do
doevents
If val(text1.text)=richtigezahl Then
...
end if
Loop
End Sub |
Find ich aber irgendwie blöd. Es wäre viel besser, das direkt in die Methode Click eines Buttons reinzuschreiben oder wenigstens einen Timer zu machen.  _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
r3001
Anmeldungsdatum: 05.11.2004 Beiträge: 137 Wohnort: Wien
|
Verfasst am: 26.09.2005, 20:55 Titel: |
|
|
Danke für die Hilfe!
Es ist wirklich sehr einfach. Ich hatte meine Versuche ohne DoEvents und Me.Refresh gemacht, das war auch der Fehler. Die Schleife und den Zufallsgenerator hatte ich schon gehabt, nur die beiden Befehle nicht.
DoEvents funktioniert so, dass eine Do-Loop-Schleife aktiv ist, man jedoch im Programm weiterarbeiten kann. Me.Refresh aktualisiert das Formular (Was genau bringt der Befehl für Vorteile?)
Hoffe es ist richtig so, wenn nicht, korrigiert mich bitte
R |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
r3001
Anmeldungsdatum: 05.11.2004 Beiträge: 137 Wohnort: Wien
|
Verfasst am: 26.09.2005, 22:19 Titel: |
|
|
Ah, Danke.
Jetzt versteh ich zumindest, wie ich trotz Do-Loop-Schleife im Programm arbeiten kann
Danke!
Kann von mir aus geclosed werden.
R |
|
Nach oben |
|
 |
r3001
Anmeldungsdatum: 05.11.2004 Beiträge: 137 Wohnort: Wien
|
Verfasst am: 27.09.2005, 03:15 Titel: |
|
|
Sry für Doppelpost!
Habe nun deinen Code soweit auf meine Ansprüche verändert und noch etwas ausgebaut.
Code: | Private Sub txtEingabe_Change()
If Gestartet = True Then ' wenn ein Button geklickt wird, wird die Boolean-Variable auf True gesetzt, sonst startet die Schleife nicht
lblEingabe.Caption = ""
lblZahl.Caption = ""
EingabeZahl = Val(txtEingabe.Text)
Do
DoEvents
If EingabeZahl < Zufallszahl Then
lblZahl.Caption = "Gesuchte Zahl ist großer!"
Versuche = Versuche + 1
ElseIf EingabeZahl > Zufallszahl Then
lblZahl.Caption = "Gesuchte Zahl ist kleiner!"
Versuche = Versuche + 1
ElseIf EingabeZahl = Zufallszahl Then
lblZahl.Caption = "Zahl erraten!"
Versuche = Versuche + 1
End If
txtEingabe.SetFocus
txtEingabe.SelStart = 0
txtEingabe.SelLength = Len(txtEingabe.Text)
lblEingabe.Caption = txtEingabe.Text
Loop While EingabeZahl <> Zufallszahl
Gestartet = False
cmdStart.Visible = True
lblZahl.Caption = "Es wurden " + Str(Versuche) + " Versuche benötigt!"
End If
End Sub
|
Soweit klappt es ganz gut, jedoch hänge ich bei den Versuchen. WEnn ich die Versuche ausgebe, kommen Zahlen bis zu 10199 oder Ähnliches. Auch wird das Ganze mehrmals angezeigt (sooft wie die Versuche). Bei der Aufgabe ist es aber erforderlich, die Ergebnisse auszugeben - kann man dies mit deiner Variante umsetzen? Mir käme in den Sinn, den ASCII-Code abzufragen, ob eine Zahlen-Taste gedrückt wurde und danach die Versuche zu zählen, aber ich wollte mich erst hier erkundigen.
Ich kann dir oder jemand anderes auch mein Projekt schicken, damit ihr es direkt vor euch habt.
Hoffe es klappt irgendwie!
Danke!
R |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
r3001
Anmeldungsdatum: 05.11.2004 Beiträge: 137 Wohnort: Wien
|
Verfasst am: 27.09.2005, 19:39 Titel: |
|
|
Die Versuche werden so hoch, wenn ich z.B. zwei Zahlen eingebe und die Nächste richtig ist. Dann sinds über 4000 Versuche oder so.
Wie meinst du das mit der Warteschleife?
Code: | Private Sub Wartezeit(Zeit As Single)
Dim T As Single
T = Timer + Zeit
While T > Timer: Wend
End Sub |
So?
Weil bei diesem wird auch weiterhin der Versuchszähler hochgeschraubt (eben nur weniger wie 20 oder 30), auch wenn ich nun den Wert "Zeit" auf 0.50 setze oder auf 0.10. Wie würde ungefähr eine Möglichkeit aussehen, in der erst nach Tastendruck (und ob diese auch Zahlen sind) der Zähler erhöht wird?
Ich schicke dir das Projekt zu, damit du dir es direkt ansehen kannst (vielleicht habe ich ja irgendwo etwas anderes falsch gemacht
R |
|
Nach oben |
|
 |
|