|
|
|
|
Hintergrund Musik / zufallsauswahl |
Medusa
Senior Member
Dabei seit: 10.09.2001
Beiträge: 356
Herkunft: ...von da, wo mein Haus wohnt...
|
|
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
.
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:
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..
__________________ Grüßle, Medi
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Medusa: 03.01.2004 18:26.
|
|
03.01.2004 18:18 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
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
):
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")
|
|
|
|
03.01.2004 18:49 |
|
|
CDW
eine Simulation
Dabei seit: 12.10.2002
Beiträge: 1.329
Herkunft: CreateRemoteThread
|
|
@garush: soweit ich mich noch an VBS erinnern kann
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
)
|
|
03.01.2004 19:06 |
|
|
garush
Aufsteiger
Dabei seit: 29.03.2003
Beiträge: 38
Themenstarter
|
|
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 |
|
__________________ [removed]
|
|
03.01.2004 19:09 |
|
|
Medusa
Senior Member
Dabei seit: 10.09.2001
Beiträge: 356
Herkunft: ...von da, wo mein Haus wohnt...
|
|
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 |
|
__________________ Grüßle, Medi
Dieser Beitrag wurde 6 mal editiert, zum letzten Mal von Medusa: 04.01.2004 14:40.
|
|
04.01.2004 14:03 |
|
|
garush
Aufsteiger
Dabei seit: 29.03.2003
Beiträge: 38
Themenstarter
|
|
|
04.01.2004 14:35 |
|
|
|
|
|
|