Seite 1 von 4

Kleines Quiz?

Verfasst: 18.03.2007 15:44
von Dark Skillu
Hi habe zurzeit vor ein kleines Quiz zu programmieren mit einfachen If Abfragen+MessageRequester,habe aber das problem,dass ich so nur Ja/Nein Fragen erstellen kann,also keine selbstdefinierten Antwortmöglichkeiten.Kann mir jemand dabei helfen?

Hier der Quellcode:

Code: Alles auswählen

If MessageRequester("Frage", "Ist Berlin Deutschlands Hauptstadt?", #PB_MessageRequester_YesNo)=#PB_MessageRequester_Yes
MessageRequester("Richtig","Diese Antwort ist richtig!" +  Chr(10)  + "Leider ist mein kleines Quiz hier schon zu Ende!")
Else 
MessageRequester("Falsch", "Ihre Antwort war leider falsch!" +  Chr(10)  + "Versuchen sie es nochmal!")
EndIf

Verfasst: 18.03.2007 15:56
von Kaeru Gaman
ja

Verfasst: 18.03.2007 16:50
von TomS
Aus'm Code Archiv

Code: Alles auswählen

; English forum:
; Author: Unknown
; Date: 21. January 2003
; OS: Windows
; Demo: No


; Change dialog box buttons... crashes PBCompiler, but the program itself works!

; Try creating an .exe file -- PB will crash, but the .exe version will work just fine when run :)

#IDOK = 1
#IDCANCEL = 2
#IDABORT = 3
#IDRETRY = 4
#IDIGNORE = 5
#IDYES = 6
#IDNO = 7
#IDPROMPT = $FFFF

Global hHook
Global mbtitle$, mbmsg$, mbopt1$, mbopt2$, mbopt3$

; Have to pre-allocate maximum string length, as the dialog box is created with message/title
; with this many spaces (the width of the box comes from this), then the text is hacked into it.

#StringSpace = 80

Procedure MsgBoxHookProc (uMsg, wParam, lParam)
   If uMsg = #HCBT_ACTIVATE
      SetWindowText_ (wParam, mbtitle$)
      SetDlgItemText_ (wParam, #IDABORT, mbopt1$)
      SetDlgItemText_ (wParam, #IDRETRY, mbopt2$)
      SetDlgItemText_ (wParam, #IDIGNORE, mbopt3$)
      SetDlgItemText_ (wParam, #IDPROMPT, mbmsg$)
      UnhookWindowsHookEx_ (hHook)
   EndIf
   ProcedureReturn #False
EndProcedure

Procedure MessageBoxH (parentWindow, title$, message$, button1$, button2$, button3$)
   mbtitle$ = title$
   mbmsg$ = message$
   mbopt1$ = button1$
   mbopt2$ = button2$
   mbopt3$ = button3$
   hInstance = GetModuleHandle_ (0)
   hThreadId = GetCurrentThreadId_ ()
   hHook = SetWindowsHookEx_ (#WH_CBT, @MsgBoxHookProc (), hInstance, hThreadId)
   ProcedureReturn MessageBox_ (parentWindow, Space (#StringSpace), Space (#StringSpace), #MB_ABORTRETRYIGNORE | #MB_ICONINFORMATION)
EndProcedure

MessageBoxH (0, "Search for program...", "Please select the drive to search...", "Search C:\", "Search D:\", "Cancel")
; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -

Verfasst: 18.03.2007 17:03
von PureBasic4.0
Hi.

Ich könnte dir empfehlen, die Fragen und Antworten in einer Datei zu speichern. Habe hier mal zum Spaß was geproggt. Sollte eigentlich funktionieren

Code: Alles auswählen

; ------------------------------------------------------------------------------------------
;                                 Coded by PureBasic4.0
;                                 
; Die Datei FragenUndAntworten.txt muss folgende Informationen beinhalten:
; 1. Die Frage als String
; 2. Die Antwort als Byte (1 bedeutet Ja, 0 bedeutet Nein)
; 
; Dieses Quiz kann kostenlos kompiliert und benutzt werden (auch als kommerzielle Version)
; ------------------------------------------------------------------------------------------
#File = "FragenUndAntworten.txt"
Structure Questions
  Frage.s
  Antwort.b
  ID.d
EndStructure
Global AnzahlFragen.d
NewList Fragen.Questions()
If ReadFile(0,#File)
  Repeat
    Frage$ = ReadString(0)
    Antwort = ReadByte(0)
    AddElement(Fragen())
    Fragen()\Frage = Frage$
    Fragen()\Antwort = Antwort
    Fragen()\ID = AnzahlFragen
    AnzahlFragen + 1
  Until Eof(0)
Else
  MessageRequester("Fehler","Die Datei "+#File+" konnte nicht geöffnet werden"+Chr(13)+"Das Programm wird beendet",#MB_ICONSTOP)
  End
EndIf
If AnzahlFragen = 0 Or AnzahlFragen = 1
  MessageRequester("Fehler","Die Datei "+#File+" muss mehr als 1 Frage enthalten",#MB_ICONSTOP)
  End
EndIf
Repeat
  nochmalfrage:
  Repeat
    AktuelleFrage = Random(AnzahlFragen)
  Until AktuelleFrage <> LetzteFrage
  ForEach Fragen()
    If Fragen()\ID = AktuelleFrage
      FrageText$ = Fragen()\Frage
      FrageAntwort = Fragen()\Antwort
      Break
    EndIf
  Next
  If FrageText$ = ""
    Goto nochmalFrage
  EndIf
  Result = MessageRequester("Frage",FrageText$,#PB_MessageRequester_YesNoCancel|#MB_ICONQUESTION)
  If Result = #PB_MessageRequester_Cancel
    End
  ElseIf Result = #PB_MessageRequester_No
    GegebeneAntwort = 1
  Else
    GegebeneAntwort = 2
  EndIf
  If GegebeneAntwort = FrageAntwort
    MessageRequester("Info","RICHTIG!!!",#MB_ICONINFORMATION)
  Else
    MessageRequester("Info","Leider falsch",#MB_ICONEXCLAMATION)
  EndIf
  LetzteFrage = AktuelleFrage
ForEver
//edit: Mist, 10 Minuten zu spät... Naja. Denke den Code hier kann man besser verstehen

Verfasst: 18.03.2007 17:08
von Dark Skillu
sry ich bin ein Anfänger,deshalb auch Anfänger Forum und kann fast nix mit dem anfangen was ihr gepostet habt aber trotzdem Danke für eure Hilfe

Verfasst: 18.03.2007 17:13
von Dark Skillu
die Idee mit dem einlesen aus der Textdatei ist ganz gut aber ich check noch nicht so ganz wie das geht:

Muss ich die fragen reinschreiben und einfach .s dran hängen oder was?Und bei den Antworten 0 oder 1?

Verfasst: 18.03.2007 17:16
von PureBasic4.0
hab mal was zum hinzufügen von fragen geproggt. führ's einfach aus und die Bedienung erklärt sich von selbst:

Code: Alles auswählen

If OpenFile(0,"FragenUndAntworten.txt")
  OpenConsole()
  PrintN("Tool zum Hinzufuegen von Fragen und Antworten")
  Repeat
    PrintN("")
    Print("Frage: ")
    Frage$ = Input()
    Nochmal:
    PrintN("Antwort: ")
    PrintN("(1) Nein")
    PrintN("(2) Ja")
    Print("Eingabe: ")
    AntwortString$ = Input()
    Antwort = Val(AntwortString$)
    If Antwort = 1 Or Antwort = 2
      WriteString(0,Frage$)
      WriteByte(0,Antwort)
      PrintN("OK. Die Frage wurde gespeichert")
    Else
      PrintN("Ungueltige Eingabe")
      Goto Nochmal
    EndIf
  ForEver
EndIf
//edit: Aber speichere den Code vorher irgendwo ab, sonst wird die Datei FragenUndAntworten.txt ins Compiler-Verzeichnis geschrieben, wo sie nicht hingehört

Verfasst: 18.03.2007 17:24
von PureBasic4.0
habe den Quiz-Sourcecode aus meinem ersten Posting verändert. Bitte benutze die aktuelle Version

Verfasst: 18.03.2007 17:32
von Dark Skillu
ich glaub ihr versteht nicht ganz was ich meine.Ich möchte auf den Buttons meine Antworten stehen haben,geht das?Und zuvor mit MessageRequester... ne Frage stellen

Verfasst: 18.03.2007 17:36
von PureBasic4.0
wenn du sowas machen willst, funktionieren Messagerequesters nich mehr. Dann muss ein Window aufgemacht werden, auf dem Button Gadgets deine Antworten anklickbar machen. Ist aber für nen Anfänger denke ich zu hoch. Wie ich angefangen habe, habe ich auch erst mal mit MessageRequestern und Consoles gearbeitet.
Ich schau mal, ob sich da ein Code machen lässt