Seite 4 von 4
Verfasst: 21.03.2007 19:16
von Dark Skillu
So das Problem mit den Fragen hab ich behoben:
Code: Alles auswählen
MessageRequester("Quiz!", "Hi das ist mein erstes sinnvolles Programm,nen kleines Quiz mit einfachen IF-Abfragen und Gadgets!")
If OpenWindow(0, 400, 400, 350, 300, "Quiz?")
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 25, 10, 300, 60, "Was ist die Hauptstadt von Deutschland?")
ButtonGadget(2, 25, 80, 300, 60, "Bonn")
ButtonGadget(3, 25, 150, 300, 60, "Berlin")
ButtonGadget(4, 25, 220, 300, 60, "Wegberg")
EndIf
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_CloseWindow
Quit=1
EndIf
If EventID = #PB_Event_Gadget
GadgetID= 1
If EventGadget()=2
MessageRequester("Falsch!", "Die Antwort ist leider falsch!")
EndIf
If EventGadget()=3
If MessageRequester("Richtig!", "Diese Antwort ist richtig!"+Chr(10)+"Wollen sie mit dem Quiz weiter fortfahren?",#PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes
;nächste Frage falls ja geantwortet wird
Else
MessageRequester("...","Sie wollen leider nicht fortfahren!");Hier soll eigtl das Prog. beendet werden wenn man auf OK klickt was aber nicht funzt?!
EndIf
EndIf
If EventGadget()=4
MessageRequester("Falsch!", "Diese Antwort ist leider Falsch!")
EndIf
EndIf
Until quit=1
EndIf
End
Aber wie schaffe ich es das mein Prog ganz schließt wenn ich ne falsche antwort gewählt habe,der MessageRequester sich öffnet und ich OK klicke?
Verfasst: 21.03.2007 19:23
von ts-soft
>> Aber wie schaffe ich es das mein Prog ganz schließt wenn ich ne falsche antwort gewählt habe
Nachdem Messagerequester noch eine Zeile mit:
einfügen, ist doch Deine Abbruchvariable für den EventLoop
Verfasst: 21.03.2007 20:19
von Dark Skillu
Ist das normal wenn man mehrere Gadgets definiert,dass die sich automatisch öffnen?z.B. die Gadgets 5-8 sollen eigentlich nicht erscheinen und wollte die eigtl. für meine zweite frage nutzen
Code: Alles auswählen
MessageRequester("Quiz!", "Hi das ist mein erstes sinnvolles Programm,nen kleines Quiz mit einfachen IF-Abfragen und Gadgets!")
If OpenWindow(0, 400, 400, 350, 600, "Quiz?")
If CreateGadgetList(WindowID(0))
ButtonGadget(1, 25, 10, 300, 60, "Was ist die Hauptstadt von Deutschland?")
ButtonGadget(2, 25, 80, 300, 60, "Bonn")
ButtonGadget(3, 25, 150, 300, 60, "Berlin")
ButtonGadget(4, 25, 220, 300, 60, "Wegberg")
ButtonGadget(5, 25, 290, 300, 60, "Was ist die Hauptstadt von England?")
ButtonGadget(6, 25, 360, 300, 60, "London")
ButtonGadget(7, 25, 430, 300, 60, "Liverpool")
ButtonGadget(8, 25, 500, 300, 60, "New York")
EndIf
Repeat
EventID=WaitWindowEvent()
If EventID=#PB_Event_CloseWindow
Quit=1
EndIf
If EventID = #PB_Event_Gadget
GadgetID= 1
If EventGadget()=2
MessageRequester("Falsch!", "Die Antwort ist leider falsch!")
Quit=1
EndIf
If EventGadget()=4
MessageRequester("Falsch!", "Diese Antwort ist falsch!")
Quit=1
EndIf
If EventGadget()=3
If MessageRequester("Richtig!", "Diese Antwort ist richtig!"+Chr(10)+"Wollen sie mit dem Quiz weiter fortfahren?",#PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes
Else
MessageRequester("Schade!","Sie wollen leider nicht fortfahren!")
Quit=1
EndIf
EndIf
EndIf
Until quit=1
EndIf
End
Verfasst: 21.03.2007 20:36
von ts-soft
Wenn Du soviel Gadgets erstellst, werden die auch erzeugt. Du solltest
besser den Text der ersten Buttons ändern (SetGadgetText) und natürlich
auch die Texte der MessageRequester!
Texte kannste in eine Datasection schreiben und mit Restore und Read dann
einlesen. Dafür wirste wohl noch ein bissel in der Hilfe lesen müssen.
Bzw. über Variablen mußt Du Dich auch noch informieren. Schaffste schon
Gruß
Thomas
Verfasst: 21.03.2007 23:32
von ts-soft
Hab Dir mal eine erweiterbare Version erstellt, ich hoffe Du versuchst auch
zu verstehen, was dort passiert! Wenn ja, wirste es auch um beliebig viele
Fragen erweitern können.
Code: Alles auswählen
DataSection
Frage1:
Data.s "Was ist die Hauptstadt von Deutschland?", "Bonn", "Berlin", "Wegberg"
Data.b 2
Frage2:
Data.s "Was ist die Hauptstadt von England?", "London", "Liverpool", "New York"
Data.b 1
EndDataSection
#Max = 2
Global Richtig.b
Enumeration ; Gadget
#lblFrage
#btnAntwort1
#btmAntwort2
#btnAntwort3
EndEnumeration
Procedure NaechsteFrage()
Static Aktuell.l
Aktuell + 1
If Aktuell > #Max
Aktuell = 1
EndIf
Select Aktuell
Case 1
Restore Frage1
Case 2
Restore Frage2
EndSelect
Read Frage.s
Read Antwort1.s
Read Antwort2.s
Read Antwort3.s
Read Richtig
SetGadgetText(#lblFrage, Frage)
SetGadgetText(#btnAntwort1, Antwort1)
SetGadgetText(#btmAntwort2, Antwort2)
SetGadgetText(#btnAntwort3, Antwort3)
EndProcedure
MessageRequester("Quiz!", "Hi das ist mein erstes sinnvolles Programm,nen kleines Quiz mit einfachen IF-Abfragen und Gadgets!")
Define.l Quit, EventID, GadgetID
If OpenWindow(0, 400, 400, 350, 250, "Quiz?")
If CreateGadgetList(WindowID(0))
TextGadget(#lblFrage, 25, 10, 300, 60, "")
SetGadgetFont(#lblFrage, LoadFont(#PB_Any, "Arial", 42, #PB_Font_Bold))
ButtonGadget(#btnAntwort1, 25, 40, 300, 60, "")
ButtonGadget(#btmAntwort2, 25, 110, 300, 60, "")
ButtonGadget(#btnAntwort3, 25, 180, 300, 60, "")
NaechsteFrage()
Repeat
EventID = WaitWindowEvent()
GadgetID = EventGadget()
If EventID = #PB_Event_CloseWindow
Quit = #True
ElseIf EventID = #PB_Event_Gadget
If GadgetID = Richtig
If MessageRequester("Richtig!", "Diese Antwort ist richtig!"+Chr(10)+"Wollen sie mit dem Quiz weiter fortfahren?",#PB_MessageRequester_YesNo) = #PB_MessageRequester_No
MessageRequester("Schade!","Sie wollen leider nicht fortfahren!")
Quit = #True
Else
NaechsteFrage()
EndIf
Else
MessageRequester("Falsch!", "Die Antwort ist leider falsch!")
Quit = #True
EndIf
EndIf
Until Quit = #True
EndIf
EndIf
Verfasst: 22.03.2007 17:59
von Dark Skillu
wenn ich ne neue Frage erstellen will muss ich in der Datasection eine neue Frage erstellen oder? z.B.:
Code: Alles auswählen
DataSection
Frage1:
Data.s "Was ist die Hauptstadt von Deutschland?", "Bonn", "Berlin", "Wegberg"
Data.b 2
Frage2:
Data.s "Was ist die Hauptstadt von England?", "London", "Liverpool", "New York"
Data.b 1
Frage3:
Data.s "Was ist die Hauptstadt von Frankreich?", "Paris", "Marseille", "Dunkerque"
Data.b 3
EndDataSection
und die richtige Antwort markiere ich mit :
und die maximalen Fragen kann man mit
definieren oder?Habe ich soweit alles richtig verstanden?
Verfasst: 22.03.2007 18:00
von Dark Skillu
das einzigste was ich noch nicht ganz verstanden habe ist das:
Code: Alles auswählen
Enumeration ; Gadget
#lblFrage
#btnAntwort1
#btmAntwort2
#btnAntwort3
EndEnumeration
Procedure NaechsteFrage()
Static Aktuell.l
Aktuell + 1
If Aktuell > #Max
Aktuell = 1
EndIf
Select Aktuell
Case 1
Restore Frage1
Case 2
Restore Frage2
EndSelect
Read Frage.s
Read Antwort1.s
Read Antwort2.s
Read Antwort3.s
Read Richtig
SetGadgetText(#lblFrage, Frage)
SetGadgetText(#btnAntwort1, Antwort1)
SetGadgetText(#btmAntwort2, Antwort2)
SetGadgetText(#btnAntwort3, Antwort3)
EndProcedure
was bewirkt dieser Code?
Verfasst: 22.03.2007 18:09
von ts-soft
da gehört dann natürlich noch Case 3 : Restore Frage3 rein. Liest doch mal
ein bischen in der Hilfe und schau Dir die Examples an!
Verfasst: 22.03.2007 18:15
von Kaeru Gaman
> was bewirkt dieser Code?
- Restoren auf aktuellen Datenabschnitt
- Read der aktuellen Frage/Antwort-Daten
- SetGadgetText mit aktuellen Frage/Antwort-Daten
wie ts schon sagte:
> Lies doch mal ein bischen in der Hilfe und schau Dir die Examples an!
selber erarbeiten macht fähig....
