kleines Kunstprogramm "mkbox" perfektionieren

robochris

Aktives Mitglied
Hallo Zusammen,

im folgenden findet sich ein Programm, das farbige Felder auf den Bildschirm zeichnet und diese nach einem "künstlerischen" Algorithmus verändert.
Ich würde gerne meine Java-Stil perfektionieren, vielleicht könnt Ihr mir zur Struktur meines Programms ein paar Tipps geben. Vielleicht sollte man die Klassen anders aufteilen, um eine bessere Objektorientierung zu erreichen?

Außerdem ist es so, dass nach mehreren Starts des Programms Windows eine Fehlermeldung wirft "Bitte Problembericht senden ..".
Könnte es daran liegen, dass man den JFrame auf irgend eine Art korrekt schließen muss?

Grüße,
robochris

P.s:
Wenn ihr Lust habt, könnt Ihr auch mal versuchen, einen noch schöneren Algortihmus für die Farben der Kacheln zu finden.

In der einer späteren Version möchte ich die Farbe der Kacheln durch anklicken der einzelnen Kacheln verändern können.

Java:
/**

 * mkbox simulator, ein kleines Kunstprogramm

 * zeichnet und verändert farbige Kacheln auf dem Bildschirm

 */

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.Graphics;



import javax.swing.JFrame;

import javax.swing.JPanel;



public class ChMkBox1 extends JFrame{

	private static final long serialVersionUID = 7353L;

	

	JFrame fenster;

	Zeichenflaeche zeichenflaeche;

	int sizeX=510;

	int sizeY=520;

	Kachel[] kachelFeld;

	int anzahlKacheln=64;

	public int kachelCounter=0;

	

	public ChMkBox1(){

		fenster=new JFrame("mkbox");

		fenster.setSize(sizeX,sizeY);

		fenster.setBackground(Color.BLACK);

	

		kachelFeld =new Kachel[anzahlKacheln];

		

		int n;

		for(n=0;n<kachelFeld.length;n++)

			kachelFeld[n]=new Kachel(Color.BLUE);

		

		fenster.setVisible(true);

		zeichenflaeche=new Zeichenflaeche();

		fenster.add(BorderLayout.CENTER,zeichenflaeche);

		fenster.repaint();

		for(n=0;n<64;n++){

			kachelFeld[n].setColor(n*4, 250-n*4, 0);

			fenster.repaint();

			try {Thread.sleep(30);} catch (InterruptedException e){};

		}

		for(n=0;n<64*16;n++){



			kachelFeld[zufall(anzahlKacheln-1)].setColor(zufall(255), zufall(255), zufall(255));

			fenster.repaint();

			try {Thread.sleep(100);} catch (InterruptedException e){};

		}

	}

	public class Kachel{

		int xpos=0;

		int ypos=0;

		int xdim=50;

		int ydim=50;

		int kachelFeldBreite=8;

		int rand=10;

		Color farbe;



		public Kachel(Color neueFarbe){

			farbe=neueFarbe;

			xdim=50;

			ydim=50;

			xpos=rand + (kachelCounter%kachelFeldBreite)*(xdim+rand);

			ypos=rand + (kachelCounter/kachelFeldBreite)*(ydim+rand);;

			kachelCounter++;

		}

		public Kachel(){

			this(Color.BLACK);

		}

		public void setColor(int r,int g, int b){

			if(r>255)r=255;

			if(r<0)r=0;

			

			if(g>255)g=255;

			if(g<0)g=0;



			if(b>255)b=255;

			if(g<0)g=0;



			farbe=new Color(r,g,b);

		}

		public void zeichnen(Graphics g){

			g.setColor(farbe);

			g.fillRect(xpos,ypos,xdim,ydim);

		}

	}

	public class Zeichenflaeche extends JPanel{



		private static final long serialVersionUID = 1L;



		

		public Zeichenflaeche(){

			

		}

		public void paint(Graphics g) 

		{

			for(Kachel k:kachelFeld){

				k.zeichnen(g);

			}

		}	

	}

	public static int zufall(int scale){

		double zufall=Math.random();

		int z=(int)Math.round(zufall*scale);

		return z;

	}

	public static void main(String[] args) 

	{

		//ChMkBox box=new ChMkBox();

		new ChMkBox1();

 

	}

}

