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:

Code: Alles auswählen

Quit = 1
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 :wink:

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 :

Code: Alles auswählen

Data.b 3
und die maximalen Fragen kann man mit

Code: Alles auswählen

#Max = 3
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.... ;)