# Spielautomat



## Crix (2. Okt 2013)

Also ich hab einen Spielautomat versucht zu programmieren der funktioniert so es werde 3 Zahlen generiert falls die 3 Zahlen gleich sind hat man gewonnen. Graphisch wollte ich das so umsetzen das für jede Zahl ein bestimmter Kreis in einer Farbe gezeichnet wird allerdings funktioniert das ganze nicht so richtig.

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

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



public class zufall extends JFrame implements ActionListener {
	JFrame jf = new JFrame();
	static int x,y,z;
	JButton k = new JButton("Neues Spiel!");
	public zufall() {
		jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
		jf.setSize(400,400);
		jf.setLocationRelativeTo(null);
		jf.setVisible(true);
		jf.setLayout(null);
		
		JLabel q = new JLabel();
		if( x == y && y == z )
			q.setText("Großer Gewinn!");
		else
			if ( y == z || z == x || x == y)
				q.setText("Kleiner Gewinn!");
			else			
				q.setText("Kein Gewinn");
		
		k.setSize(150,60);
		k.setLocation(0,310);
		k.addActionListener(this);
		add(k);
	}
	
	public static void main(String args[]){
		zufall z1 = new zufall();
		z = (int) (Math.random()*3+1);
		x = (int) (Math.random()*3+1);
		y = (int) (Math.random()*3+1);
	
	}
	public void actionPerformed(ActionEvent e) {
		k.repaint();
		
	}
	public void paintComponent(Graphics stift){
		jf.paintComponents(stift);
		
 		switch(z)
 		{
 			case(1): 
 				stift.setColor(Color.blue);
				stift.fillOval(120, 50, 50, 50);
 				break;
 			case(2): 
 				stift.setColor(Color.green);
 				stift.fillOval(20, 50, 50, 50);
 				break;
 			case(3): 
 				stift.setColor(Color.red);
 				stift.fillOval(20, 50, 50, 50);
 				break;
 		}
 		switch(x)
 		{
 			case(1): 
 				stift.setColor(Color.blue);
 				stift.fillOval(70, 50, 50, 50);
 				break;
 			case(2): 
 				stift.setColor(Color.green);
 				stift.fillOval(70, 50, 50, 50);
 				break;
 			case(3): 
 				stift.setColor(Color.red);
 				stift.fillOval(70, 50, 50, 50);
 				break;
 		}
 		switch(y)
 		{
 			case(1): 
 				stift.setColor(Color.blue);
 				stift.fillOval(120, 50, 50, 50);
 				break;
 			case(2): 
 				stift.setColor(Color.green);
 				stift.fillOval(120, 50, 50, 50);
 				break;
 			case(3): 
 				stift.setColor(Color.red);
 				stift.fillOval(120, 50, 50, 50);
 				break;
 		}
	}
}
```


----------



## stg (2. Okt 2013)

Crix hat gesagt.:


> funktioniert (..) nicht so richtig.



... ist nicht gerade eine hilfreiche Fehlerbeschreibung! :autsch:


----------



## Crix (2. Okt 2013)

Also das Problem ist im Moment nichts auf dem JFrame angezeigt wird weder die Kreise noch der Button oder die Texte.


----------



## XPrototypeX (2. Okt 2013)

Du solltest grundsätzlich vom JPanel erben und dort Zeichnen. 
Dann noch paintComponents() Überschreiben und im Kopf der Methode super.paitComponents(); schreiben.


----------



## Crix (2. Okt 2013)

Tut mir leid wenn die Frage dumm erscheint. Aber was genau bedeutet "erben" in dem Zusammenhang?
Könntest du die genauen Änderungen bitte in meinen Code übernehmen und posten das wäre sehr nett.


----------



## XPrototypeX (2. Okt 2013)

...
Before du irgendwo Code kopierst, solltest du ihn auch verstehen. 


```
public class zufall extends JFrame implements ActionListener
```

Du extends daher erweiterst JFrame. Anders Ausgedrückt die Klasse (übrigens Klassennamen groß, Methoden sowie variablen klein) Zufall erbt von der Klasse JFrame. Du kannst nun Methoden der vererbten Klasse erweitern/ überschreiben.


----------



## Crix (2. Okt 2013)

Ich hab den Code nicht kopiert ich hab ihn selber geschrieben.
Aber könntest du trotzdem bitte meinen Code mit deinen Vorschlägen erweitern.


----------



## XPrototypeX (2. Okt 2013)

Dann weißt du ja jetzt wie es funktioniert.



> Du solltest grundsätzlich vom JPanel erben und dort Zeichnen.
> Dann noch paintComponents() Überschreiben und im Kopf der Methode super.paitComponents(); schreiben.


----------



## Crix (2. Okt 2013)

Nein weil ich nicht genau verstehe was du meinst da ich noch Java-Anfänger bin wie auch auf meinem Profil stehen sollte.


----------



## MrClave (2. Okt 2013)

Erben bedeutet immer "extends lalilu", bzw. "implements lalilu".

Du solltest dir lieber erst mal OOP angucken, bevor du solche Sachen machst.

Dein Fehler wird daran liegen, dass du von JFrame erbst und deine Klasse somit schon ein JFrame ist, du aber zusätzlich noch ein JFrame Memberfield hast und dich dann dazu entschieden hast mit beiden mal so und mal so zu arbeiten.

Von Zeile 17 bis 21 arbeitest du mit deinem Member, bei Zeile 35 wiederrum mit der geerbeten Klasse.
Ist klar, dass da nichts bei raus kommt.

Hinsetzen und lesen.
Es ist sinnlos sich an Programme zu wagen, mit Themen, von denen man nichts weiß.
Ein Projekt wie deines ist zwar lustig, aber viel lustiger ist es, wenn man ein großen Werkzeugkoffer hat, mit Tools, die einem alles erleichtern.


----------



## Crix (2. Okt 2013)

Ok danke dann werde ich wohl in meinem Buch weiter lesen müssen. Ich dachte halt ich könnte das schon da ich das selbe Programm schon in einem Applet geschrieben habe und da hat es problemlos funktioniert


----------

