Quiz mit Schleife

KaYon

Mitglied
Sehr geehrte Forenmitglieder.

ich bin gerade dabei ein kleines Quiz zu programmieren, stehe aber gerade vor folgendem Problem:

Das Programm startet und ich bekomme ein Fenster mit 4 Buttons. Beim drücken des Buttons soll bei falscher Antwort der Button rot und der richtige Grün werden. Das funktioniert soweit. Jetzt habe ich das in eine Schleife gepackt und möchte das die Frage x mal wiederholt wird, leider macht Sie das nicht, das Feld und die Buttons bleiben einfach aktiviert und ich kann die Buttons nicht erneut auswählen. Natürlich möchte ich nicht 5x die gleiche frage haben, im späteren verlauf möchte ich das durch Zufall immer eine andere Frage aus einer Exeltabelle ausgelesen wird. Aber zuerst möchte ich dass das Programm z.B 5 mal die Schleife durchläuft also sprich ich 5 mal die gleiche Frage erneut beantworten kann und danach das Programm sich einfach beendet.

Hier ist der Quellcode:
Java:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Quiz_Fenster extends JFrame implements ActionListener {
 Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
 JLabel frage;
 JButton ant[] = new JButton[4];
 JPanel panel;
 JFrame w1;
 boolean fragebeantwortet, schleife;
 public static void main(String[] args) {
  new Quiz_Fenster();
 }
 public Quiz_Fenster() {
  panel = new JPanel();
  w1 = new JFrame();
  w1.setSize(400, 400);
  w1.setLocation((int)(dim.getWidth() - 700) / 2, (int)(dim.getHeight() - 1500 / 2));
  w1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  w1.setVisible(true);
  w1.setLayout(null);
  frage = new JLabel("Was ist die Hauptstadt von Deutschland");
  frage.setBounds(52, 15, 250, 40);
  w1.add(frage);
  ant[0] = new JButton(" Stuttgart ");
  ant[0].setBounds(52, 90, 120, 40);
  w1.add(ant[0]);
  ant[1] = new JButton(" München ");
  ant[1].setBounds(52, 160, 120, 40);
  w1.add(ant[1]);
  ant[2] = new JButton(" Berlin");
  ant[2].setBounds(220, 90, 120, 40);
  w1.add(ant[2]);
  ant[3] = new JButton(" Bonn ");
  ant[3].setBounds(220, 160, 120, 40);
  w1.add(ant[3]);
  frage = new JLabel();
  ant[0].addActionListener(this);
  ant[1].addActionListener(this);
  ant[2].addActionListener(this);
  ant[3].addActionListener(this);
 }
 public void actionPerformed(ActionEvent ae) {
  for (int durchlauf = 0; durchlauf < 5; durchlauf++) {
   if (ae.getSource() == this.ant[0]) {
    if ((!(fragebeantwortet))) {
     ant[0].setBackground(new Color(255, 0, 0));
     ant[2].setBackground(new Color(0, 255, 0));
     fragebeantwortet = true;
    }
   } else if (ae.getSource() == this.ant[1]) {
    if ((!(fragebeantwortet))) {
     ant[1].setBackground(new Color(255, 0, 0));
     ant[2].setBackground(new Color(0, 255, 0));
     fragebeantwortet = true;
    }
   } else if (ae.getSource() == this.ant[2]) {
    if ((!(fragebeantwortet))) {
     ant[2].setBackground(new Color(0, 255, 0));
     fragebeantwortet = true;
    }
   } else if (ae.getSource() == this.ant[3]) {
    if ((!(fragebeantwortet))) {
     ant[3].setBackground(new Color(255, 0, 0));
     ant[2].setBackground(new Color(0, 255, 0));
     fragebeantwortet = true;
    }
   }
  }
 }
Wäre schön wenn mir jemand weiterhelfen könnte :/
 
Zuletzt bearbeitet von einem Moderator:

Java20134

Bekanntes Mitglied
Ich würde Dir vorschlagen eine Datenbank oder einfache Textdatei mit allen möglichen Fragen zu erstellen und anschließend wählst du bei richtiger Antwort eine neue pseudozufällige Frage mit vier Antworten aus! Dabei musst du beachten, dass die richtige Antwort auch in der Datenbank angegeben werden muss, bspw. als Ziffer, damit man die vom Benutzer eingegebene Auswahl überprüfen kann.
 

Jardcore

Top Contributor
Erstell dir ein Objekt "Frage" und ein Objekt "Antwort":
Java:
public class Frage {
    private String text;
    private List<Antwort> antworten;

    // getter / setter
}
Java:
public class Antwort {
    private String text;
    private boolean richtig;

    // getter / setter
}

Eine Frage hat dabei eine Sammlung von Antworten, die Antwort weiß immer ob sie Richtig ist oder nicht.
Wenn du nun eine Frage stellst, kannst du die Antwort, die der Spieler gegeben hat mit den möglichen Antworten der Frage vergleichen. Wenn die Texte übereinstimmen prüfst du weiterhin ob das auch die richtige Antwort war.

Dann erstellst du dir wie von Java20134 erwähnt eine Text Datei oder eine Datenbank.
Folgendes Beispiel ist in JSON:
Code:
{
    "fragen": [{
        "text": "Was ist die Antwort auf die Frage nach dem Leben, dem Universum und dem ganzen Rest",
        "antworten": [
         { "text": "Pizza", "richtig": false },
         { "text": "Glück", "richtig": false },
         { "text": "Geld", "richtig": false },
         { "text": "42", "richtig": true }
        ]
    }, {
        "text": "1+1=?",
        "antworten": [
         { "text": "1", "richtig": true },
         { "text": "2", "richtig": false },
         { "text": "34", "richtig": false },
         { "text": "42", "richtig": false }
        ]
    }]
}

Im Pseudocode ist grundlegend dann folgendes zutun -->
Code:
ladeFragenAusDateiUndLegeSieInDieFragenbox();

while(IstFragenboxLeer) {
    holeFrageAusFragenbox();
    stelleFrage();
    warteAufAntwort();
    pruefeAntwort();
    vergebePunkte();
}

Ich hoffe ich konnte ein wenig Hilfestellung leisten. :)

