Kleines Quiz?

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

Kleines Quiz?

Beitrag 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
Zuletzt geändert von Dark Skillu am 18.03.2007 15:56, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ja
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag 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 = -
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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
Zuletzt geändert von PureBasic4.0 am 18.03.2007 17:30, insgesamt 3-mal geändert.
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

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

Beitrag 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?
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag von PureBasic4.0 »

habe den Quiz-Sourcecode aus meinem ersten Posting verändert. Bitte benutze die aktuelle Version
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Benutzeravatar
Dark Skillu
Beiträge: 103
Registriert: 18.03.2007 15:03

Beitrag 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
Benutzeravatar
PureBasic4.0
Beiträge: 785
Registriert: 29.10.2006 17:26
Wohnort: 127.0.0.1

Beitrag 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
PB 4.50 RC1 + Ubuntu 10.04 LTS + Windows 7 x64
Antworten