Normales Quiz / Fragespiel mit mehreren Antwortmöglichkeiten

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von 0ptix.

    Normales Quiz / Fragespiel mit mehreren Antwortmöglichkeiten

    Also,

    In meinem Letzten Beitrag hatte ich ja gefragt wegen einem Quiz mit Bildern. Das hat alles super geklappt, unsere Kleine ist begeistert.
    Habe jetzt jede Frage einzeln in eine Datei gespeichert, bild dazu, läuft bombastisch. Kann auch jederzeit ohne Probleme erweitert werden, einfach super! :)
    Danke nochmal an @Cheffboss und @RodFromGermany und natürlich an alle anderen :)

    Kennt jeder, wie soll es auch anders sein, Kinder wollen immer mehr und noch mehr und man gibt natürlich irgendwann nach... :P

    Wie das funktioniert mit RadioButton einlesen usw. hab ich jetzt alles kapiert und das funktioniert auch alles aber was mach ich denn jetzt wenn ich z.b. CheckBoxen hab?
    Jup, gegoogelt hab ich natürlich auchs chon aber da wird immer nur eine einzelne Frage angezeigt, nie mehrere oder mit na Datenbank oder Datei einlesen oder sowas

    Was möchte ich?
    Vereinfacht gesagt - mal ein ganz einfaches Beispiel:
    Frage ist: Welche Zahlen sind zwischen 5 und 8?
    Möglich wäre ja dann 6 und 7 - aber das ist ja nicht mit einem RadioButton machbar, da zwei antworten (Klar, man könnte jetzt sagen "RadioButton.text = 6 und 7" aber das is ja nicht das was ich möchte :D ).
    Theoretisch würde es dann aussehen wie z.b.: (Mal "gezeichnet")

    Welche Zahlen sind zwischen 5 und 8?

    [ ] Zahl 3
    [ ] Zahl 9
    [x] Zahl 6
    [ ] Zahl 10
    [x] Zahl 7

    Als Code hab ich dann ja das hier

    VB.NET-Quellcode

    1. CheckBox1.text = "Zahl 3"
    2. CheckBox2.text = "Zahl 9"
    3. CheckBox3.text = "Zahl 6"
    4. CheckBox4.text = "Zahl 10"
    5. CheckBox5.text = "Zahl 7"
    6. If CheckBox3.checked = true and CheckBox5.checked = true then
    7. MsgBox("Richtig", MsgBoxStyle.Information)
    8. else
    9. MsgBox("Falche Antowrt oder nichts angekreuzt.", MsgBoxStyle.Information)
    10. end if


    Als nächstes hätte ich (mit meinem halbwissen) einfach eine neue Form geladen und dann die nächste Frage rein geschrieben - unfassbarer Blödsinn, weiß ich.
    Vor allem wenn da immer mehr Sachen dazu kommen dann werd ich nicht mehr fertig. Für jede Frage eine neue Form erstellen - glaube das wäre utopisch
    Mir kam natürlich die Idee das genauso zu machen wie mit den Bildern, ob ich jetz eine PictureBox mit Bild befülle oder das einfach weglasse und stattdesen ein Label nehme ist ja egal.
    Jetzt kommt das große ABER und die Fragen:
    Wie mach ich dem "Programm" klar, dass zwei oder mehr antworten richtig sein können?
    Kann ich nach Anzahl X Fehlversuchen die richtigen Antworten irgendwie hervorheben?
    Wie switche ich jetzt auf die nächste Frage wenn Frage 1 richtig beantwortet wurde?
    Ja, ich weiß, ich könnte alles in Word schreiben, ausdrucken und dann ankreuzen lassen aber es heißt ja -> digitale Zukunft :)

    Mein Wunschdenken wäre, dass ich pro Frage eine Datei erstelle (oder am besten nur eine Datei für alle Fragen - dann kann ich nämlich Problemlos neue Fragen hinzufügen ohne jedes mal "coden" zu müssen.) in der dann sowas steht:

    Welche Zahl ist zwischen 5 und 8?
    #Zahl 3#Zahl 9#Zahl 6#Zahl 10#Zahl 7#3#5

    Wobei das blaue die CheckBoxen definiert, die "#" als seperator gelten und das rote die jeweiligen Antworten (Also nicht die "Zahl" als solches, sondern die Werte, die zwischend en Seperatoren liegen) definieren.

    Danach sage ich meinem "Programm":
    "HEy Label1, lade mir aus Datei Frage1.xyz alles vor meinem ersten Seperator und zeig es als Text"
    "Hey Checkbox1, lade mir aus Datei Frage1.xyz alles das, was zwischen dem ersten und zweiten Seperator steht als Text und zeig es an". und das mit allen anderen Checkboxen eben auch, nur aufsteigend
    Und weiter muss ich ja dann alles an Button1 übergeben
    "Hey Button1, die richtigen Antworten sind hinter den letzten Seperatoren, wenn Checkbox3 und Checkbox5 angekreuzt wurden und du geklickt wirst, dann lade die nächste Datei. Ansonsten markiere es als falsch"
    so wäre mein Gedanke. An der Umsetzung scheiterts.

    Was mich zum nächsten Problem bringt:
    Was tun, wenn es mehr als zwei Antworten gibt oder weniger als zwei?
    Was tun, wenn es mehr als 5 Checkboxen gibt? (Ich mein, es is nicht schlimm wenn einfach 2 Checkboxen ohne Text da stehen, sollte ja irgendwie möglich sein mit

    VB.NET-Quellcode

    1. if CheckBox1.Text = "" then CheckBox1.visible = false
    2. if CheckBox2.Text = "" then CheckBox2.visible = false
    3. if CheckBox3.Text = "" then CheckBox3.visible = false
    4. if CheckBox4.Text = "" then CheckBox4.visible = false
    5. if CheckBox5.Text = "" then CheckBox5.visible = false
    6. if CheckBox6.Text = "" then CheckBox6.visible = false
    7. if CheckBox7.Text = "" then CheckBox7.visible = false


    dieses Problem zu lösen.. Ich sitz hier seit gut 8 Stunden und zerbrech mir die Birne, das gequängel nebenher macht die Geschichte nicht einfacher :D
    Bin für jeden Denkanstoß echt mehr als dankbar.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „0ptix“ ()

    Das geht dann am besten, indem Du das mit dynamischer CE-Erstellung beschäftigst. Bedeutet: Erstellung von CheckBoxen zur Laufzeit. Das ist natürlich ein wenig fortgeschritten, aber Du wolltest es ja so :P
    Du hast auf Deinem Form erstmal gar keine RadioButtons/CheckBoxen, sondern nimmst ein FlowLayoutPanel (FLP) (zu finden bei ToolBox -> Container). Dann sagst Du im Code: "Schau in der Datei, wieviele Antworten es gibt, erstelle dann für jede Antwort eine neue CheckBox und füge diese CheckBox dem FLP hinzu. Und jede CheckBox, die als Antwort angewählt werden muss, erhält als Tag-Property ein X." Sobald man dann auf den Antwortbutton klickt, soll das Programm alle CheckBoxen des FlowLayoutPanels durchgehen und schauen, ob alle CheckBoxen, die als Tag-Property das X haben gecheckt sind und alle anderen nicht. Nach 5 (?) Versuchen könntest Du ggf. Tipps geben oder die Lösung anzeigen. Danach auf jeden fall wieder alle CheckBoxen aus dem FLP entfernen und weiter zur nächsten Frage.
    Ich hätte eh nur eine Datei für alle Fragen gewählt. Und das mit den Separatoren würde ich so machen: Pro Fragenteil eine neue Zeile. Und wenn dann eine neue Frage beginnt, kann man das immer noch mit einer Leerzeile "markieren".
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    0ptix schrieb:

    Also wie z.b.
    ist doch im ersten Teil vollständig abgearbeitet worden.
    Was Dir da als zweiten Teil vorschwebt - mach mal ne allgemeine ultrapräzise Beschreibung mit zwei disjunkten konkreten Beispielen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich habe dir was programmiert. :thumbup:
    Eine Form mit 4 Checkboxen. - Für ein kleines Quiz!
    Besonderheit: mehrere Antworten.
    Und Fehler/Richtige werden berechnet.
    Freue mich auf Feedback.
    Viel Spaß!

    BeispielQuiz_mehre_Antworten.zip

    Visual Basic.NET 8o
    MS-SQL
    8o
    *Vollzitat entfernt*

    Die Frage ist zwar nicht an mich gerichtet aber ich möchte es trotzdem beantworten.
    Also ich muss sagen dass mich das unfassbar weiter gebracht hat. Ich hab quasi alle funktionen und verschiedenen Dinge gegoogelt und dann den Sinn dahinter kapiert.
    Auch wie das alles aufgebaut wurde und warum weshalb wieso. Ich findde das so wirklich super.
    Und ich hab das ja nicht 1:1 übernommen, ich passe das natürlich an, bzw. "schreib es ab" um eben genau den Lerneffekt erzielen zu können. :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    @xChRoNiKx
    Ich dachte ich kann den User so helfen. ^^
    Es ist ja auch nur ein Beispielcode.
    Das man einfach einen kleinen Überblick bekommt.
    Wie man so was lösen kann.
    Da es ja so viele verschiedene Lösungswege gibt.
    Visual Basic.NET 8o
    MS-SQL
    8o
    Was viele hier gerne ausser acht lassen bzw. evtl. gar nicht bewusst wahrnehmen, ist das nun einmal jeder unterschiedlich lernt, ich kann jetzt z.B. nur von mir ausgehen, aber wenn ich ein fertiges und funktionstüchtiges stück Code habe, kann ich versuchen die einzelnen Teile des Codes nachzuvollziehen, und dann an meine Bedürfnisse anzupassen, dabei lerne ich es dann, und so geht es sicherlich vielen. Auf der anderen Seite hast du natürlich auch recht, ein großer Teil an neulingen nimmt dann schlicht hin das der Code funktioniert, und diese personen interessiert dann auch nicht weshalb. Ist einfach ein zweischneidiges Schwert ^^

    LG
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Hier mal, wie ich es dachte. Vielleicht n bisken Overkill, aber hoffentlich verständlich.
    Da ist einiges an LINQ dabei, ein m.E. wichtiges Thema.
    Die Prozedur FitFormToContent ist nicht gerade so, wie ich es wollte (nämlich dass man komplett ohne auskommt), aber für den Anfang reicht's.
    Den Fragekatalog hätte man dateitechnisch auch mit z.B. XML machen können, aber das manuelle Erweitern ist dann aufwendiger. Eine tDS-Variante ist von meiner Seite nicht in Planung. Man braucht es ja nicht überall.

    Eigenschaften:
    • alle Textdaten in einer Datei, Bilder müssen aber weiterhin in extra Dateien.
    • einfaches Hinzufügen weiterer Antworten und Fragen
    • automatische Anpassung des Formulars an die Frage
    • Durchmischen der Fragen Antworten, damit sich kein so schneller Gewöhnungseffekt ergibt
    • Datenprüfung (Gibt es überhaupt Fragen? Ist das angegebenes Bild zu einer Frage auch vorhanden? Gibt es leere Antworten? Gibt es überhaupt Antworten, die als »korrekt« hinterlegt sind?)
    btw: Das Deutschlandbild ist selber gemalt => keine Copyright-Probleme
    Dateien
    • Bilderrätsel.zip

      (27,71 kB, 84 mal heruntergeladen, zuletzt: )
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Ich hab mir die Codes nicht angesehen, aber schwieriger werdende Fragen im Ablauf wären doch auch was. Also wie bei "Wer wird Millionär". Wer es bis zur 10. oder 15. frage schafft, gewinnt dann ein Ü-Ei oder eine andere Kleinigkeit.
    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin
    Öhm. Ja, Na das ist aber ein Quiz für ein kleines Kind ...
    Ah, hab den Verständnisfehler gefunden. Bei mir ging es nicht um Durchmischung der Fragen, sondern der Antwortreihenfolge.

    Zum Code von @Cheffboss:
    • ungarische Notation ... nuja, etwas anachronistisch bei Variablen, aber sei's drum.
    • Try-Catch, wenn man den ListBox-Index erhöht? N bisken Overkill, oder? Da geht doch auch eine einfache If-Abfrage.
    • CE-Benennung ...
    • String.Format -> interpolierte Strings. So wird aus String.Format("Falsche:{0}", intFalsche) ein $"Falsche:{intFalsche}") Geht ja auch mit Framework 4.6
    • Char.Parse("#") -> "#"c
    • und die Auswertung der Antworten ist etwas vereinfachbar:

    VB.NET-Quellcode

    1. If Me.CheckBox1.Checked Then
    2. strDeineLösung2 &= "True|"
    3. Else
    4. strDeineLösung2 &= "False|"
    5. End If

    ->

    VB.NET-Quellcode

    1. strDeineLösung2 &= Me.CheckBox1.Checked.ToString & "|"

    Allerdings sollte man da saubererweise mit nem StringBuilder arbeiten, weil ein String an sich immutable ist. Aber das ist nebensächlich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed
    Danke, für deine hilfreichen Tipps zu meinem Code. :)

    VB.NET-Quellcode

    1. strDeineLösung2 &= Me.CheckBox1.Checked.ToString & "|"

    Die Vorgehensweise ist sehr einfach und simpel.
    Da war ich wohl etwas komplizierter.
    Visual Basic.NET 8o
    MS-SQL
    8o
    Ja also das klappt alles echt super Leute, die neuen Ideen und VOrschläge werd eich mir heute gleich mal ansehen :)
    Hier jedenfalls stößt das total auf Begeisterung, nachdem die Reihenfolge der fragen meist gleich bleibt fängt sie jetzt schon an zu bescheißen, aber seis drum, kinder eben :)
    Nochmal 1000 tank euch allen, ich bin echt froh dass ihr mir so super geholfen habt.