# Vektor Game



## MrBig (27. Feb 2012)

Hallo Forum,

da ich momentan Semesterferien habe und somit wieder bisschen mehr Zeit meinem Hobby widmen kann, möchte ich gerne ein kleinen Spiel programmieren.

Der Algorithmus ist recht banal, es gibt einen Startwert (erste Zug) zwischen 1 und 6 in meinem Beispiel 4. 
Auf diesem baut der nächste Zug auf. Denn jeder neue Zug kann dann entweder wieder 4 sein oder 4+1 oder 4-1. Sprich jeder neue Zug kann entweder genauso groß wie der vorherige Zug ein oder eins größer oder kleiner. :rtfm:


```
privat boolean checkNextStep(int alterWert, int neuerWert){
if((neuerWert == alterWert) || (neuerWert == alterWert+1) || (neuerWert == alterWert-1)){
return true;
} else{
return false;
}}
```

Das Spielfeld soll ein eindimensionales Array sein (variabler länge).
Array[0] = startWert z.B.4
Array[1] = kann jetzt entweder 3, 4 oder 5 sein.

Bis hier ist alles kein Problem, doch bei der Grafischen umsetztung hapert es bei mir.
Die Gui soll eine anreihung von JButtens werden, die erstmal alle setEnable(false) sein sollen,
bis auf die, auf die mein nächster Zug gehen kann.
Hier eine schematische darstellung:
Das erste Feld links wird mit dem Startwert 4 besetzt, somit dürfen nur die Felder 3,4 und 5 aktiv (a) sein, alle anderen inaktiv (x)
1.Zug
[4|x|x|a|a|a|x|x|x|x|x|x|x|x|x|x|x]

2.Zug
Gehe ich jetzt auf das fünfteFeld, muss sich die Gui, als die Buttons wieder anpassen,
das soll dann so aussehen:

[4|x|x|x|x|5|x|x|x|a|a|a|x|x|x|x|x]

Hauptproblem:
Wie kann ich das umsetzten?
Ich hab es bis jetzt leider nur statisch umsetzen gekonnt, und auch nur für den ersten Zug.
Wie kann ich die restlichen Buttons anpassen? :bahnhof:

zweites nebensächliches Problem:
Gerne hätte ich auch einen Tipp, wie ich die Gui z.b. nach 10 Zügen anpassen kann, so dass die 9 Züge die ich zuvor gemacht habe wegfallen und sich das Spielfeld um eine Länge x erweitert.
Ich möchte ja keine endloslange Spagetti auf meinem Display haben.

Vielen Dank schonmal für das durchlesen :applaus::toll:


----------



## Airborne (27. Feb 2012)

> ein eindimensionales Array sein (variabler länge).



also eher ein Vector oder eine ArrayList gell? Arrays mit "variabler Länge" sind eher selten. So läßt sich das ganze auch leicht mal "verlängern".

Das mit der GUI ist recht simple:

- Nach jedem Zug muss due GUI aktualisiert werden -> repaint
- für jeden Button muss setEnable(boolean) ausgeführt werden, der Wert des boolean Argument sollte recht leicht zu ermitteln sein. DIe Buttons lösen ja ein Event aus, dass ein ActionListener aufnimmt. 
In diesem Fall würde ich nicht die GUI selbst das machen lassen sondern eher eine Worker-Klasse daneben legen. So kann der Button einen Value übergeben ( vielleicht ein Enum? Button.setData() / Button.getData()) und damit einen fixen Mechanismus anstoßen.


----------



## MrBig (27. Feb 2012)

Airborne hat gesagt.:


> also eher ein Vector oder eine ArrayList gell? Arrays mit "variabler Länge" sind eher selten. So läßt sich das ganze auch leicht mal "verlängern".
> 
> Das mit der GUI ist recht simple:
> 
> ...




Okay mit variabel meinte ich zu Spielbeginn wird die Länge festgelgt ;-)
Aber trotzdem Danke für den Einwurf.

Zu repain, und enum da hab ich leider noch keine Ahnung von.
Was meinst du mit einer Worker-Klasse?

Ich baue meinen Button mit ActionEvent und übergebe im ActionListner oder ClickAction die Possition, oder? Hmm jetzt muss ich mir mal gedanken machen, wie ich das umsetzen könnte. :rtfm:


----------



## Airborne (27. Feb 2012)

Das sind recht viele wiederverwertbare Dinge in deiner Idee: Die Buttons z.B. sind alle relativ gleich -> Factory zur Herstellung?

Mit Worker meine ich, dass du als ActionListener nicht wie üblich die GUI Klasse selbst anmeldest, sondern eine seperate Klasse neben der GUI.

Das hat den Vorteil, dass du es etwas klarer strukturieren kannst. Denn  auch die Action ist ja recht gleichförmig: Rund um den button, der den Event auslöst, sollen die angrenzenden Buttons setEnable(true) werden. Dazu muss der ActionListener wissen, welcher Button den Event ausgelöst hat. Ein ID/eine Nummerierung könnte dazu sinnvoll sein.


----------



## MrBig (27. Feb 2012)

Airborne hat gesagt.:


> Das sind recht viele wiederverwertbare Dinge in deiner Idee: Die Buttons z.B. sind alle relativ gleich -> Factory zur Herstellung?
> 
> Mit Worker meine ich, dass du als ActionListener nicht wie üblich die GUI Klasse selbst anmeldest, sondern eine seperate Klasse neben der GUI.
> 
> Das hat den Vorteil, dass du es etwas klarer strukturieren kannst. Denn  auch die Action ist ja recht gleichförmig: Rund um den button, der den Event auslöst, sollen die angrenzenden Buttons setEnable(true) werden. Dazu muss der ActionListener wissen, welcher Button den Event ausgelöst hat. Ein ID/eine Nummerierung könnte dazu sinnvoll sein.




Okay, so bisschen hab ich das auch schon gemacht mit dem Spielfeld


```
public void drawPanel(){
			int le=6;
			for(int l=0;l<11;l++){
				final JButton btnNewButton = new JButton("?");
				btnNewButton.setBounds(le, ho, 20, 20);
				if (l >= 8 && h >= 4 && h <= 6){
					btnNewButton.setEnabled(true);
					btnNewButton.setLabel("f");
				}else{
					btnNewButton.setEnabled(false);
				}
				btnNewButton.addActionListener(new ButtonLauscher(l));
				btnNewButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						btnNewButton.setEnabled(false);
						btnNewButton.setLabel("x");
					}
				});
				frame.getContentPane().add(btnNewButton);
				le=le+20;
			}
			ho=ho+20;
		}
```

Aber wie mache ich das mit dem wiederzeichnen beim drücken?
Und wie kann ich genau diese Button ansteuern?:rtfm:

Vielen DANK schonmal an Airborne!!!!!!:toll:


----------



## Airborne (27. Feb 2012)

[c]Jpanel.repaint();[/c] ist dein Freund, dann sollte sich der neue Wert für den Button durchschlagen.


----------



## MrBig (27. Feb 2012)

Airborne hat gesagt.:


> [c]Jpanel.repaint();[/c] ist dein Freund, dann sollte sich der neue Wert für den Button durchschlagen.





Hmm ich hänge glaub ich im Kopf ein wenig....
Denke ich hab heute schon wieder zu viel gemacht, so dass ich den Wald vor Bäumen nicht sehe...


Werde morgen oder in ein paar Stunden nochmal dran gehen. Denke dass es nur etwas kleines ist, was ich bei meiner GUI Test Klasse vergessen oder falsch gemacht habe...

Hier meine Testklasse bis jetzt:

```
package Test;

import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class TestGui {

	private JFrame frame;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TestGui window = new TestGui();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public TestGui() {
		initialize();
		makeButtons();
	}

	private void makeButtons() {
			int le=6;
			for(int l=0;l<11;l++){
				final JButton btnNewButton = new JButton("?");
				btnNewButton.setBounds(le, 6, 20, 20);
				if (l <= 1 ){
					btnNewButton.setEnabled(true);
					btnNewButton.setLabel("f");
				}else{
					btnNewButton.setEnabled(false);
				}
				btnNewButton.addActionListener(new ButtonLauscher2(l));
				btnNewButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						btnNewButton.setEnabled(false);
						btnNewButton.setLabel("x");
						frame.repaint();
					}
				});
				frame.getContentPane().add(btnNewButton);
				le=le+20;
		}
		
	}


	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
	}
	
	public class ButtonLauscher2 implements ActionListener {
		public int x;
		public int y;

		public ButtonLauscher2(int r) {
			// TODO Auto-generated constructor stub
			this.y = r;
		}
		public int getButtonX(){
			int newx= x;
			return newx;	
		}
		public int getButtonY(){
			int newy =y;
			return newy;	
		}



		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			System.out.println("Button geklickt!"+getButtonX()+" "+getButtonY()+" ");
		}

	}
	
	

}
```

