# Java Quiz mit Gui



## savagedog (7. Jul 2011)

Hallo Community,

ein kleines Projekt, dass viele Fragen aufwirft hat mich zu ins Forum gebracht :-D

Ich möchte gern mit Java in Netbeans eine Art Familienduell programmieren.

Ich habe leider nicht viel Erfahrung in Java doch möchte das ändern. Ich hab mir paar Gedanken gemacht und würde mich freuen wenn ihr mir paar Denkanstöße gebt.

Das Spiel soll folgendermaßen aufgebaut werden:

- Es soll ein Einzelspieler Programm werden, dass gegen einen Computergegener spielt. 
- Ein Button der vom Spieler innerhalb von paar Sec. gedrückt werden soll da sonst Computer zum beantworten dran kommt. 
- Ein Eingabefeld indem man die Antwort eingibt
- Ein WAV inpementierung die die Fragen aufsagt (und durch Betätigung des Buttons unterbrochen wird) )VIELLEICHT^^
- Ein Fenster, dass so aufgebaut ist wie der Monitor in der Orginalsendung. 
- Mehrere Fragen und Antwortmöglichkeiten die von der Wertigkeit gestaffelt sind.

so nun zu meiner Überlegung

Zu den Fragen: 

Ich hab an ein Array gedacht, indem die Fragen, die richtigen Antworten sowie paar Falschen Antworten für den Computer die per Random ausgewählt werden, sowie der Punktezahl.

Eine If Funktion für die Eingabe des Spielers, die bei richtiger Antwort eine Zeile auf dem Monitor ausgibt mit Punkte sowie ein X (mit geräusch) für die Falsche. 

Ich hoffe ihr könnt mir noch paar denkanstöße wie es am besten zu realisieren wäre geben. 

MFG


----------



## Gast2 (7. Jul 2011)

Wo sind die Fragezeichen bei den Fragen? 



> Ich hab an ein Array gedacht, indem die Fragen, die richtigen Antworten sowie paar Falschen Antworten für den Computer die per Random ausgewählt werden, sowie der Punktezahl.


Nein, kapsel das in Objekte (Frage, Antwort, ...).


----------



## savagedog (10. Jul 2011)

Was hat das für vorteile?


----------



## Gast2 (10. Jul 2011)

savagedog hat gesagt.:


> Was hat das für vorteile?



Hm OOP... hab ich schon mal gehört. 

Ne also im Ernst les erst mal ein Buch über Objektorientiertes Programmieren bevor du eine grafische Java Anwendung schreiben willst. Kostenlos gibts legal bei Galileo Open Books.


----------



## savagedog (15. Jul 2011)

kappesf hat gesagt.:


> Hm OOP... hab ich schon mal gehört.
> 
> Ne also im Ernst les erst mal ein Buch über Objektorientiertes Programmieren bevor du eine grafische Java Anwendung schreiben willst. Kostenlos gibts legal bei Galileo Open Books.



foren sind für diskussionen da. Ein verweis auf BÜcher ist nicht im sinne des Erfinders... Bin im ersten Semester Java und hab sogar schon das eine oder andere gehört. Doch möchte ich zusammen mit anderen Leuten auf die Lösung "meines" problemes kommen. Denn das ist meines Erachtens Sinn eines Forums. Wenn keiner meine Meinung teil, hab ich pech gehabt und muss Bücher welzen.


----------



## bERt0r (15. Jul 2011)

Sry aber ein Semester java wird da nicht reichen. Du wirst erstmal grundlegendes Wissen über Java benötigen:
Umgang mit Collections
Umgang mit File-I/O bzw. Datenbanken
Grundzüge des Objektorientierten Programmierens (ich habe noch nie von einer if-Funktion gehört)
Java Swing und AWT Events
und wahrscheinlich auch noch Threads

Bevor du diese Begriffe nicht nur gehört hast, sonder ganz genau weisst was das ist und wie du mit sowas umgehst - sprich programmierst (ich rede von praktischer Erfahrung damit) ist es ziemlicher Unsinn dich an so ein Projekt zu wagen. Selbst wenn du schon Programmiererfahrung in anderen Sprachen hast, wirst du um das lernen der ganzen Java Konventionen und Design Patterns nicht umhin kommen.
Mach lieber was einfacheres, geh das Buch das dir empfohlen wurde durch, da wirst du weiter kommen.


----------



## Aldimann (15. Jul 2011)

Naja nun...

Ich hab es auch nach einem halben Jahr in Java mit SWT geschafft TicTacToe und anschließend Schiffeversenken zu Programmieren.

@ savagedog:
Es ist durchaus Sinn eines Forum über Probleme zu Diskutieren, allerdings muss das Rad ja nicht immer neu Erfunden werden . 

Galileo Computing :: Java ist auch eine Insel – 3 Klassen und Objekte
Lies dir hier mal den OOP-Teil durch. Es wird dir helfen dein Projekt besser zu Strukturieren und die Code Wiederverwendbarkeit erhöhen, wenn du Objektorientierung verstanden hast.

Als persönlichen Rat würde ich dir mitgeben den Computer als Gegenpart erstmal weg zu lassen. Probier für den Anfang mal ein Spiel Mensch vs. Mensch...
Warum?
Ein Computergegner zu Programmieren, der nicht alles sofort weiß, aber sich auch nicht dumm anstellt ist z.T. äußerst schwierig.

Viele Grüße


----------



## Asgar13 (15. Jul 2011)

> - Ein Fenster, dass so aufgebaut ist wie der Monitor in der Orginalsendung.



Wie sieht den der Bildschirm aus?


----------



## Gast2 (15. Jul 2011)

savagedog hat gesagt.:


> foren sind für diskussionen da. Ein verweis auf BÜcher ist nicht im sinne des Erfinders... Bin im ersten Semester Java und hab sogar schon das eine oder andere gehört. Doch möchte ich zusammen mit anderen Leuten auf die Lösung "meines" problemes kommen. Denn das ist meines Erachtens Sinn eines Forums. Wenn keiner meine Meinung teil, hab ich pech gehabt und muss Bücher welzen.



Wenn man jedoch fragt "Was bringt ein Objekt" ist man imho im Java Forum falsch aufgehoben. Zumindest was das Fragenstellen nach so einen Projekt wie tu es tust angeht. 

Der Buchtipp war gut gemeint, da du diese Kenntnisse benötigst. Sonst verstehst du ja keine der Antworten. Und das bringt dir noch weniger. 

Sehr empfehlenswert ist auch Java von Kopf bis Fuß. Das denk ich wäre für dich Ideal. 

Da du ja anscheinend Informatik studierst (oder etwas ähnliches) sollte es ja auch drin sein 50€ für ein (wirklich exzellentes) Buch auszugeben. 

Wie gesagt OOP Buch/Bücher sind auch Pflichtlektüre. Hier im Forum gibts auch einen Extra Bereich für Buch und Tutorial Tipps. Schau auch da mal rein.

Wenn du die Grundlagen dann beherschst kannst du ja nochmal nach dem Familienquiz fragen. Zum jetzigen Zeitpunkt machts einfach keinen Sinn. Man übersetzt ja auch kein Buch weil man schon die ersten 20 Vokablen gelernt hat.


----------



## I-Doetzken (16. Jul 2011)

mir hat "don't fear the oop" sehr geholfen

Java Tutorial: Don't Fear the Oop!

und lustig ist es auch

beste grüße


----------



## savagedog (18. Jul 2011)

kappesf hat gesagt.:


> Wenn man jedoch fragt "Was bringt ein Objekt" ist man imho im Java Forum falsch aufgehoben. Zumindest was das Fragenstellen nach so einen Projekt wie tu es tust angeht.



Vielen Dank für die Empfehlung in Sachen BÜcher, sowie Tutorials, da werd ich wohl nohc ein bischen rumstöbern. Die Frage war der Vorteil es zu in einzelne Klassen zu kapseln (Fragen, Antworten, Punkte) anstelle von Arrays, net was ein Objekt ist :-D aber egal, ich studiere Multimedia und da ist java nur ein kleiner Teil, den ich höhstwahrscheinlich nicht weiter belegen werden möchte. dennoch muss dieses Semster noch ein kleines App gemacht werden.... auch wenn es m.M.n mit dem Wissen was vermittelt wurde ein solch ein Projetk zu verwirklichen.. deswegen bin auch hier gelandet. Ich les mich ein bischen tiefer ein..

@ Asgar13: Schwarzer Bildshirmt mit Gelber Schrift. Ziemlich Simpel...

@ I-Doetzken, Ja die seite ist Cool

@Aldimann: Da hast recht, gedacht hab ich mir das anstelle der 5 Richtigen antworten der computer per random aus 20 möglichen antworten aussucht, und somit die chance eine der richtigen Antwort zu bekommen 1:4 wäre. Aber ich glaub das ist schon wirkich etwas anspruchsvoll


----------



## Gast2 (18. Jul 2011)

savagedog hat gesagt.:


> ..., ich studiere Multimedia und da ist java nur ein kleiner Teil, den ich höhstwahrscheinlich nicht weiter belegen werden möchte. dennoch muss dieses Semster noch ein kleines App gemacht werden.... auch wenn es m.M.n mit dem Wissen was vermittelt wurde ein solch ein Projetk zu verwirklichen.. deswegen bin auch hier gelandet...



Das ist dann schon was ganz anderes. imho finde ich die Aufgabe auch etwas derb für (1?) Semester Java. 

Les dich mal ein bisschen ein und wenn du dann konkrete Fragen hast poste einfach wieder hier. 

Dir wird natürlich schon geholfen, du musst nur zeigen, dass du auch an der Lösung mitarbeitest.


----------



## I-Doetzken (19. Jul 2011)

ich habe vor geraumer zeit mal ein quiz angefangen, es ist nicht fertig, aber schon spielbar.
das projekt ist dann aber eingeschlafen,

ich vermute, der code ist nicht wirklich elegant, aber es dürfte reichen, um dir ein paar ideen zu geben.


----------



## savagedog (27. Jul 2011)

Hallo, hab ein Applet so einigermaßen hinbekommen. Nun hab ich gemerkt das ich grafisch nicht viel machen kann (bzw. ich nicht). gebe es eine Mögichkeit das ganze in ein J Applet Form (netbeans) zu machen, dass man per Drag and Drop die Buttons verschieben kann usw.? Hier mal das Programm. 

```
import java.applet.*;
import java.awt.*;


public class Gui extends Applet {

    private TextField antwortFeld = new TextField("", 10);
    private Label familienDuellLabel = new Label("Familien Duell");
    private Label benutzerPunkteLabel = new Label("0");
    private Label frageLabel;
    private Label skynetPunkteLabel = new Label("0");
    private Label skynetGewinnerLabel = new Label("Skynet hat dir den ***** versolt...");
    private Label benutzerGewinnerLabel = new Label("Benutzer hat gewonnen....");
    private Label benutzerFalscheAntwortZaehlerLabel = new Label("0");
    private Label skynetFalscheAntwortZaehlerLabel = new Label("0");
    private Button startButton = new Button("Start");
    private Button neuesSpielButton = new Button("Neues Spiel");
    private Button antwortButton = new Button("Antworten");
    private FragenUndAntworten fragenUAntworten;
    private Integer anzahlAntwortZurFrage;
    private int frageIndex;
    private String antwort;
    private int falscheAntwortZaehler = 0;
    private int benutzerPunkte = 0;
    private int skynetPunkte = 0;
   

    public void init() {

        add(familienDuellLabel);
        add(startButton);
    }

    public boolean action(Event ev, Object arg) {
        if (ev.target == startButton) {
       
            initGUI();
        } else if (ev.target == neuesSpielButton) {
            neuesSpiel();
        } else if (ev.target == antwortButton) {
            antwort = antwortFeld.getText();
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (antwort == null || antwort.equals("")) {
                falscheAntwortZaehler++;
                System.out.println("Falsche Antwort");
                if (falscheAntwortZaehler == 3) {
                    System.out.println("Skynet übernimmt das Kommando");
                    benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
                    skynet();
                }
                benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
            } else {
                anzahlAntwortZurFrage = fragenUAntworten.antworten.get(frageIndex).get(antwortFeld.getText());
                if (anzahlAntwortZurFrage != null && anzahlAntwortZurFrage != 0) {
                    benutzerPunkte += anzahlAntwortZurFrage;
                    if (benutzerPunkte > 50) {
                        System.out.println("Sie haben gewonnen");
                        antwortFeld.setVisible(false);
                        antwortButton.setVisible(false);
                        add(benutzerGewinnerLabel);
                        add(neuesSpielButton);
                    }

                    benutzerPunkteLabel.setText(((Integer) benutzerPunkte).toString());
                    fragenUAntworten.antworten.get(frageIndex).remove(antwortFeld.getText());

                    Object[] wrongAnswerKeys = fragenUAntworten.antworten.get(frageIndex).keySet().toArray();
                    for (Object wrongAnswerKey : wrongAnswerKeys) {
                        if (fragenUAntworten.antworten.get(frageIndex).get(wrongAnswerKey) == 0) {
                            fragenUAntworten.antworten.get(frageIndex).remove(wrongAnswerKey);
                            break;
                        }

                    }

                    System.out.println("Richtige Antwort");
                } else {
                    falscheAntwortZaehler++;
                    System.out.println("Falsche Antwort");
                    if (falscheAntwortZaehler == 3) {
                        System.out.println("Skynet �bernimmt das Kommando");
                        benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
                        skynet();
                    }
                    benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());

                }
                antwortFeld.setText("");
            }
        }
        return false;
    }

    public void initGUI() {
        startButton.setVisible(false);
        familienDuellLabel.setVisible(false);
        fragenUAntworten = new FragenUndAntworten();
        frageLabel = new Label(fragenUAntworten.fragen.get(berechneFrageIndex()));
        add(frageLabel);
        add(antwortFeld);
        add(antwortButton);
        add(benutzerPunkteLabel);
        add(skynetPunkteLabel);
        add(benutzerFalscheAntwortZaehlerLabel);
        add(skynetFalscheAntwortZaehlerLabel);
     
    }

    public void neuesSpiel() {
        fragenUAntworten = new FragenUndAntworten();
        frageLabel.setText(fragenUAntworten.fragen.get(berechneFrageIndex()));
        antwortFeld.setVisible(true);
        antwortButton.setVisible(true);
        benutzerPunkteLabel.setText("0");
        remove(skynetGewinnerLabel);
        remove(benutzerGewinnerLabel);
        benutzerPunkte = 0;
        skynetPunkteLabel.setText("0");
        skynetPunkte = 0;
        benutzerFalscheAntwortZaehlerLabel.setText("0");
        falscheAntwortZaehler = 0;
        skynetFalscheAntwortZaehlerLabel.setText("0");
    }

    public int berechneFrageIndex() {
        Object[] frageKeys = fragenUAntworten.fragen.keySet().toArray();
        int randIndex = (int) ((Math.random() * 10) + (Math.random() * 10)) - 1;
        System.out.println(randIndex);
        frageIndex = (Integer) frageKeys[randIndex];
        return frageIndex;
    }

    public void skynet() {
        antwortFeld.setVisible(false);
        antwortButton.setVisible(false);
        falscheAntwortZaehler = 0;
        skynetFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
        while (falscheAntwortZaehler < 3 && skynetPunkte <= 50) {
            int antwortIndex = (int) (Math.random() * fragenUAntworten.antworten.get(frageIndex).keySet().size());
            if (antwortIndex == 0) {
                antwortIndex = (int) (Math.random() * fragenUAntworten.antworten.get(frageIndex).keySet().size()) + (int) (Math.random() * fragenUAntworten.antworten.get(frageIndex).keySet().size());
            }


            Object[] keys = fragenUAntworten.antworten.get(frageIndex).keySet().toArray();
            while (keys.length <= antwortIndex) {
                antwortIndex--;
            }

            System.out.println(keys[antwortIndex]);
            anzahlAntwortZurFrage = fragenUAntworten.antworten.get(frageIndex).get(keys[antwortIndex]);

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if (anzahlAntwortZurFrage != null && anzahlAntwortZurFrage != 0) {
                skynetPunkte += anzahlAntwortZurFrage;
                if (skynetPunkte >= 50) {
                    System.out.println("Skynet hat gewonnen");
                    add(skynetGewinnerLabel);
                    add(neuesSpielButton);
                }

                skynetPunkteLabel.setText(((Integer) skynetPunkte).toString());
                fragenUAntworten.antworten.get(frageIndex).remove(keys[antwortIndex]);

                Object[] wrongAnswerKeys = fragenUAntworten.antworten.get(frageIndex).keySet().toArray();
                for (Object wrongAnswerKey : wrongAnswerKeys) {
                    if (fragenUAntworten.antworten.get(frageIndex).get(wrongAnswerKey) == 0) {
                        fragenUAntworten.antworten.get(frageIndex).remove(wrongAnswerKey);
                        break;
                    }
                }

                System.out.println("Richtige Antwort");

            } else {
                falscheAntwortZaehler++;
                System.out.println("Falsche Antwort");
                if (falscheAntwortZaehler == 3) {
                    System.out.println("Benutzer �bernimmt das Kommando");
                    antwortFeld.setVisible(true);
                    antwortButton.setVisible(true);
                }
                skynetFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
            }
            antwortFeld.setText("");
        }
        falscheAntwortZaehler = 0;
    }
}
```

