Kleines Quiz?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag 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?
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten