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