:noe:

entschuldigt das Chaos, aber ist ja nur testweise implementiert...


----------



## Airborne (27. Feb 2012)

Und genau ist das Problem - du erzeugst deine Button in dem JFrame direkt und speicherst auch den Zustand dort. Du solltest 

```
frame.getContentPane().repaint();
```

aufrufen oder den Zustand der Applikation in einer anderen Klasse speichern.


----------



## MrBig (28. Feb 2012)

Okay, so sieh es jetzt aus und klappt leider noch nicht so ganz

TestGui Klasse:

```
package Test2;

import java.awt.EventQueue;

public class TestGui {

	private static JFrame frame;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					TestGui window = new TestGui();
					window.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public TestGui() {
		//Fenster wird erstellt
		initialize();
		//Array wird erstellt und mit Startwerten gefüllt
		TestArray.testStart();
		//Buttens werden mit den Werten aus dem Array erstellt
		makeButtons();
	}

	private void makeButtons() {
			int le=6;
			for(int l=0;l<TestArray.arraylaenge-1;l++){
				final JButton btnNewButton = new JButton("?");
				btnNewButton.setBounds(le, 6, 20, 20);
				/*
				 * Zeichnet die Buttons
				 * enable wenn sie im möglichen Zug liegen könnten.
				 * oder disable wenn man mit dem nächten Zug nicht drauf kommen kann.
				 */
				if (TestArray.array[l]==0){
					btnNewButton.setEnabled(false);
					btnNewButton.setLabel("f");
				}else{
					btnNewButton.setEnabled(true);
				}
				btnNewButton.addActionListener(new ButtonLauscher2(l));
				btnNewButton.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						btnNewButton.setEnabled(false);
						btnNewButton.setLabel("x");
					}
				});
				frame.getContentPane().add(btnNewButton);
				le=le+20;
		}
		
	}


	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 600, 60);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(null);
	}
	/**
	 * 
	 * @author MrBig
	 * bei Button gedrückt, übergibt es die Array Possition 
	 */
	public class ButtonLauscher2 implements ActionListener {
		public int i;

		public ButtonLauscher2(int i) {
			// TODO Auto-generated constructor stub
			this.i = i;
		}
		/**
		 * Gibt den gedrückten Wert aus
		 */
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			System.out.println("");
			System.out.println("Button geklickt!"+i);
			TestArray.makePoint(i);
			int temp = TestArray.array[i];
			TestArray.array[temp]=TestArray.array[i];
			
			makeButtons();
			frame.getContentPane().repaint();
			TestArray.testArrayAusgabe();
		}

	}
	
	

}
```


TestArray Klasse:

```
package Test2;

public class TestArray {

	static int arraylaenge;
	private static int lastPossition;
	static int[] array;

	/**
	 * @param args
	 */
	
	public static void testStart() {
		// TODO Auto-generated method stub
		arraylaenge = 30;
		array = new int[arraylaenge];
		//Array zurücksetzen
		resetArray();
		//Startwert bei Possition 0 festlegen
		makeStart(5);
		
		//Testausgaben
		//Possition im Array ausgeben
		System.out.println(lastPossition);
		//Array ausgeben
		testArrayAusgabe();
	}

	static void testArrayAusgabe() {
		// TODO Auto-generated method stub
		int z = 0;
		for(int i =0;i<arraylaenge;i++){
			System.out.print(array[z]);
			z++;
		}

	}

	static void makePoint(int speed) {
		// TODO Schreibt den Zug in das Arrayfeld
		if(checkSpeed(speed)){
			giveSpeed(speed);
		}else{
			System.out.println(false);}
	}

	private static void resetArray() {
		// TODO Überschreibt das Array mit Nullen
		int temp = 0;
		for (int i=0; i < arraylaenge; i++){
			array[temp] = 0;
			temp++;}
	}

	private static void giveSpeed(int speed) {
		// TODO Gibt die Zugweite aus
		int tempNewSpeed = array[lastPossition]+speed;
		array[tempNewSpeed]= speed;
		lastPossition = tempNewSpeed;
	}

	static boolean checkSpeed(int speed) {
		// TODO Prüft ob der Zug möglich ist
		if((speed == array[lastPossition]-1)
				|| (speed == array[lastPossition])
				|| speed == array[lastPossition]+1){
			return true;
		} else{
			return false;
		}
	}

	private static void makeStart(int value) {
		// TODO Setzt Startwerte
		array[0] = value;
		lastPossition = 0;
	}

}
```


----------



## MrBig (28. Feb 2012)

Airborne hat gesagt.:


> Und genau ist das Problem - du erzeugst deine Button in dem JFrame direkt und speicherst auch den Zustand dort. Du solltest
> 
> ```
> frame.getContentPane().repaint();
> ...




Aber wie kann ich denn die Zustand anders speichern?
Meinst du in einem Array?

Wie kann ich denn den Button anders erzeugen?
Ich könnte eine Klasse erstellen und dann darin eine Methode makeButton(),
aber letzendlich ist es doch das selbe, oder?

Wäre echt super nett, wenn du mir nochmal einen Tipp geben könntest.:toll:


----------



## Airborne (28. Feb 2012)

Deine Klasse "TestGUI" ist Einstiegspunkt und direkt eine GUI Komponente.

Wie wäre es denn wenn der Einstiegspunkt eine eigene Klasse ist, die eben die GUI intialisiert und zusätzlich eine Datenhaltung, in der während der Laufzeit alle Werte gespeichert werden.

Dann kannst du die GUI schütteln wie du gerade lustig bist und hast in der anderen Datenhaltungs-Klasse persistent die nötigen Werte.


----------



## MrBig (29. Feb 2012)

Airborne hat gesagt.:


> Deine Klasse "TestGUI" ist Einstiegspunkt und direkt eine GUI Komponente.
> 
> Wie wäre es denn wenn der Einstiegspunkt eine eigene Klasse ist, die eben die GUI intialisiert und zusätzlich eine Datenhaltung, in der während der Laufzeit alle Werte gespeichert werden.
> 
> Dann kannst du die GUI schütteln wie du gerade lustig bist und hast in der anderen Datenhaltungs-Klasse persistent die nötigen Werte.



So habs jetzt getrennt. Aber leider steh ich immernoch auf dem Schlauch :-(
Bei mir wird jetzt zwar die GUI neu gezeichent, aber sie Stimmt leider noch nicht
und viel schlimmer, ich weiss nicht wie ich es schaffen soll, dass ich den nächsten zug machen kann.

Button Klasse

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

public class Button {

	public static void makeStartButton(final int speed) {
		// TODO Auto-generated method stub
		JButton startButton = new JButton("S");
		startButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Array.makeNewPoint(speed);
				Array.arrayAusgabe();
				for(int i = 1; i < speed+1; i++){
					if (Array.array[i] == 0) {
						JButton button = new JButton("?");
						button.setEnabled(false);
						GUI.frame.getContentPane().add(button);
						GUI.frame.pack();
					} else {
						JButton button = new JButton("?");
						button.setEnabled(true);
						button.addActionListener(new ActionListener() {
							public void actionPerformed(ActionEvent arg0) {
								System.out.println("Button pressed");
							}
						});
						GUI.frame.getContentPane().add(button);
						GUI.frame.pack();
					}
	            	}
			}
		});
		GUI.frame.getContentPane().add(startButton);
	}

	public static void makeButton(int speed) {
		for (int i = 1; i < Array.arraylaenge; i++) {
			if (Array.array[i] == 0) {
				JButton button = new JButton("?");
				button.setEnabled(false);
				GUI.frame.getContentPane().add(button);
			} else {
				JButton button = new JButton("?");
				button.setEnabled(true);
				button.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						System.out.println("Button pressed");

					}
				});
				GUI.frame.getContentPane().add(button);
				GUI.frame.pack();
			}
		}

	}

}
```

GUI Klasse

```
import javax.swing.JFrame;

public class GUI {

	static JFrame frame;

	/**
	 * Create the application.
	 */
	public GUI() {
		//Array inizialisieren
		Array.initialize(10);
		//Startwert bei Possition 0 festlegen
		Array.makeStart(4);
		
		Array.arrayAusgabe();
		
		//Gui inizialisieren
		initialize();
		
		makeMap();
	}

	private void makeMap() {
		// TODO Auto-generated method stub
		Button.makeStartButton();
		
		Button.makeButton();
		
		
		frame.pack();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setBounds(100, 100, 450, 300);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
	}

}
```

Array Klasse

```
public class Array {

	static int arraylaenge;
	static int lastPossition;
	static int lastSpeed;
	static int[] array;

	/**
	 * @param args
	 */

	public static void initialize(int laenge) {
		// Initialisiert das Spielbrett
		// Die überlegene Länge wird als Arraylänge festgelegt
		arraylaenge = laenge;
		// Array ertsellen mit der Arraylänge
		array = new int[arraylaenge];
		// Array mit Nullen befüllen
		resetArray();
	}

	static void arrayAusgabe() {
		// TODO Gibt das gesammte Array testweise als String aus
		int z = 0;
		for (int i = 0; i < arraylaenge; i++) {
			System.out.print(array[z]);
			z++;
		}
		System.out.println("");
	}

	private static void resetArray() {
		// TODO Überschreibt das Array mit Nullen
		int temp = 0;
		for (int i = 0; i < arraylaenge; i++) {
			array[temp] = 0;
			temp++;
		}
	}

	static void makeStart(int value) {
		// TODO Setzt Startwerte
		array[0] = value;
		lastPossition = 0;
		lastSpeed = value;
	}

	public static boolean checkSpeed(int speed) {
		// TODO Auto-generated method stub
		if ((speed == lastSpeed) || (speed == (lastSpeed - 1))
				|| (speed == (lastSpeed + 1))) {
			return true;
		} else {
			return false;
		}

	}

	public static void makeNewPoint(int speed) {
		// TODO Auto-generated method stub
		if (lastPossition + speed <= array.length){
		if (checkSpeed(speed) == true) {
			lastSpeed = speed;
			lastPossition = lastPossition + speed; 
			array[lastPossition] = lastSpeed;
		} else {
			System.out.println("Fehler mit der Geschwindigkeit!");
		}
	} else {
		System.out.println("Fehler Array zu klein!");
	}
	}

}
```

und meine Start Klasse

```
import java.awt.EventQueue;

public class Start {
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GUI window = new GUI();
					GUI.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

}
```


----------



## MrBig (29. Feb 2012)

So dank Airborne bin ich jetzt schon ein großes Stück weitergekommen.

Mein Spielfeld funktioniert jetzt von der Logik her nur bei den beschleunigungs Zügen.
Sprich nur wenn ich die Folge 5,6,7,8,9, usw. ziehe.???:L

Aber sobald ich gleiche Züge (4,4,4,usw.) oder bremsende Züge (4,3,2,1) ziehen möchte funktioniert es nicht so gut. ;(

Ich müsste dann die schon vorhandenen Buttons abändern und das klappt nicht.
Wie kann ich die einzelnen Buttons ansteuern?

hier die neuen Klassen:
Start wie gehabt

```
import java.awt.EventQueue;

public class Start {
	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GUI window = new GUI();
					GUI.frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

}
```

GUI

```
package Test1;

import javax.swing.JFrame;

public class GUI {

	static JFrame frame;
	int speed;

	/**
	 * Create the application.
	 */
	public GUI() {
		speed = 4;
		//Array inizialisieren
		Array.initialize(50);
		//Startwert bei Possition 0 festlegen
		Array.makeStart(speed);
		
		Array.arrayAusgabe();
		
		//Gui inizialisieren
		initialize();
		
		makeMap();
	}

	private void makeMap() {
		// TODO Auto-generated method stub
		Button.makeStartButton(speed);
		
		frame.pack();
		frame.repaint();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		frame = new JFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
	}

}
```

Klasse Array

```
package Test1;

public class Array {

	static String Speed;
	static int arraylaenge;
	static int lastPossition;
	static int lastSpeed;
	static int[] array;

	/**
	 * @param args
	 */

	public static void initialize(int laenge) {
		// Initialisiert das Spielbrett
		// Die überlegene Länge wird als Arraylänge festgelegt
		arraylaenge = laenge;
		// Array ertsellen mit der Arraylänge
		array = new int[arraylaenge];
		// Array mit Nullen befüllen
		resetArray();
	}

	static void arrayAusgabe() {
		// TODO Gibt das gesammte Array testweise als String aus
		int z = 0;
		for (int i = 0; i < arraylaenge; i++) {
			System.out.print(array[z]);
			z++;
		}
		System.out.println("");
	}

	private static void resetArray() {
		// TODO Überschreibt das Array mit Nullen
		int temp = 0;
		for (int i = 0; i < arraylaenge; i++) {
			array[temp] = 0;
			temp++;
		}
	}

	static void makeStart(int value) {
		// TODO Setzt Startwerte
		array[0] = value;
		lastPossition = 0;
		lastSpeed = value;
	}

	public static boolean checkSpeed(int speed) {
		// TODO Auto-generated method stub
		if ((speed == lastSpeed) || (speed == (lastSpeed - 1))
				|| (speed == (lastSpeed + 1))) {
			return true;
		} else {
			return false;
		}

	}

	public static void makeNewPoint(int speed) {
		// TODO Auto-generated method stub
		if (lastPossition + speed <= array.length){
		if (checkSpeed(speed) == true) {
			lastSpeed = speed;
			lastPossition = lastPossition + speed;
			array[lastPossition-1] = lastSpeed-1;
			array[lastPossition] = lastSpeed;
			array[lastPossition+1] = lastSpeed+1;
		} else {
			System.out.println("Fehler mit der Geschwindigkeit!");
		}
	} else {
		System.out.println("Fehler Array zu klein!");
	}
	}

}
```

und hier die ganz neue Klasse
Button

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;

public class Button {

	public static void makeStartButton(final int speed) {
		// TODO Auto-generated method stub
		// Das Passiert beim Drücken vom StartButton
		if (Array.lastPossition == 0) {
			final JButton startButton = new JButton(
					Integer.toString(Array.lastSpeed));
			startButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					startButton.setEnabled(false);
					System.out.println("Start button pressed");
					System.out.println(Array.lastPossition);
					System.out.println(Array.lastSpeed);
					Array.makeNewPoint(speed);
					Array.arrayAusgabe();
					for (int i = 1; i < speed + 2; i++) {
						final int temp = i;
						if (Array.array[temp] == 0) {
							JButton button = new JButton("x");
							button.setEnabled(false);
							GUI.frame.getContentPane().add(button);
							GUI.frame.pack();
						} else {
							final JButton button = new JButton(Integer
									.toString(Array.array[temp]));
							button.setEnabled(true);
							button.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent arg0) {
									button.setEnabled(false);
									System.out.println("Other button");
									System.out.println(Array.lastSpeed);
									System.out.println(Integer
											.toString(Array.array[temp]));
									Array.makeNewPoint(temp);
									Array.arrayAusgabe();
									makeStartButton(temp);
								}
							});
							GUI.frame.getContentPane().add(button);
							GUI.frame.pack();
						}
					}
				}
			});
			GUI.frame.getContentPane().add(startButton);
		} else {
			System.out.println("Übergabespeed: " + speed);
			for (int i = 1; i < speed + 2; i++) {
				final int i2 = i;
				if(i < speed-1){
					String text = Integer.toString(i);
					final JButton button = new JButton(text);
					button.setEnabled(false);
					GUI.frame.getContentPane().add(button);
					GUI.frame.pack();
				}
				if(i >= speed-1){
				String text = Integer.toString(i);
				final JButton button = new JButton(text);
				button.addActionListener(new ActionListener() {
					public void actionPerformed(ActionEvent arg0) {
						button.setEnabled(false);
						System.out.println("Other button");
						makeStartButton(i2);
					}
				});
				GUI.frame.getContentPane().add(button);
				GUI.frame.pack();
				}
			}
		}
	}

}
```


----------



## MrBig (5. Mrz 2012)

Ich bitte um Hilfe bei meinem Problem.
Bin für JEDEN Lösungsforschlag offen!


----------