wirkt alles so richtig billig. Das Spiel selber passt mir schon, doch gestalterisch würd ich gern etwas schöner machen...
drum versuche ich es jetzt mit der swing variante und über event manger doch bin am verzweifeln da es irgendwie garnicht hinhaut.... 


```
public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                    antwortButton.setVisible(false);
                    antwortFeld.setVisible(false);
                    benutzerFalscheAntwortZaehlerLabel.setVisible(false);
                    benutzerGewinnerLabel.setVisible(false);
                    benutzerPunkteLabel.setVisible(false);
                    neuesSpiel.setVisible(false);
                    skynetFalscheAntwortZaehlerLabel.setVisible(false);
                    skynetGewinnerLabel.setVisible(false);
                    skynetPunkteLabel.setVisible(false);


                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public void initGUI() {
        startButton.setVisible(false);
        familienDuellLabel.setVisible(false);
        fragenUAntworten = new FragenUndAntworten();
       frageLabel = new javax.swing.JLabel(fragenUAntworten.fragen.get(berechneFrageIndex()));
        antwortButton.setVisible(false);
        antwortFeld.setVisible(true);
        benutzerFalscheAntwortZaehlerLabel.setVisible(true);
     
        benutzerPunkteLabel.setVisible(true);
        familienDuellLabel.setVisible(true);
        neuesSpiel.setVisible(true);
        skynetFalscheAntwortZaehlerLabel.setVisible(true);
        benutzerGewinnerLabel.setVisible(true);
        skynetPunkteLabel.setVisible(true);

    }
```
wie bekomm ich das programm schön wieder rein?


----------



## savagedog (27. Jul 2011)

Kann mir Jemand sagen warum er Keine Antwort als richtig ansieht bei Eingabe?


```
private void antwortButtonActionPerformed(java.awt.event.ActionEvent evt) {
   antwort = antwortFeld.getText();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
            if (antwort == null || antwort.equals("")) {
                falscheAntwortZaehler++;
                System.out.println("Falsche Antwort");
                if (falscheAntwortZaehler == 3) {
                    System.out.println("Skynet übernimmt das Kommando");
                    benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
                    skynet();
                }
                benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
            } else {
          fragenUAntworten.antworten.get(frageIndex).get(antwortFeld.getText());
                if (anzahlAntwortZurFrage != null && anzahlAntwortZurFrage != 0) {
                    benutzerPunkte += anzahlAntwortZurFrage;
                    if (benutzerPunkte > 50) {
                        System.out.println("Sie haben gewonnen");
                        antwortFeld.setVisible(false);
                        antwortButton.setVisible(false);
                        benutzerGewinnerLabel.setVisible(true);
                        
                    }

                    benutzerPunkteLabel.setText(((Integer) benutzerPunkte).toString());
                    fragenUAntworten.antworten.get(frageIndex).remove(antwortFeld.getText());

                    Object[] wrongAnswerKeys = fragenUAntworten.antworten.get(frageIndex).keySet().toArray();
                    for (Object wrongAnswerKey : wrongAnswerKeys) {
                        if (fragenUAntworten.antworten.get(frageIndex).get(wrongAnswerKey) == 0) {
                            fragenUAntworten.antworten.get(frageIndex).remove(wrongAnswerKey);
                            break;
                        }

                    }

                    System.out.println("Richtige Antwort");
                } else {
                    falscheAntwortZaehler++;
                    System.out.println("Falsche Antwort");


                    if (falscheAntwortZaehler == 3) {
                        System.out.println("Skynet übernimmt das Kommando");
                        benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
                        skynet();
                    }
                    benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());

                }
                antwortFeld.setText("");
          }





    }
```


----------



## Gast2 (27. Jul 2011)

Bau da mal nen paar sysouts rein


----------



## savagedog (27. Jul 2011)

EikeB hat gesagt.:


> Bau da mal nen paar sysouts rein



hab ich und er sagt immer die antwort ist falsch.... egal was ich eingeben. Beim Computer macht ers richtig

So ich habe es tatsächlich geschaft das spiel schön zu gestalten und zum laufen zu bringen :-D
hab nur noch kleine probleme.

