Zahlenschloss programieren

T

Taranis

Gast
Hallo an alle Hilfsbereiten und sonstige Leser.
Ich möchte ein Zahlenschloss-Programm als kelines Spiel programmieren (in Java). Die Funktion soll in etwa folgende sein:
Der Anwender muss eine unbekannte Abfolge aus drei Zahlen in der richtigen Reihenfolge anklicken, so dass sich das Programm automatisch beendet. Ist eine angeklickte Zahl falsch oder die Reihenfolge verkehrt ändert sich die Backgroundfarbe auf rot.
Die von mir vorgegebene Zahlenabfolge soll lauten: 3-5-7

Ich habe versucht das Problem über eine dreifache If-Veschachtelung zu lösen. Das Problem ist aber, dass ich beim zweiten "If" noch immer die drei im String habe trotz dass ich die 5 angeklickt habe.
Gibt es Möglichkeiten nach der ersten If-Anweisung den ActionEvent neu abzufragen oder zurück zusetzen?
Ich habe zwar Sachen wie "dispatch()" oder "getNewEvent()" gefunden, habe aber keine Ahnung wie ich sowas in den Code einbringen kann (kam bisher dabei immer "Methode unbekannt").

Schon mal Danke für die kommenden Ratschläge!

Hier nun mein Code:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;


public class CombinationLock extends JFrame implements ActionListener
{
	JButton button0;
	JButton button1;
	JButton button2;
	JButton button3;
	JButton button4;
	JButton button5;
	JButton button6;
	JButton button7;
	JButton button8;
	JButton button9;
	
	public CombinationLock() //Konstruktor
	{
		button0 = new JButton("0");
		button1 = new JButton("1");
		button2 = new JButton("2");
		button3 = new JButton("3");
		button4 = new JButton("4");
		button5 = new JButton("5");
		button6 = new JButton("6");
		button7 = new JButton("7");
		button8 = new JButton("8");
		button9 = new JButton("9");
		
		button0.setActionCommand("0");
		button1.setActionCommand("1");
		button2.setActionCommand("2");
		button3.setActionCommand("3");
		button4.setActionCommand("4");
		button5.setActionCommand("5");
		button6.setActionCommand("6");
		button7.setActionCommand("7");
		button8.setActionCommand("8");
		button9.setActionCommand("9");
		
		getContentPane().setLayout(new FlowLayout());
		getContentPane().add(button0);
		getContentPane().add(button1);
		getContentPane().add(button2);
		getContentPane().add(button3);
		getContentPane().add(button4);
		getContentPane().add(button5);
		getContentPane().add(button6);
		getContentPane().add(button7);
		getContentPane().add(button8);
		getContentPane().add(button9);
		
		button0.addActionListener(this);
		button1.addActionListener(this);
		button2.addActionListener(this);
		button3.addActionListener(this);
		button4.addActionListener(this);
		button5.addActionListener(this);
		button6.addActionListener(this);
		button7.addActionListener(this);
		button8.addActionListener(this);
		button9.addActionListener(this);	
	}
	
	public void actionPerformed(ActionEvent evt)
	{
		String cmd = evt.getActionCommand();

		if(cmd.equals("3"))
		{
			cmd = evt.getActionCommand();
			if(cmd.equals("5"))
			{
				cmd = evt.getNewActionCommand();
				if(cmd.equals("7"))
				{
					System.exit(0);
				}
				else
				{
					getContentPane().setBackground(Color.red);
					repaint();
				}
			}
			else
			{
				getContentPane().setBackground(Color.red);
				repaint();
			}
		}
		else
		{
			getContentPane().setBackground(Color.red);
			repaint();
		}
	}
	
	public static void main(String[] args)
	{
		CombinationLock comLck = new CombinationLock();
		
		WindowQuitter wquit = new WindowQuitter();
		comLck.addWindowListener(wquit);
		
		comLck.setSize(600,300);
		comLck.setTitle("Combination Lock - To exit choose the correct three numbers");
		comLck.setVisible(true);
	}
}
	
class WindowQuitter extends WindowAdapter
{
	public void windowClosing(WindowEvent e)
	{
		System.exit(0);
	}
}
 
Zuletzt bearbeitet von einem Moderator:

Marco13

Top Contributor
Man könnte die Buttons in ein Array leigen. Und das ActionCommand brauchst du nicht zu setzen, das ist standardmäßig das, was schon im Konstruktor übergeben wird. Ansonsten ist der Ablauf im Pseudocode sowas wie
Code:
String eingaben[] = new String[3];
int eingabeIndex = 0;

void actionPerformed(...)
{
    eingaben[eingabeIndex] = dasActionCommand;
    eingabeIndex++;
    if (eingabeIndex == 3)
    {
        prüfeEingabe(); // macht Bild rot oder beendet das Program
        eingabeIndex = 0;
    }
}
 

Foermchen82

Top Contributor
Versuch mal folgendes:

Deine Zielzahl ist die 357.

Das was du ein gibst wandelst du in einen int.
Also die 1. Zahl * 100 plus die 2.Zahl * 10 plus die 3. Zahl.
das kannst du dann prima vergleichen!
 

Marco13

Top Contributor
Ist dann aber evtl. ein bißchen frickelig, wenn man so Zahlen hat wie "007" und feststellen will, ob schon 3 Ziffern eingegeben wurden...
 

Marco13

Top Contributor
Gute Idee. Da könnte man ja sowas machen wie
Code:
if (eingabeIndex == 3)
{
    prüfeEingabe(); // macht Bild rot oder beendet das Program
...
:D
 

Ähnliche Java Themen

Neue Themen


Oben