Swing Hangman: Schrittweises Zeichnen

Hei,

ich würde gerne meinen Hangman schrittweise zeichnen lassen. Wie er gesamt aussehen soll hab ich bereits. Ich finde nur nicht raus, wie ich ihn schrittweise zeichnen lassen könnte. Vielen Dank für die Hilfe, bin noch sehr unerfahren auf dem Gebiet.

So soll er gezeichnet werden:
Java:
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class DrawPanel extends JPanel{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	

	
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		super.setBackground(new Color(250,250,250));
		super.setLocation(40, 10);
		super.setSize(650, 400);
		g.setColor(new Color(200));
		//Hügel
		g.drawOval(170, 340, 300, 200);
		//Stamm
		g.drawLine(320,100,320,340);
		//Querbalken
		g.drawLine(320,100,500,100);
		//Stütze
		g.drawLine(320,150,400,100);
		//Seil
		g.drawLine(500, 100, 500, 150);
		//Kopf
		g.drawOval(480, 150, 40, 40);
		//Augen
		g.drawOval(487,165,6,5);
		g.drawOval(507,165,6,5);
		//Nase
		g.drawLine(500, 170, 500, 177);
		//Mund
		//Evtl. per Polyline aufhübschen
		g.drawLine(490, 180, 510, 180);
		//Körper
		g.drawLine(500,190,500,260);
		//Arm links
		g.drawLine(500,190,465,210);
		//Arm rechts
		g.drawLine(500,190,545,200);
		//Bein links
		g.drawLine(500,260,465,300);
		//Bein rechts
		g.drawLine(500,260,545,300);
		//GameOver
		g.setColor(new Color(100,100,100));
		g.drawString("GAME OVER", 325, 200);
	}
	
	
}

Hierdrüber soll dies schrittweise geschehen.
Java:
public class Zeichnen {

	public static void zeichne(int impint){			//Zeichenoperationen noch zu implementieren
		int schritt=impint;
		switch (schritt) {
		case 1://Zeichne Hügel	
			break;
		case 2://Zeichne Stamm
			break;
		case 3://Zeichne Querbalken	
			break;
		case 4://Stütze
			break;
		case 5://Seil
			break;
		case 6://Kopf
			break;
		case 7://Körper
			break;
		case 8://Arm links
			break;
		case 9://Arm rechts
			break;
		case 10://Bein links
			break;
		case 11://Bein rechts
			break;
			
		default:
			break;
		}
		
		
	}

Ich bräuchte also eine Methode, der ich am besten direkt die zu zeichnenden Operationen übergeben kann.
 
Zuerst, verschiebe mal die Zeilen
Java:
        super.paintComponent(g);
        super.setLocation(40, 10);
        super.setSize(650, 400);
in einen Konstruktor für die Klasse. Sonst rufst du die ja bei jedem paintComponent auf.

Wenn ich dich wäre, würde ich einen int definieren, der angibt, wie viele Körperteile gezeichnet werden sollen. In der paintComponent würdest du dann genau die Teile zeichnen, die gezeichnet werden müssen.
 
Das
Java:
super.setBackground(new Color(250,250,250));
super.setLocation(40, 10);
super.setSize(650, 400);
sollte aus der paintComponent raus, hat da eigentlich nichts verloren.

Man könnte die einzelnen Elemente als Objekte in einer Liste speichern, denn aktuellen Status speichert man in einer Zählvariablen von -1 beginnend und in der paint... malt man dann in einer for Schleife (0 bis Status) die einzelnen Elemente
 
Danke für die Antworten, werde mich morgen noch mal drum kümmern. Hatte bisher nur die Methode aus "Java ist auch eine Insel übernommen". Wurde bisher allerdings nicht sonderlich schlau aus dem Konzept zum zeichnen. Morgen dann mehr 😉

Edit: es lässt einen ja doch nich in ruhe 😛

Also ich habe mir mehrere Sachen gedacht, wusste aber nicht wie ich sie realisiere.

1. Wollte paintComponent(Graphics g, int e) erstellen.
in dieser Methode wollte ich if-anweisungen bzw. eine switch case anweisugn machen. Je nachdem was für ein int übergeben wird, sollte dann die jeweilige Zeichenoperation gestartet werden. Allerdings weiß ich nicht, wie ich der Methode ein solches Graphics Objekt liefere. Da bin ich also gescheitert.

2. Dachte ich mit, dass man evtl. einer Methode die Befehle für das zeichnen direkt übergeben kann. Allerdings kenne ich mich da noch zu wenig aus.

So long 😉
 
Zuletzt bearbeitet:
Falls du es so machen willst, darfst du aber nicht die super.paintComponent Methode aufrufen.

Ich würde dir empfehlen für jede einzelne Komponente (Hügel, Seil usw) eine eigene Klasse zu erstellen, die eine Schnittstelle IHangmanObject (Beispielname ^^) implementiert.

Dann kannste eine
Java:
 ArrayList<IHangmanObject> arr = new ArrayList<>();
erstellen.

Die Schnittstelle sollte eine Methode drawMe(Graphics2D bzw. Graphics g) beinhalten.

In deiner paintComponent Methode deiner Zeichenfläche kannste dann bei jedem repaint jedes Objekt, das in deiner ArraylList enthalten ist, zeichnen.

Java:
for(int i = 0; i < arr.length; i++){
arr.get(i).drawMe(g);
}

Natürlich brauchste noch eine Methode, um die einzelnen Objekte deiner ArrayList zu adden.

Java:
public void addHangmanObject(IHangmanObject obj){
arr.add(obj);
}

Ich hoffe ich konnte dir helfen 🙂
 

Zurück
Oben