ich möchte das erst ein label erscheint und dann gerechnet wird, das programm macht aber erst rechnen und dann das label anzeigen... also bei Zeile 38. public void skynet() {
       skySagt.setVisible(true);

außerdem würd ich gern eine hintergrundmusik einbauen... mit den tuts im inet hab ich das leider nicht hinbekommen. hier wäre ich auch dankbar über rat 


```
package skyduell;

/**
 *
 * @author 
 */
public class Gui extends javax.swing.JFrame {

    /** Creates new form Gui */
    public Gui() {
        initComponents();
         antwortFeld.setVisible(false);
                    benutzerFalscheAntwortZaehlerLabel.setVisible(false);
                    benutzerGewinnerLabel.setVisible(false);
                    benutzerPunkteLabel.setVisible(false);
                    neuesSpiel.setVisible(false);
                    skynetFalscheAntwortZaehlerLabel.setVisible(false);
                    skynetGewinnerLabel.setVisible(false);
                    skynetPunkteLabel.setVisible(false);
                    antwortButton.setVisible(false);
                    skySagt.setVisible(false);
                    jLabel1.setVisible(false);
                    jLabel2.setVisible(false);
                    jLabel3.setVisible(false);
                    jLabel4.setVisible(false);
                    jLabel5.setVisible(false);
                    jLabel6.setVisible(false);

    }
  public int berechneFrageIndex() {
        Object[] frageKeys = fragenUAntworten.fragen.keySet().toArray();
        int randIndex = (int) ((Math.random() * 10) + (Math.random() * 10)) - 1;
        System.out.println(randIndex);
        frageIndex = (Integer) frageKeys[randIndex];
        return frageIndex;
    }

     public void skynet() {
       skySagt.setVisible(true);
        falscheAntwortZaehler = 0;
        skynetFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
        while (falscheAntwortZaehler < 3 && skynetPunkte <= 50) {
            int antwortIndex = (int) (Math.random() * fragenUAntworten.antworten.get(frageIndex).keySet().size());
            if (antwortIndex == 0) {
                antwortIndex = (int) (Math.random() * fragenUAntworten.antworten.get(frageIndex).keySet().size()) + (int) (Math.random() * fragenUAntworten.antworten.get(frageIndex).keySet().size());
            }


            Object[] keys = fragenUAntworten.antworten.get(frageIndex).keySet().toArray();
            while (keys.length <= antwortIndex) {
                antwortIndex--;
            }

           System.out.println(keys[antwortIndex]);
            anzahlAntwortZurFrage = fragenUAntworten.antworten.get(frageIndex).get(keys[antwortIndex]);

            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if (anzahlAntwortZurFrage != null && anzahlAntwortZurFrage != 0) {
                skynetPunkte += anzahlAntwortZurFrage;
                if (skynetPunkte >= 50) {
                    System.out.println("Skynet hat gewonnen");
                    skynetGewinnerLabel.setVisible(true);
                    neuesSpiel.setVisible(true);
                }

                skynetPunkteLabel.setText(((Integer) skynetPunkte).toString());
                fragenUAntworten.antworten.get(frageIndex).remove(keys[antwortIndex]);

                Object[] wrongAnswerKeys = fragenUAntworten.antworten.get(frageIndex).keySet().toArray();
                for (Object wrongAnswerKey : wrongAnswerKeys) {
                    if (fragenUAntworten.antworten.get(frageIndex).get(wrongAnswerKey) == 0) {
                        fragenUAntworten.antworten.get(frageIndex).remove(wrongAnswerKey);
                        break;
                    }
                }

                System.out.println("Richtige Antwort");

            } else {
                falscheAntwortZaehler++;
                System.out.println("Falsche Antwort");
                if (falscheAntwortZaehler == 3) {
                    System.out.println("Benutzer übernimmt das Kommando");


                }
                skynetFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
            }
      antwortFeld.setText("");
        }
        falscheAntwortZaehler = 0;
    }
     public void benutzer() {

        if (antwort == null || antwort.equals("")) {
            falscheAntwortZaehler++;
            System.out.println("Falsche Antwort");
            if (falscheAntwortZaehler == 3) {
              //  System.out.println("Skynet übernimmt das Kommando");

                benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
                skynet();
                antwortFeld.setVisible(false);
            }
            benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
            System.out.println(antwortFeld);
        } else {
        anzahlAntwortZurFrage =  fragenUAntworten.antworten.get(frageIndex).get(antwortFeld.getText());
           if (anzahlAntwortZurFrage != null && anzahlAntwortZurFrage != 0)
          {
                benutzerPunkte += anzahlAntwortZurFrage;
                if (benutzerPunkte > 50) {
                    System.out.println("Sie haben gewonnen");
                      antwortFeld.setVisible(false);
                      antwortButton.setVisible(false);
                       benutzerGewinnerLabel.setVisible(true);
                       neuesSpiel.setVisible(true);

                }

                benutzerPunkteLabel.setText(((Integer) benutzerPunkte).toString());
                  fragenUAntworten.antworten.get(frageIndex).remove(antwortFeld.getText());

                Object[] wrongAnswerKeys = fragenUAntworten.antworten.get(frageIndex).keySet().toArray();
                for (Object wrongAnswerKey : wrongAnswerKeys) {
                    if (fragenUAntworten.antworten.get(frageIndex).get(wrongAnswerKey) == 0) {
                        fragenUAntworten.antworten.get(frageIndex).remove(wrongAnswerKey);
                        break;
                    }

                }

                System.out.println("Richtige Antwort");
            } else {
                falscheAntwortZaehler++;
                System.out.println("Falsche Antwort");


                if (falscheAntwortZaehler == 3) {
                   System.out.println("Skynet übernimmt das Kommando");


                    benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());
                    skynet();
                }
                benutzerFalscheAntwortZaehlerLabel.setText(((Integer) falscheAntwortZaehler).toString());

            }
        antwortFeld.setText("");
        }
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        Back = new javax.swing.JPanel();
        startButton = new javax.swing.JButton();
        neuesSpiel = new javax.swing.JButton();
        familienDuellLabel = new javax.swing.JLabel();
        benutzerPunkteLabel = new javax.swing.JLabel();
        skynetPunkteLabel = new javax.swing.JLabel();
        skynetGewinnerLabel = new javax.swing.JLabel();
        antwortButton = new javax.swing.JButton();
        antwortFeld = new javax.swing.JTextField();
        frageLabel = new javax.swing.JLabel();
        benutzerGewinnerLabel = new javax.swing.JLabel();
        benutzerFalscheAntwortZaehlerLabel = new javax.swing.JLabel();
        skynetFalscheAntwortZaehlerLabel = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        skySagt = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        Back.setBackground(new java.awt.Color(0, 0, 0));
        Back.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        startButton.setBackground(new java.awt.Color(255, 255, 51));
        startButton.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        startButton.setText("Startfrei zum Duell");
        startButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                startButtonActionPerformed(evt);
            }
        });
        Back.add(startButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(290, 290, 394, 61));

        neuesSpiel.setBackground(new java.awt.Color(255, 255, 0));
        neuesSpiel.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        neuesSpiel.setText("New Game");
        neuesSpiel.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                neuesSpielMouseReleased(evt);
            }
        });
        Back.add(neuesSpiel, new org.netbeans.lib.awtextra.AbsoluteConstraints(289, 447, 394, 68));

        familienDuellLabel.setFont(new java.awt.Font("Tahoma", 1, 36)); // NOI18N
        familienDuellLabel.setForeground(new java.awt.Color(255, 255, 0));
        familienDuellLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        familienDuellLabel.setText("Skynetduell");
        Back.add(familienDuellLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(289, 32, 394, 53));

        benutzerPunkteLabel.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        benutzerPunkteLabel.setForeground(new java.awt.Color(255, 255, 0));
        benutzerPunkteLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        benutzerPunkteLabel.setText("0");
        Back.add(benutzerPunkteLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(84, 278, 159, 27));

        skynetPunkteLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        skynetPunkteLabel.setForeground(new java.awt.Color(255, 255, 0));
        skynetPunkteLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        skynetPunkteLabel.setText("0");
        Back.add(skynetPunkteLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(821, 278, 86, 26));

        skynetGewinnerLabel.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N
        skynetGewinnerLabel.setForeground(new java.awt.Color(255, 255, 0));
        skynetGewinnerLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        skynetGewinnerLabel.setText("Skynet hat dir den ***** versolt!");
        Back.add(skynetGewinnerLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(289, 233, 394, 33));

        antwortButton.setBackground(new java.awt.Color(255, 255, 0));
        antwortButton.setText("Antworten");
        antwortButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                antwortButtonActionPerformed(evt);
            }
        });
        Back.add(antwortButton, new org.netbeans.lib.awtextra.AbsoluteConstraints(590, 580, 90, -1));

        antwortFeld.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        antwortFeld.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                antwortFeldActionPerformed(evt);
            }
        });
        Back.add(antwortFeld, new org.netbeans.lib.awtextra.AbsoluteConstraints(288, 580, 290, -1));

        frageLabel.setForeground(new java.awt.Color(255, 255, 0));
        frageLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        Back.add(frageLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(7, 533, 990, 40));

        benutzerGewinnerLabel.setFont(new java.awt.Font("Tahoma", 1, 24));
        benutzerGewinnerLabel.setForeground(new java.awt.Color(255, 255, 0));
        benutzerGewinnerLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        benutzerGewinnerLabel.setText("Sie haben Skynet besiegt!");
        Back.add(benutzerGewinnerLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(289, 96, 394, 40));

        benutzerFalscheAntwortZaehlerLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        benutzerFalscheAntwortZaehlerLabel.setForeground(new java.awt.Color(255, 255, 0));
        benutzerFalscheAntwortZaehlerLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        benutzerFalscheAntwortZaehlerLabel.setText("0");
        Back.add(benutzerFalscheAntwortZaehlerLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(84, 308, 159, 46));

        skynetFalscheAntwortZaehlerLabel.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        skynetFalscheAntwortZaehlerLabel.setForeground(new java.awt.Color(255, 255, 0));
        skynetFalscheAntwortZaehlerLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        skynetFalscheAntwortZaehlerLabel.setText("0");
        Back.add(skynetFalscheAntwortZaehlerLabel, new org.netbeans.lib.awtextra.AbsoluteConstraints(821, 311, 86, 37));

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(255, 255, 0));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        jLabel1.setText("SIE");
        Back.add(jLabel1, new org.netbeans.lib.awtextra.AbsoluteConstraints(84, 233, 153, 33));

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(255, 255, 0));
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel2.setText("Skynet");
        Back.add(jLabel2, new org.netbeans.lib.awtextra.AbsoluteConstraints(701, 233, 206, 33));

        jLabel3.setForeground(new java.awt.Color(255, 255, 0));
        jLabel3.setText("Punkte");
        Back.add(jLabel3, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 280, 48, 27));

        jLabel4.setForeground(new java.awt.Color(255, 255, 0));
        jLabel4.setText("Fehler");
        Back.add(jLabel4, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 308, 56, 46));

        jLabel5.setForeground(new java.awt.Color(255, 255, 0));
        jLabel5.setText("Punkte");
        Back.add(jLabel5, new org.netbeans.lib.awtextra.AbsoluteConstraints(925, 279, 48, 26));

        jLabel6.setForeground(new java.awt.Color(255, 255, 0));
        jLabel6.setText("Fehler");
        Back.add(jLabel6, new org.netbeans.lib.awtextra.AbsoluteConstraints(925, 311, 87, 40));

        skySagt.setFont(new java.awt.Font("Tahoma", 0, 24));
        skySagt.setForeground(new java.awt.Color(255, 255, 0));
        skySagt.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        skySagt.setText("Skynet generiert Antworten");
        Back.add(skySagt, new org.netbeans.lib.awtextra.AbsoluteConstraints(289, 374, 394, 37));

        jLabel7.setForeground(new java.awt.Color(255, 255, 0));
        jLabel7.setText("--Copyright by Martin Lubczyk ---");
        Back.add(jLabel7, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 650, 1010, -1));

        getContentPane().add(Back, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, 680));

        pack();
    }// </editor-fold>

    private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {
        startButton.setVisible(false);
        fragenUAntworten = new FragenUndAntworten();
        frageLabel.setText(fragenUAntworten.fragen.get(berechneFrageIndex()));
        antwortFeld.setVisible(true);
        benutzerFalscheAntwortZaehlerLabel.setVisible(true);
        benutzerPunkteLabel.setVisible(true);
        neuesSpiel.setVisible(false);
        antwortButton.setVisible(true);
        jLabel1.setVisible(true);
        jLabel2.setVisible(true);
        jLabel3.setVisible(true);
        jLabel4.setVisible(true);
        jLabel5.setVisible(true);
        jLabel6.setVisible(true);

        skynetFalscheAntwortZaehlerLabel.setVisible(true);
        skynetPunkteLabel.setVisible(true);
}

    private void neuesSpielMouseReleased(java.awt.event.MouseEvent evt) {
     
        fragenUAntworten = new FragenUndAntworten();
        frageLabel.setText(fragenUAntworten.fragen.get(berechneFrageIndex()));
        antwortFeld.setVisible(true);
        antwortButton.setVisible(true);
        benutzerPunkteLabel.setText("0");
        skynetGewinnerLabel.setVisible(false);
        benutzerGewinnerLabel.setVisible(false);
        neuesSpiel.setVisible(false);
        benutzerPunkte = 0;
        skynetPunkteLabel.setText("0");
        skynetPunkte = 0;
        benutzerFalscheAntwortZaehlerLabel.setText("0");
        falscheAntwortZaehler = 0;
        skynetFalscheAntwortZaehlerLabel.setText("0");  // TODO add your handling code here:
}

    private void antwortFeldActionPerformed(java.awt.event.ActionEvent evt) {
        antwort = antwortFeld.getText();
        System.out.println(antwort);
        benutzer();
        System.out.println(antwortFeld.getText());
}

    private void antwortButtonActionPerformed(java.awt.event.ActionEvent evt) {
        antwort = antwortFeld.getText();
        System.out.println(antwort);
        benutzer();
        System.out.println(antwortFeld.getText());





    }

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Gui().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private javax.swing.JPanel Back;
    private javax.swing.JButton antwortButton;
    private javax.swing.JTextField antwortFeld;
    private javax.swing.JLabel benutzerFalscheAntwortZaehlerLabel;
    private javax.swing.JLabel benutzerGewinnerLabel;
    private javax.swing.JLabel benutzerPunkteLabel;
    private javax.swing.JLabel familienDuellLabel;
    private javax.swing.JLabel frageLabel;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JButton neuesSpiel;
    private javax.swing.JLabel skySagt;
    private javax.swing.JLabel skynetFalscheAntwortZaehlerLabel;
    private javax.swing.JLabel skynetGewinnerLabel;
    private javax.swing.JLabel skynetPunkteLabel;
    private javax.swing.JButton startButton;
    // End of variables declaration
    private int frageIndex;
    private String antwort;
    private String fragen;

    private int falscheAntwortZaehler = 0;
    private int benutzerPunkte = 0;
    private int skynetPunkte = 0;
    private FragenUndAntworten fragenUAntworten;
    private Integer anzahlAntwortZurFrage;
}
```


----------