Wie mache ich das am besten, kenne mich in Java noch nicht so gut aus :/
Kennst du dich in anderen Sprache aus?
 

Java20134

Bekanntes Mitglied
Du erstellst eine Textdatei mit einem beliebigem Namen. Anschließend schreibst du deine Fragen in die Datei im folgendem Format: Frage: Antwort1, Antwort2, Antwort3, Antwort4, richtigeAntwort.
Nun kannst du mit dem BufferedReader jede Zeile einzeln herauslesen und bspw. einer Klasse Datenbank zuzuordnen. Du ordnest der Datenbank dann bspw. ein Objekt vom Typ Question hinzu und diese Klasse enthält die Frage und die Antworten mit der richtigen Antwort. Die Klasse Datenbank enthält nun eine Liste mit allen Fragen und es gibt eine Methode, wo eine pseudozufällige Question zurückgegeben werden kann.
Java:
public class Question {
     private String question;
     private String[] answers;
     private int correctAnswer;

     //setter und getter Methoden
}

public class DataBank {
     private ArrayList<Question> questions;
     //oder JavaFX
     private ObservableList<Question> questions;

     public void addQuestion(Question q){
          questions.add(q);
     }

     public Question getRandomQuestion(){
          int random = Math.random()*questions.size();
          return question.get(random);
     }
}
 
Zuletzt bearbeitet:

KaYon

Mitglied
Vielen Dank für eure Antworten, ich werde das gleich mal ausprobieren.

Eine Frage noch: Kann ich dir von euch vorgeschlagenen Antworten auf mein Programm übertragen oder soll ich ein neues Programm schreiben ?
 

KaYon

Mitglied
Habe das nun ausprobiert aber leider funktioniert es nicht, liegt wahrscheinlich daran, dass ich nicht genau weiß wo und wie ich das in mein ursprüngliches Programm reinschreiben soll.
 

KaYon

Mitglied
Poste doch einmal deinen bisherigen Code!

Java:
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Quiz_Fenster extends JFrame implements ActionListener {
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
JLabel frage;
JButton ant[] = new JButton[4];
JPanel panel;
JFrame w1;
boolean fragebeantwortet, schleife;
public static void main(String[] args) {
  new Quiz_Fenster();
}
public Quiz_Fenster() {
  panel = new JPanel();
  w1 = new JFrame();
  w1.setSize(400, 400);
  w1.setLocation((int)(dim.getWidth() - 700) / 2, (int)(dim.getHeight() - 1500 / 2));
  w1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  w1.setVisible(true);
  w1.setLayout(null);
  frage = new JLabel("Was ist die Hauptstadt von Deutschland");
  frage.setBounds(52, 15, 250, 40);
  w1.add(frage);
  ant[0] = new JButton(" Stuttgart ");
  ant[0].setBounds(52, 90, 120, 40);
  w1.add(ant[0]);
  ant[1] = new JButton(" München ");
  ant[1].setBounds(52, 160, 120, 40);
  w1.add(ant[1]);
  ant[2] = new JButton(" Berlin");
  ant[2].setBounds(220, 90, 120, 40);
  w1.add(ant[2]);
  ant[3] = new JButton(" Bonn ");
  ant[3].setBounds(220, 160, 120, 40);
  w1.add(ant[3]);
  frage = new JLabel();
  ant[0].addActionListener(this);
  ant[1].addActionListener(this);
  ant[2].addActionListener(this);
  ant[3].addActionListener(this);
}
public void actionPerformed(ActionEvent ae) {
  for (int durchlauf = 0; durchlauf < 5; durchlauf++) {
   if (ae.getSource() == this.ant[0]) {
    if ((!(fragebeantwortet))) {
     ant[0].setBackground(new Color(255, 0, 0));
     ant[2].setBackground(new Color(0, 255, 0));
     fragebeantwortet = true;
    }
   } else if (ae.getSource() == this.ant[1]) {
    if ((!(fragebeantwortet))) {
     ant[1].setBackground(new Color(255, 0, 0));
     ant[2].setBackground(new Color(0, 255, 0));
     fragebeantwortet = true;
    }
   } else if (ae.getSource() == this.ant[2]) {
    if ((!(fragebeantwortet))) {
     ant[2].setBackground(new Color(0, 255, 0));
     fragebeantwortet = true;
    }
   } else if (ae.getSource() == this.ant[3]) {
    if ((!(fragebeantwortet))) {
     ant[3].setBackground(new Color(255, 0, 0));
     ant[2].setBackground(new Color(0, 255, 0));
     fragebeantwortet = true;
    }
   }
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
M Logik für ein Quiz Spiele- und Multimedia-Programmierung 7
H Quiz als Studienarbeit Spiele- und Multimedia-Programmierung 22
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
P Quiz-Programm Spiele- und Multimedia-Programmierung 4
S Ratespiel (Quiz) - Falsche Antwort -> Wiederholung Spiele- und Multimedia-Programmierung 6
W Quiz mit Videos erstellen Spiele- und Multimedia-Programmierung 4
A While schleife "or" probelm Spiele- und Multimedia-Programmierung 2
D JFrames in For Schleife öffnen lassen Spiele- und Multimedia-Programmierung 2
A while Schleife - illegal start of type. Spiele- und Multimedia-Programmierung 4
D Textfield im Game ,Problem: while-Schleife Spiele- und Multimedia-Programmierung 3
J In einer While-Schleife auf Event warten Spiele- und Multimedia-Programmierung 3
P Fehlermeldung bei If-Schleife Spiele- und Multimedia-Programmierung 4
J LWJGL Update Schleife (Snake) Spiele- und Multimedia-Programmierung 6
F Schleife warten lassen Spiele- und Multimedia-Programmierung 8
H Kreis zeichnen mittels Schleife & drawLine Spiele- und Multimedia-Programmierung 4
G Warten auf Button-Aktion in Schleife? Spiele- und Multimedia-Programmierung 7

Ähnliche Java Themen

Neue Themen


Oben