/**

 * mkbox simulator, ein kleines Kunstprogramm

 * 

 * @author robo.fr ( Nickname )  

 * @version 0.1

 * @since 11.1.2011

 * Vollgnu-Programm

 * Dieses Programm ist freie Software: jeder darf es basierend auf der 

 * GNU General Public License Version 2 verteilen und modifizieren.

 * 

 * Bitte jeder Autor seinen Nicknamen in den Header eintragen.

 */
 

DerEisteeTrinker

Bekanntes Mitglied
Ich würde die Kommentare für Methoden und Klassen generell über das Element schreiben. Ansonsten gibt es keinen perfekten Code. Du musst das Optimum finden. Sicher kannst du dir ein Grundgerüst an Aufbau aneignen, aber jedes Programm wird anders sein und dann wandelst du deine Arbeitsweise etwas ab.

Damit bleibt nur die Weisheit des Meister Yoda übrig:

"Die Zeit dein Meister wird sein"
 

robochris

Aktives Mitglied
Danke :)
Hast Du eine Idee, warum nach mehrmaligem Starten des Programms die Absturzmeldung von Windows kommt?
Vielleicht kann es ja mal jemand auf seinem Rechner laufen lassen.
 

Landei

Top Contributor
Ich habe die Erfahrung gemacht, dass man im Normalfall (wenn man die vorhandenen JFrame-Eigenschaften nicht erweitern will) nicht von JFrame ableiten sollte, sondern stattdessen Komposition verwenden sollte. Eine gewöhnliche Anwendung "ist" kein Fenster, sie verwendet eines.
 

robochris

Aktives Mitglied
>Erstmal der klasse einen vernünftigen Namen geben und zweitens die 10.000 Leerzeilen löschen,
> man scrollt sich ja tot wenn man deinen Quelltext lesen will.
Die Leerzeichen sind in meiner originalen Source nicht drinnen. Die entstehen irgendwie erst beim "ReinPasten" aus dem Editor.

>..sondern stattdessen Komposition verwenden sollte.
Was meinst Du damit? JPanel in JFrame?

Im Anhang mal die neueste künstlerische Version als gepacktes JAR. Ich finde, es sieht optisch schon mal gar nicht schlecht aus.
 

Anhänge

  • mkbox2.jar
    8,9 KB · Aufrufe: 14

jgh

Top Contributor
dein Problem beim mehrmaligen Starten des Programms entsteht dadurch, dass du das Programm nicht vernünftig beendest.

Wenn du dir deinen Taskmanager anschaust, dann wirst du erkennen...entsprechend der Anzahl deiner bisherigen Startversuche, werden dort x-mal die javaw.exe angeführt sein.

Java:
	fenster.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
				
			}
			
		});

jetzt wird das Programm auch wirklich beendet, wenn das Fenster geschlossen wird.
 

robochris

Aktives Mitglied
@Quaxli
Habe gerade Deinen Anhang "Tutorial zur Spieleprogrammierung" runter geladen. Das PDF lässt sich nicht entpacken, weil der Umlaut "ü" im Titel "Tutorial für Java-Spiele.pdf" verwendet wird.
 

tuttle64

Bekanntes Mitglied
Hallo Zusammen,...

Unschön ist die Deklaration von kachelCounter in der Klasse ChMkBox1 um sie dann in der Klasse Kachel zu benutzen. Besser ist es die Variable kachelCounter als static in der Klasse Kachel zu deklarieren. Zudem ist die Methode paintComponent in der Klasse Zeichenflaeche besser aufgehoben. Damit kann man sich die Methode zeichnen in der Klasse Kachel sowie die unnötigen paint Aufrufe ersparen.
 

robochris

Aktives Mitglied
Danke tutle64, ich werde mal versuchen, das in den nächsten Versionen zu ändern.
Mir fallen ständig neue Dinge ein, die ich noch ins Programm einbauen könnte. Aus diesem Grunde komme ich so wenig dazu, die Struktur aufzuräumen und sauber zu halten, weil es halt faszinierend ist, weiter zu programmieren und die neuen Effekte auszuprobieren.

In der Version3 habe ich zweidimensionale Filter eingebaut:
http://www.hobby-roboter.de/forum/download/file.php?id=109
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Kleines Java-Projekt; Kassenprogramm Java Basics - Anfänger-Themen 7
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
E Kleines Java-Projekt für Anfänger Java Basics - Anfänger-Themen 10
Koookie Kleines Frage - Antwort Programm (Anfänger) Java Basics - Anfänger-Themen 5
K Erstes kleines Spieleprojekt - Java GUI in HTML einbinden Java Basics - Anfänger-Themen 3
R Kleines Java Spiel funktioniert nicht. Java Basics - Anfänger-Themen 2
J Kleines Rechenprogramm Java Basics - Anfänger-Themen 13
G Erste Schritte Suche Java Programmierer für kleines Projekt Java Basics - Anfänger-Themen 1
Z Erste Schritte Kleines 2D. Spiel Objekt Bewegung funktioniert nicht Java Basics - Anfänger-Themen 2
B Input/Output Kleines Netzwerkproblem Java Basics - Anfänger-Themen 2
J OOP Kleines Schülerverwaltungsprogramm Java Basics - Anfänger-Themen 9
F Methoden Kleines Problem mit meinem Glücksrad... Java Basics - Anfänger-Themen 9
N ein kleines GUI mit einem hauch XML Java Basics - Anfänger-Themen 5
K Kleines Spiel auf Java programmieren Java Basics - Anfänger-Themen 2
T erstes kleines Programm Java Basics - Anfänger-Themen 17
S Kleines Quiz Programm Java Basics - Anfänger-Themen 4
C Hilfe - Kleines Programm macht mir Schwierigkeiten Java Basics - Anfänger-Themen 2
A Kleines Abbruch-Problem mit Do-While-Schleife Java Basics - Anfänger-Themen 4
K Ein kleines Rätsel Java Basics - Anfänger-Themen 2
E Erstes "kleines" Programm Java Basics - Anfänger-Themen 5
D kleines problem bei system.out.println schreibweise Java Basics - Anfänger-Themen 6
C Kleines Problem mit System.out.print Java Basics - Anfänger-Themen 1
A Best Practice Ideen für kleines Anfängerschulprojekt gesucht Java Basics - Anfänger-Themen 4
J kleines Karteikartenprogramm Java Basics - Anfänger-Themen 3
S Kleines Zeichen berechnen Java Basics - Anfänger-Themen 5
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
E Array zu Liste - kleines Problem Java Basics - Anfänger-Themen 6
fLooojava Passwort generieren - kleines Programm Java Basics - Anfänger-Themen 15
H Kleines Prob Java Basics - Anfänger-Themen 5
J Vererbung Kleines Problem bei Vererbung! Java Basics - Anfänger-Themen 2
O Debug-Funktion mit Slick - Kleines Problem Java Basics - Anfänger-Themen 5
J Flaechen vergleichen/kleines Fehler? Java Basics - Anfänger-Themen 23
H Kleines Problem bei den Schleifen Java Basics - Anfänger-Themen 5
M Kleines Problem mit der Rekursion Java Basics - Anfänger-Themen 20
K Kleines Projekt Java Basics - Anfänger-Themen 2
T Kleines Game mit Kollision Java Basics - Anfänger-Themen 2
J Mal wieder ein kleines Toleranzproblem Java Basics - Anfänger-Themen 20
H kleines Spiel [Processing] Java Basics - Anfänger-Themen 7
T kleines problem mit switch case Java Basics - Anfänger-Themen 11
R Kleines Programm, benötige Hilfe! Java Basics - Anfänger-Themen 6
V Schon wieder ein kleines problem...dieses mal mit do-while loop Java Basics - Anfänger-Themen 9
R Login mit Datenbankabfrage: Kleines Problem! Java Basics - Anfänger-Themen 6
K Kleines Anfänger Problem bei der Abfrage Java Basics - Anfänger-Themen 8
X Kleines JMenuBar Problem Java Basics - Anfänger-Themen 8
D Kleines Abfrageproblem Java Basics - Anfänger-Themen 3
K kleines Rekursionsproblem Java Basics - Anfänger-Themen 7
P RSA Verschlüsselung kleines Problem Java Basics - Anfänger-Themen 5
B Suche kleines Java-Applet Java Basics - Anfänger-Themen 6
P Kleines Problemm mit einer NullPointerException Java Basics - Anfänger-Themen 2
P wahrscheinlich ein kleines Problem Java Basics - Anfänger-Themen 7
P Kleines Projekt -> Große Überlegungen Java Basics - Anfänger-Themen 2
U Bitte Helfen kleines Spiel Java Basics - Anfänger-Themen 9
K Kleines Spiel / Daten speichern Java Basics - Anfänger-Themen 8
T Kleines Spiel realisieren - wie? Java Basics - Anfänger-Themen 6
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
K kleines Array-Problem Java Basics - Anfänger-Themen 6
C Kleines 2D Spiel. Problem. Java Basics - Anfänger-Themen 5
T Kleines Verständnissproblem mit Regex Java Basics - Anfänger-Themen 4
U Kleines Problem mit Konstruktor^^ Java Basics - Anfänger-Themen 7
S Kleines Kartenspiel mit Java Java Basics - Anfänger-Themen 2
D kleines Eclipse-Problem ! Java Basics - Anfänger-Themen 2
I Kleines Program, fehler? Java Basics - Anfänger-Themen 2
S kleines Würfelspiel Java Basics - Anfänger-Themen 10
0 Frage zu Architektur: Server eines kleines Spiels Java Basics - Anfänger-Themen 4
F kleines Programm für ungerade oder gerade Zahl. Java Basics - Anfänger-Themen 18
C kleines Menü erzeugen und anzeigen Java Basics - Anfänger-Themen 11
S Kleines TickTackTou Java Basics - Anfänger-Themen 10
O Kleines Problem mit Konstruktor mit Parametern aus generischer Klasse...oder so ;) Java Basics - Anfänger-Themen 2
M Kleines Problem mit Threads (synchronized) Java Basics - Anfänger-Themen 3
J Java, kleines denkproblem. :) Java Basics - Anfänger-Themen 4
N Kleines Problemchen mit ButtonGroup Java Basics - Anfänger-Themen 2
W ein kleines Projekt! Aber wie beginnen Java Basics - Anfänger-Themen 4
S Kleines Problem... NaN, Infinity? Java Basics - Anfänger-Themen 9
B Drag and Drop fähige Trackliste..nurnoch ein kleines Problem Java Basics - Anfänger-Themen 16
G Kleines Problem mit File Java Basics - Anfänger-Themen 7
O Neuen Blackberry 8800 oder Curve gegen kleines Programm Java Basics - Anfänger-Themen 9
Z kleines projekt Java Basics - Anfänger-Themen 3
G ein kleines java prog - hat aber einen fehler-bitte um hilfe Java Basics - Anfänger-Themen 5
GambaJo Brauche Bewertung + Tipps für mein kleines Projekt Java Basics - Anfänger-Themen 4
N Nur ein kleines Installationsproblem . Java Basics - Anfänger-Themen 5
G Kleines Problem mit Nimmspiel Java Basics - Anfänger-Themen 8
U kleines problem bei ner aufgabe :( Java Basics - Anfänger-Themen 8
G Kleines Problem mit Array Java Basics - Anfänger-Themen 14
S Kleines Programm mit ArrayList Java Basics - Anfänger-Themen 7
M Kleines Programm Java Basics - Anfänger-Themen 5
M DBCP - Kleines Beispiel Java Basics - Anfänger-Themen 3
R Unicode-Wert in Binär und Dezimal umformen - kleines Problem Java Basics - Anfänger-Themen 1
G Kleines Problem Java Basics - Anfänger-Themen 3
D kleines script abhaengig von Ordner Bilder kopieren Java Basics - Anfänger-Themen 11
G Kleines Grundsatzproblem Java Basics - Anfänger-Themen 5
S Ich habe ein kleines Problem mit meinem Übungsprogramm Java Basics - Anfänger-Themen 7
S Hab ein kleines Problem :) Java Basics - Anfänger-Themen 4
K kleines bild ausgeben Java Basics - Anfänger-Themen 4
D noch ein kleines Problem Java Basics - Anfänger-Themen 4
M kleines generics problem Java Basics - Anfänger-Themen 15
B Kleines? Jedenfalls Problem mit Borland-Together! Java Basics - Anfänger-Themen 4
M kleines Java Programm (Verwaltung) Java Basics - Anfänger-Themen 16
K Kleines Programm zur Stapelverarbeitung schreiben, aber wie? Java Basics - Anfänger-Themen 7
D Kleines Problem mit JDBC Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben