# Spiel Überprüfung



## Typ mit Frage (12. Jul 2014)

Ich habe ein kleines Reaktionsspiel mit Eclipse programmiert , bei dem man einfach innerhalb einer bestimmten Zeit einen roten Button klicken muss .Während des Spielverlaufs kommen noch mehrere Ablenkfarbbuttons dazu und die Rektionszeit(noch nicht eingebaut)verkürtz sich.

Mein Problem ist , dass ich wenn ich das Programm starte nur den Anfangsbildschirm angezeigt bekomme.
Sobald ich jedoch einen Button drücke reagiert das Programm auf nichts mehr .
Ich vermute einfach , dass das an meinem Laptop liegt.

Deswegen brauche ich jemanden der das Programm mal ausführt und mir dann sagt :

      1. Ob es läuft
      2. Ob es läuft aber während des Programmverlaufs Fehler gibt
      3. Ob irgendetwas auffällig ist .(Das kann alles von Verzögerungen bis Bugs sein)
und 4.(optional) Verbesserungsvorschläge

eine schnelle Antwort wäre sehr hilfreich.

Und im folgenden der Programmcode: ( ich bin neu hier also schreib ich ihn einfach)





import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Reactor implements ActionListener {

	JButton[] btns = new JButton[25];
	int punktzahl = 0;
	int schwierigkeit=5;
	int sekundenzähler=0;
	int limit=10000;
	int wartezeit=1000;
	int high = 26;
	int low = 1;
	int mommentaneZahl=12;
	int spielfeldgröße=25;
	int spielfeldlänge = (int) Math.sqrt(spielfeldgröße);
	boolean start=false;

	public Reactor() {

		initializeButtons();
		JFrame f = new JFrame();
		JPanel panel=new JPanel();
		JPanel spielfeld = new JPanel();
		panel.setLayout(new BorderLayout());
		spielfeld.setLayout(new GridLayout(spielfeldlänge,spielfeldlänge));


		for (int zeile = 0; zeile < spielfeldgröße; zeile++) {

			spielfeld.add(btns[zeile]);

			btns[zeile].addActionListener(this);
			btns[zeile].setBackground(Color.WHITE);
			btns[zeile].setText(""+(zeile)+"");
			btns[zeile].setActionCommand(""+zeile+"");

		}
		btns[12].setBackground(Color.RED);
		panel.add(spielfeld, BorderLayout.CENTER);
		f.getContentPane().add(panel);
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.pack();
		f.setLocationRelativeTo(null);

		}	

	private void initializeButtons() {
		for (int a = 0; a < spielfeldgröße; a++) {
				btns[a] = new JButton(" ");
		}
while(start=true){
	while(sekundenzähler<limit){
		sekundenzähler++;
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	}
	}
	@Override
	public void actionPerformed(ActionEvent arg0) {


			start=true;

			String gedrückteZahl= arg0.getActionCommand();


			if (gedrückteZahl.equals(btns[mommentaneZahl])){

				punktzahl++;

				if(punktzahl>5){
					int zufallszahlextra1 =(int)(Math.random()*(spielfeldgröße+1));
					btns[zufallszahlextra1].setBackground(Color.BLUE);
				}
				if(punktzahl>10){
					int zufallszahlextra2 =(int)(Math.random()*(spielfeldgröße+1));
					btns[zufallszahlextra2].setBackground(Color.GREEN);
				}
				if(punktzahl>15){
					int zufallszahlextra3 =(int)(Math.random()*(spielfeldgröße+1));
					btns[zufallszahlextra3].setBackground(Color.YELLOW);
				}
				if(punktzahl>20){
					int zufallszahlextra4 =(int)(Math.random()*(spielfeldgröße+1));
					btns[zufallszahlextra4].setBackground(Color.ORANGE);
				}
				if(punktzahl>25){
					int zufallszahlextra5 =(int)(Math.random()*(spielfeldgröße+1));
					btns[zufallszahlextra5].setBackground(Color.BLACK);
				}
				btns[mommentaneZahl].setBackground(Color.WHITE);
				int zufallszahl =(int)(Math.random()*(spielfeldgröße+1));
				btns[zufallszahl].setBackground(Color.RED);
				mommentaneZahl=zufallszahl;
				sekundenzähler=0;
			}

			else{
				for (int zeile = 0; zeile < spielfeldgröße; zeile++) {

					btns[zeile].removeActionListener(this);
					start=false;


			}
			}


		}


	public static void main(String[] args) {
		Reactor r = new Reactor();

	}
}


----------



## Topfpflanze (13. Jul 2014)

Könnte am Garbage Collector liegen.


----------



## Joose (14. Jul 2014)

Liegt einfach an deinem 
	
	
	
	





```
Thread.sleep(...)
```
 im Code. Das sorgt dafür das dein Code an dieser Stelle einfriert. Sobald du den Button klickst will sich die GUI neu zeichnen (um den geklickten Button darzustellen) da du den Thread aber blockierst "hängt sich das Programm auf"

Stichwörter die bei der Problemlösung helfen können: SwingWorker, EventDispatchThread, ...


----------



## Phash (14. Jul 2014)

und das ROTE Geschreibsel über dem EDITOR hier lesen!

Java code in JAVA - Tags schreiben!


----------

