BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- VB - Frage Hintergrund Musik / zufallsauswahl (http://www.black-board.net/thread.php?threadid=15369)


Geschrieben von garush am 03.01.2004 um 14:14:

Fragezeichen Hintergrund Musik / zufallsauswahl

Hy Leutz,
grad fängt das neue Jahr an und schon brauch ich eure Hilfe.
Wie kann ich mit Visual Basic 6 hintergrundmusik in ein Formular einfügen?
Und wie erkläre ich meinem VB das es ein zufälliges formular auswählen soll?Für ein Quiz, es soll ja net immer wieder gleich anfangen!!!!!

thx im vorraus
GaRush


[EDIT]

Ich hab jetzt einen Button eingefügt, der soll beim draufklicken einen Nummer generieren und dann das form mit der nummer öffnen. Ich weiß aber net wie das geht.

So sieht das aus:
code:
1:
2:
3:
4:
Private Sub startgame_Click()
x = Int((Rnd * 2) + 1)
fragex.Show
End Sub


[/EDIT]



Geschrieben von Medusa am 03.01.2004 um 18:18:

  RE: Hintergrund Musik / zufallsauswahl

Zitat:
code:
1:
2:
3:
4:
Private Sub startgame_Click()
x = Int((Rnd * 2) + 1)
fragex.Show
End Sub


du solltest, wenn du mit rnd arbeitest, den Zufallsgenerator zuvor initialisieren, mit der Funktion Randomize.

Wenn du zu jeder Frage ein seperates Formular erstellst, dann wird das sehr unübersichtlich. Und wenn du mal im Design was ändern willst, dann müsstest du das auf jedem Formular ändern. Wenn dein Quiz 100 Fragen hat, dauert das ne weile Augenzwinkern .

Wenn du es trotzdem so lösen willst, dann musst du mit Index arbeiten. Du gibst jedem Formular einen Index und den selben Namen. Dem ersten Form gibst du den Index 1, dem zweiten den Index 2, und dem dritten 3. Wenn du dann in x deine Zufallszahl (in deinem Beispiel zwischen 1 und 3) hast, rufst du das Fenster so auf:
code:
1:
frage(x).show


Zum Thema Hintergrundmusik sag ich später was, müsst ich auch erst nachschauen, weiß ich jetzt net, wie man das machen kann.


Ich würde das mit dem zufälligen Auswählen der Fragen anders lösen. Ich würde in einem Array alle Fragen und Antworten speichern (könntest du ja aus ner Datei auslesen lassen). Ich würde dann nur 1 Form verwenden, und dort die Frage in nem Label oder so anzeigen lassen. Die Labelaufschrift wird dann zufällig aus dem Array geholt. Und die zugehörigen Antworten und so natürlich auch..



Geschrieben von CDW am 03.01.2004 um 18:49:

 

zum sound:
dazu gibts ne ganz nette winapi:
BOOL PlaySound(
LPCSTR pszSound,
HMODULE hmod,
DWORD fdwSound
);

also z.b:
PlaySound("sound1.wav",NULL,SND_FILENAME +SND_LOOP+ SND_ASYNC
)

oder VB intern(found by google Augen rollen ):
code:
1:
2:
3:
4:
5:
6:
7:
Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

Private Sub Form_Load()
  ' Spielt Multimedia-Dateien ab ( WAV, MIDI, AVI )
  Call mciExecute("Play C:\WINDOWS\MEDIA\DING.WAV")



Geschrieben von garush am 03.01.2004 um 18:56:

 

@medusa:
Wie mach ich das denn wenn alle fragen in einer Textdatei gespeichert werden sollen? Je frage 4 Antworten.

@CDW:
funzet net.
Muss ich doch im start form rein ne?
bei mir sieht das so aus :
code:
1:
2:
3:
4:
Private Sub Form_Load()
  ' Spielt Multimedia-Dateien ab ( WAV, MIDI, AVI )
  Call mciExecute("Play C:\WINDOWS\MEDIA\DING.WAV")
End Sub


Was soll die Zeile

Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

muss die unbedingt mit rein?



Geschrieben von CDW am 03.01.2004 um 19:06:

 

@garush: soweit ich mich noch an VBS erinnern kann smile
ja, die Zeile ist wichtig. Und den Pfad solltest du natürlich anpassen...
und zwar kannst du wenn die WAV Datei (ich glaub, mp3 gehen auch, muss mal nachschauen) im Programmordner liegt einfach "musik1.wav" schreiben und wenn du die Musik im Unterordner ablegen willst "\Musik\musikdatei.wav"
aber wart lieber bis Medusa dir antwortet, er beherrscht diese Sprache (im Gegensatz zu mir Augenzwinkern )



Geschrieben von garush am 03.01.2004 um 19:09:

 

ich habs geschaft einen wert zwischen 1 und 49 in einem fenster auszugeben.
code:
1:
2:
3:
    Randomize
    Wert1 = Int((49 * Rnd) + 1)   ' Ganze Zufallszahl im Bereich von 1 bis 49 erzeugen.
    MsgBox Wert1

Wie übertrage ich das jetzt auf ein Formular?
Wenn ich das so mache geht das net:
code:
1:
2:
3:
    Randomize
    Wert1 = Int((49 * Rnd) + 1)   ' Ganze Zufallszahl im Bereich von 1 bis 49 erzeugen.
    frage(Wert1).Show



Geschrieben von Medusa am 04.01.2004 um 14:03:

 

Zitat:
Original von garush
Wenn ich das so mache geht das net:
code:
1:
2:
3:
    Randomize
    Wert1 = Int((49 * Rnd) + 1)   ' Ganze Zufallszahl im Bereich von 1 bis 49 erzeugen.
    frage(Wert1).Show

Das Formular "frage" mit dem Index Wert1 muss auch existieren.
Du musst also 49 Formulare erstellen, die den Namen "frage" haben und jedes einen Index. Bei 49 siehst du vielleicht schon, warum das umständlich ist.


Vorschlag:
Erstell einfach ein Form mit dem Namen "frmFrage"
und darauf ein Label mit dem Namen "lblFrage".
"frage" ist hier jetzt nicht das Formular, sondern ein Array, indem die Fragen stehen !!
In der Sub Form_load() schreibst du dann:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
dim frage(1 to 49) as string
frage(1)="Hier die Frage Nr. 1"
frage(2)="Hier die Frage Nr. 2"
frage(3)="..."

Randomize
Wert = int((48*rnd)+1)
frmFrage.lblFrage.caption=frage(Wert)
frmFrage.show

Willst du meherer Antwortmöglichkeiten geben, von denen eine richtig ist, oder wie hast du dir das vorgestellt?
Wenn du das so machen willst, dann musst halt noch die Antwort-Arrays füllen, und wieder eins davon (zufällig) in ein Label schreiben. in einem weiteren Array kannst ja dann z.b. ne Zahl schreiben, welches von den Antworten die richtige ist. Dann musst du aber das Array außerhalb der Sub erstellen (ich mein den Dim-Befehl), damit du auch von anderen Subs aus darauf zugreifen kannst.





Du könntest die Fragen, Antworten, etc auch aus ner Datei auslesen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
dim frage() as string
dim antwort1() as string
dim antwort2() as string
dim antwort3() as string
dim antwort4() as string
dim correct() as integer

open "blabla.txt" for input as #1
    do until eof(1)
        i=i+1
        line input #1, frage(i)
        line input #1, antwort1(i)
        line input #1, antwort2(i)
        line input #1, antwort3(i)
        line input #1, antwort4(i)
        line input #1, correct(i)
    loop
close #1
Das wär jetzt eine Frage und vier Antwortmöglichkeiten.
In der ersten Zeile der Datei steht die Frage, in der 2.-5. die vier Antwortmöglichkeiten, und in der 6. steht die Zahl der richtigen Antwort. Danach gehts in der 7. Zeile mit der zweiten Frage weiter.





Wahrscheinlich hast du dann 4 Buttons (a,b,c,d). musst halt dann mit dem Array correct() prüfen, ob die Antwort richtig ist. Hier kannst auch wieder den 4 Buttons den selben Namen geben, und jedem ein Index. (von 1 bis 4)
code:
1:
2:
3:
4:
Sub button_click(index as integer)
if correct(wert) = index then msgbox "richtig :D"

end sub
die Variable "wert" ist die Zufallszahl, die generiert wurde. Die musst du auch außerhalb der Subs definieren, damit sie z.b. in dieser sub (button_click) gültig ist.




btw:
Zitat:
code:
1:
2:
    Randomize
    Wert1 = Int((49 * Rnd) + 1)   ' Ganze Zufallszahl im Bereich von 1 bis 49 erzeugen.
Diese Zeile liefert einen Wert zwischen 1 und 50 (beide Zahlen eingeschlossen), denn 49*rnd --> Zahl zwischen 0 und 49, das ganze + 1 --> Zahl zwischen 1 und 50.






Hintergrundmusik:

Zitat:
Was soll die Zeile

Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long

muss die unbedingt mit rein?
Ja, dass muss sie. Mit dieser Zeile deklarierst du die Funktion mciExecute. Das ist eine externe Funktion in der winmm.dll. Da es diese Funktion in VB nicht direkt gibt, muss du so eine externe Funktion in einer dll verwenden. Wichtig ist, dass diese Zeile außerhalb einer Sub steht.
Mit dieser Mathode wird der Sound aber nicht in Schleife gespielt, was bei Hintergrundmusik net so gut ist. Deshalb würde ich es mit der Funktion PlaySound machen, wie CDW sagte:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" _
 (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) _
 As Long
 
Private Const SND_ASYNC As Long = &h1
Private Const SND_LOOP As Long = &h8
Private Const SND_FILENAME As Long = &h20000

Private Sub Form_load()
PlaySound "C:\windows\media\ding.wav", 0, snd_async + snd_filename + snd_loop

End Sub



Geschrieben von garush am 04.01.2004 um 14:35:

 

Danke Medusa!!! Respekt


Nur eine Frage hab ich noch ( Mauer )

Wie muss denn dann die Datei mit der frage aussehen?
frage;antwort1;antwort2;antwort3;antwort4;correct;
2frage;2antwort1;2antwort2;2antwort3;2antwort4;2correct;

oder wie????
Baby



Geschrieben von Medusa am 04.01.2004 um 14:42:

 

Zitat:
Original von Medusa
In der ersten Zeile der Datei steht die Frage, in der 2.-5. die vier Antwortmöglichkeiten, und in der 6. steht die Zahl der richtigen Antwort. Danach gehts in der 7. Zeile mit der zweiten Frage weiter.


Augenzwinkern


Ich brauch immer ne halbe Stunde, bis mein Beitrag nachm 20. mal editieren endlich fertig ist. Aber so lass ich ihn jetzt. Wenn mir noch was einfällt, schreib ich n neuen großes Grinsen



Geschrieben von Gast-Nr. X am 10.01.2004 um 03:15:

 

delete


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH