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:

[VB] Zahlenraten mit DO-LOOP-Schleifen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Computer-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
r3001



Anmeldungsdatum: 05.11.2004
Beiträge: 137
Wohnort: Wien

BeitragVerfasst am: 26.09.2005, 12:00    Titel: [VB] Zahlenraten mit DO-LOOP-Schleifen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.09.2005, 15:46    Titel: Antworten mit Zitat

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. zwinkern
_________________

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
r3001



Anmeldungsdatum: 05.11.2004
Beiträge: 137
Wohnort: Wien

BeitragVerfasst am: 26.09.2005, 20:55    Titel: Antworten mit Zitat

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 zwinkern

R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.09.2005, 21:57    Titel: Antworten mit Zitat

Beide Befehle bewirken, dass du trotz der Schleife vernünftig mit der Form arbeiten kannst. Me.Refresh bewirkt in dem Fall den korrekten Aufbau der Oberfläche und DoEvents sorgt dafür, dass sich das System nicht in dieser Endlosschleife "festbeißt" wie du schon meintest. lächeln
Die Anwendung blockiert dadurch nicht.
_________________

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
r3001



Anmeldungsdatum: 05.11.2004
Beiträge: 137
Wohnort: Wien

BeitragVerfasst am: 26.09.2005, 22:19    Titel: Antworten mit Zitat

Ah, Danke.

Jetzt versteh ich zumindest, wie ich trotz Do-Loop-Schleife im Programm arbeiten kann lächeln

Danke!

Kann von mir aus geclosed werden.

R
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
r3001



Anmeldungsdatum: 05.11.2004
Beiträge: 137
Wohnort: Wien

BeitragVerfasst am: 27.09.2005, 03:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 27.09.2005, 13:51    Titel: Antworten mit Zitat

Ähm, nur so als Verständnishilfe für mich: Die Versuche werden trotz weniger Klicks auf einmal so hoch? Dann würd ich an deiner Stelle eine ganz konventionelle Warteschleife mit TIMER nach das Erhöhen des Versuchszählers machen und ggf. während dessen auch Form.Enabled auf False setzen. lächeln
_________________

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
r3001



Anmeldungsdatum: 05.11.2004
Beiträge: 137
Wohnort: Wien

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

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 zwinkern

R
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 -> Computer-Forum 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