Wer wird Millionär / Fragefenster

  • Themenstarter Gelöschtes Mitglied 55561
  • Beginndatum
G

Gelöschtes Mitglied 55561

Gast
Moin,
ich programmiere gerade eine Art "Wer wird Millionär" und ich habe dabei das Problem das der Button nach der 1. Frage im 2. Fragefenster Automatisch gedrückt wird....
Ich hoffe ihr versteht mein Problem und könnt mir helfen.
Ich weiß ist nicht gerade sauber programmiert....

Hier mein Hauptprogramm:
Java:
package Spiel;

import javax.swing.JOptionPane;

public class Hauptprogramm
{

    public static void main(String[] args) // Anfang Hauptprogramm
    {
        //--------------------Variablendeklaration--------------------
       
       
       
        MillionaerUpdate MU = new MillionaerUpdate();// konstruiert ein Spiel
       
        String     Menü;
        int        menü;
       
       
        //--------------------Eingaben & Ausgaben--------------------
        do
        {
        Menü= JOptionPane.showInputDialog    ("Was möchten Sie tun? \n" +
                                             "1. Spielen\n" +
                                             "2. Spiel beenden");
       
        menü = Integer.parseInt(Menü);

       
           
        switch(menü)
        {
        case 1:
                    MU.Spiel();
                    break;
                   
        case 2:        System.exit( 0 );
                   
           
        default:    JOptionPane.showMessageDialog(null, "Falsche Eingabe!");
                     break;
        }
       
        }while(!(menü==1 || menü==2));
    }
}

Und hier die die Class wo mein Problem ist:
Java:
package Spiel;

import javax.swing.*;
import java.awt.*; //Alle Pakete von AWT werden eingebunden
import java.awt.event.*; //Wird benötigt für ActionListener


public class MillionaerUpdate implements ActionListener{
   
    private JFrame Rahmen = new JFrame("Wirst du Millionär? Frage 1.");
    private JPanel Platte = new JPanel();
   
   
   
    private JLabel Label = new JLabel ("Alle Wege führen nach....?");
    private JButton Knopf1 = new JButton ("Malle");
    private JButton Knopf2 = new JButton ("Rom");
    private JButton Knopf3 = new JButton ("Athen");
    private JButton Knopf4 = new JButton ("New York");
    private int i = 0;
    private boolean antwort = false;
   
   
    public MillionaerUpdate() {                                        //Konstruktor
        JOptionPane.showMessageDialog(null, "Wirst du Millionär?");
    }
   
    public void Spiel() {
        Rahmen.setSize (800,500);
        Rahmen.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        Platte.setLayout(new GridLayout(5, 1));
       
        Platte.add (Label);                                       
        Platte.add (Knopf1);
        Platte.add (Knopf2);
        Platte.add (Knopf3);
        Platte.add (Knopf4);
           
        Rahmen.setContentPane (Platte);   
        Rahmen.setLocation(400,200);
       
        Knopf1.addActionListener(this);//fügt ActionListener hinzu damit der Computer weiß das ein Knopf gedrückt wurde
        Knopf2.addActionListener(this);
        Knopf3.addActionListener(this);
        Knopf4.addActionListener(this);
       
        Rahmen.setVisible(true); 
    }
   
    public void actionPerformed(ActionEvent a) {
        i++;
        do {
        switch(i) {
       
        case 1:
           
            if(a.getSource() == Knopf1)
            {
                Knopf1.setBackground(Color.RED);
                Knopf1.removeActionListener(this);//wird entfernt damit der Knopf nicht nochmal gedrückt werden kann
                antwort= false;
            }
            else if(a.getSource() == Knopf2)
            {
                Knopf2.setBackground(Color.GREEN);
                Knopf2.removeActionListener(this);
                antwort= true;
            }
            else if(a.getSource() == Knopf3)
            {
                Knopf3.setBackground(Color.RED);
                Knopf3.removeActionListener(this);
                antwort= false;
            }
            else if(a.getSource() == Knopf4)
            {
                Knopf4.setBackground(Color.RED);
                Knopf4.removeActionListener(this);
                antwort= false;
            }
           
            richtigfalsch();
            break;
           
           
           
           
           
        case 2:
            antwort=false;
            Rahmen.dispose();
           
            Rahmen = new JFrame("Wirst du Millionär? Frage 2.");
            Platte = new JPanel();
            Label = new JLabel ("Der längste Fluss der Welt ist....?");
            Knopf1 = new JButton ("der Rhein");
            Knopf2 = new JButton ("die Schwentine");
            Knopf3 = new JButton ("der Amazonas");
            Knopf4 = new JButton ("der Nil");
           
            Spiel();
       
            if(a.getSource() == Knopf1)
            {
                Knopf1.setBackground(Color.RED);
                Knopf1.removeActionListener(this);//wird entfernt damit der Knopf nicht nochmal gedrückt werden kann
                antwort= false;
            }
            else if(a.getSource() == Knopf2)
            {
                Knopf2.setBackground(Color.RED);
                Knopf2.removeActionListener(this);
                antwort= false;
            }
            else if(a.getSource() == Knopf3)
            {
                Knopf3.setBackground(Color.RED);
                Knopf3.removeActionListener(this);
                antwort= false;
            }
            else if(a.getSource() == Knopf4)
            {
                Knopf4.setBackground(Color.GREEN);
                Knopf4.removeActionListener(this);
                antwort= true;
            }
           
            richtigfalsch();
            break;
                }
       
        }while(antwort==true);
       
    }
   
    public void richtigfalsch () {
        if(antwort == true) {
            i++;
            JOptionPane.showMessageDialog(null, "Richtig!");
        } else {
            JOptionPane.showMessageDialog(null, "Leider falsch, vielleicht klappt es beim nächsten mal! \n Das Programm wird jetzt beendet.");
            System.exit( 0 );
        }
    }
   
   
   
}
 

VfL_Freak

Top Contributor

Joose

Top Contributor
Entferne die do/while-Schleife aus dem ActionListener! Du erhöhst am Anfang deines ActionListener deine Variable "i" .. danach wird für die 1.Frage die Lösung abgefragt, danach kommst du zur Abfrage der 2.Frage ... da du immer noch im ActionListener bist ist immer noch der selbe Knopf wie vorher gedrückt ;)

Generell solltest du deinen Code nochmal überarbeiten.
Die do/while im ActionListener ist eine schlechte Wahl. Außerdem solltest du die Methode "Spiel()" neu aufrufen, sondern einfach die vorhandenen Komponenten wiederverwenden und nur deren Inhalt anpassen.
 
G

Gelöschtes Mitglied 55561

Gast
Danke erstmal für die Antworten, aber irgendwie versteh ich das noch nicht ganz.
Ich benötige doch eine Schleife im ActionListener damit ich vom Case 1 ins Case 2 komme. Nehme ich sie raus und beantworte die 1. Frage bleibt er im Fenster der 1. Frage und nix passiert mehr
 

Harry Kane

Top Contributor
Ich benötige doch eine Schleife im ActionListener damit ich vom Case 1 ins Case 2 komme.
Du benötigst zwar eine Schleife, aber definitiv nicht im ActionListener. Es ist i. A. hilfreich, sich den Programmablauf aufzumalen oder aufzuschreiben, bevor man mit dem Coden loslegt. In deinem Fall könnte der PLan ungefär so aussehen (ich beschränke mich auf das Spiel selber. Die Abfrage ob spielen der nicht, funzt ja).
Level auf 1 setzen.
Solange antwort true ist (antwort ist ein doofer Name für eine boolesche Variable. Besser ist antwortRichtig)
Frage und 4 Antworten zum aktuellen Level laden. Fragetext kommt auf das JLabel, die Antworten auf die JButtons.
Beim drücken eines JButton: herausfinden, welcher der 4 Knöpfe gedrückt wurde, und prüfen, ob er die richtige Antwort war. Passenden JDialog anzeigen. Falls Antwort falsch: antwort auf false setzen, Spiel wird beendet. Falls antwort richtig, level um 1 erhöhen, und nächste Frage beschaffen.
Nehme ich sie raus und beantworte die 1. Frage bleibt er im Fenster der 1. Frage und nix passiert mehr
Das kommt daher, weil du eine komplett neuen Gui erzeugst (JFrame mit JLabel und JButtons), die aber nicht anzeigst. Benenne besser einfach die schon vorhandenen JButtons/JLabels um, und setze den Title vom JFrame neu..
 

Blender3D

Top Contributor
Bau dir vor der GUI ein Klasse Frage die die Frage und die Antworten beinhaltet und die richtige Antwort kennt.
Die Fragen könntest Du aus einer Datei laden. z.B.
Wann begann der Erste Weltkrieg?
1914
1912
1918
1900
Wo war ... ?
..
..

Dann erst gehe an die GUI heran. Die Funktionen sollten aber mit einem Parameter Frage versehen werden, um die
aktuelle Frage darzustellen.
Andern Falls wirst du spätesten mit Deinem Programm scheitern wenn Du neue Fragen benötigst.
;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
TobiasN Wer Wird Millionär Spiele- und Multimedia-Programmierung 4
B Bild wird nicht geladen Spiele- und Multimedia-Programmierung 4
R JPanel wird erst im Fullscreen angezeigt Spiele- und Multimedia-Programmierung 1
K Das Leerzeichen der Tastatur wird nicht gleichgesetzt mit dem Leerzeichen aus der Text Datei Spiele- und Multimedia-Programmierung 5
B Programmieren wie der Befehl /ban in Minecraft geblockt wird aber nicht /ban mit einem Argument Spiele- und Multimedia-Programmierung 1
J OpenGL Bild wird nicht richtig angezeigt Spiele- und Multimedia-Programmierung 2
S GetBufferStrategy-Methode wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
L Transparenz wird magenta Spiele- und Multimedia-Programmierung 3
Polarfuchs Status von Midi Datei(wird gerade abgespielt oder nicht) Spiele- und Multimedia-Programmierung 0
A Bild(sequenz) wird nicht geladen Spiele- und Multimedia-Programmierung 1
F 4 Gewinnt - Code wird ignoriert Spiele- und Multimedia-Programmierung 7
C Mein Programm wird sofort terminated Spiele- und Multimedia-Programmierung 8
A [LWJGL] BMP Textur wird nicht richtig dargestellt Spiele- und Multimedia-Programmierung 8
S LWJGL Rechteck wird nicht gezeichnet Spiele- und Multimedia-Programmierung 6
J Versch. Pfeiltasten angezeigt obwohl nur 1 gedrückt wird Spiele- und Multimedia-Programmierung 2
Creylon [LWJGL] Textur wird falsch angezeigt Spiele- und Multimedia-Programmierung 12
S Nur den Bereich des JPanels zeichen der im Viewport des JScrollPane angezeigt wird Spiele- und Multimedia-Programmierung 8
Q BufferedImage vs. Heap Space ‒ Warum wird der Speicher nicht freigegeben? Spiele- und Multimedia-Programmierung 6
M Karte wird falsch gezeichnet Spiele- und Multimedia-Programmierung 9
H Skalierung eines Polygons ohne das es verschoben wird Spiele- und Multimedia-Programmierung 3
C Alles hängt, wenn ein Sound abgespielt wird Spiele- und Multimedia-Programmierung 9
K Transformation wird nicht angewendet Spiele- und Multimedia-Programmierung 3
A Wie wird die Person im Game animiert, dass sie ihre Körperteile bewegen? Spiele- und Multimedia-Programmierung 3
A Shape Geometry, wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
L Progress Bar wird erst zu spät ganz angezeigt Spiele- und Multimedia-Programmierung 5
D Jogl:Textur auf GLUquadric wird vertikal spiegelverkehrt dargestellt Spiele- und Multimedia-Programmierung 2
M Java Textadventure HashMap wird nicht befüllt? Spiele- und Multimedia-Programmierung 7
P [JMF] Webcam wird nicht gefunden Spiele- und Multimedia-Programmierung 3
P Erkennen auf welche Objekte gezeigt wird in JoGL Spiele- und Multimedia-Programmierung 6
Steev KeyPressed:Tab wird nicht mehr weitergeleitet Spiele- und Multimedia-Programmierung 2
J JOGL - Bild wird immer wieder weiß Spiele- und Multimedia-Programmierung 2
0x7F800000 weiß einer wozu ANTLR beim build von JOGL verwendet wird? Spiele- und Multimedia-Programmierung 3
J MenuBar wird bei Spiel nicht angezeigt Spiele- und Multimedia-Programmierung 5
L Frame wird geöffnet es wird aber nix angezeigt Spiele- und Multimedia-Programmierung 2
R Die korrekte Breite/Höhe eines Bildes wird nicht erkannt. Spiele- und Multimedia-Programmierung 2
P JOGL: mit glTranslated wird nichts gezeichnet Spiele- und Multimedia-Programmierung 3
F Szene wird nicht komplett angezeigt (Tiefenproblem?) Spiele- und Multimedia-Programmierung 2
G Fragespiel, Hilfe ! like Wer wird Millinär Spiele- und Multimedia-Programmierung 12
M 1. Menüleiste wird doppelt gezeichnet 2. awt auf ein jpanel Spiele- und Multimedia-Programmierung 4
F WakeupOnAWTEvent wird ignoriert! Spiele- und Multimedia-Programmierung 2
C BackgroundSound wird nicht abgespielt Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben