# Nur 1 Gebäude pro Feld



## Krypthor (11. Jan 2012)

Moin,
Ich versuche mich gerade an einem Strategiespiel, bekomm es aber nicht hin, dass wenn auf einem Feld ein Gebäude gesetzt wurde, man nicht nochmal ein Gebäude auf das Feld setzen kann.

Hier ist die Map:

```
public class Map extends JPanel implements ActionListener{
Player p, pp;
Legion l;
Timer time, time2, time3;
char[][] array;
Gebäude geb;
int m, n, p1, p2, pp1, pp2, a, x, y, wahl, j, j2, holzhaus, steinb, haus, c, s, c2, wahl2;
static ArrayList legion, legion2, gebäude, gebäude2, wohnhaus1, holzfällerhütte1, steinbruch1, kaserne1;
String p1holz, p2holz;
boolean laufen;
String dateiname = "speichern";
ImageIcon i2 = new ImageIcon("Boden.png");
Image img2 = i2.getImage();
ImageIcon wand1 = new ImageIcon("Wand.png");
Image wand = wand1.getImage();
ImageIcon ff = new ImageIcon("Fahne4.png");
Image f2 = ff.getImage();
ImageIcon f = new ImageIcon("Fahne3.png");
Image f1 = f.getImage();
ImageIcon w1 = new ImageIcon("Wald.png");
Image w = w1.getImage();
ImageIcon u1 = new ImageIcon("Unten.png");
Image u = u1.getImage();
ImageIcon ka = new ImageIcon("Kaserne.png");
Image kas = ka.getImage();
ImageIcon ha = new ImageIcon("Haus.png");
Image haus1 = ha.getImage();
ImageIcon hohü = new ImageIcon("Holzh.png");
Image holzhütte = hohü.getImage();
ImageIcon stein1 = new ImageIcon("Steinbruch.png");
Image steinbruch = stein1.getImage();
ImageIcon wa = new ImageIcon("wahl.png");
Image wahlimg = wa.getImage();
ImageIcon wak = new ImageIcon("wahlk.png");
Image wahlkimg = wak.getImage();


	public Map(){
		time = new Timer(10, this); 
		time.start();
		p = new Player();
		pp = new Player();
		addKeyListener(new AL());
		addKeyListener(new AL2());
		setFocusable(true);
		holzfällerhütte1 = new ArrayList();
		wohnhaus1 = new ArrayList();
		steinbruch1 = new ArrayList();
		kaserne1 = new ArrayList();
		laufen = false;
		wahl = 1;
		wahl2 = 1;
		p1 = 2;
		p2 = 5;
		pp1 = 14;
		pp2 = 5;
		a = 50;
		j = 100;
		j2 = 100;
		c = 252;
		c2 = 672;
		Timer time2 = new Timer(8000, new actionListener());
		time2.setInitialDelay(5000);
		time2.start();
		Timer time3 = new Timer(300, new actionListener2());
		time3.start();
	}
	
	public char[][] initArray(){
		char[][] ch = new char[17][17];
		ch[0][0] = '-';ch[1][0] = '-';ch[2][0] = '-';ch[3][0] = '-';ch[4][0] = '-';ch[5][0] = '-';ch[6][0] = '-';ch[7][0] = '-';ch[8][0] = '-';ch[9][0] = '-';ch[10][0] = '-';ch[11][0] = '-';ch[12][0] = '-';ch[13][0] = '-';ch[14][0] = '-';ch[15][0] = '-';ch[16][0] = '-';
		ch[0][1] = '-';ch[1][1] = '-';ch[2][1] = '-';ch[3][1] = ' ';ch[4][1] = ' ';ch[5][1] = ' ';ch[6][1] = '-';ch[7][1] = '-';ch[8][1] = '-';ch[9][1] = ' ';ch[10][1] = ' ';ch[11][1] = ' ';ch[12][1] = ' ';ch[13][1] = '-';ch[14][1] = '-';ch[15][1] = '-';ch[16][1] = '-';
		ch[0][2] = '-';ch[1][2] = '-';ch[2][2] = ' ';ch[3][2] = ' ';ch[4][2] = ' ';ch[5][2] = ' ';ch[6][2] = ' ';ch[7][2] = '-';ch[8][2] = ' ';ch[9][2] = ' ';ch[10][2] = ' ';ch[11][2] = ' ';ch[12][2] = ' ';ch[13][2] = ' ';ch[14][2] = '-';ch[15][2] = '-';ch[16][2] = '-';
		ch[0][3] = '-';ch[1][3] = ' ';ch[2][3] = ' ';ch[3][3] = ' ';ch[4][3] = ' ';ch[5][3] = ' ';ch[6][3] = ' ';ch[7][3] = ' ';ch[8][3] = ' ';ch[9][3] = ' ';ch[10][3] = ' ';ch[11][3] = ' ';ch[12][3] = ' ';ch[13][3] = ' ';ch[14][3] = ' ';ch[15][3] = '-';ch[16][3] = '-';
		ch[0][4] = '-';ch[1][4] = 'b';ch[2][4] = ' ';ch[3][4] = ' ';ch[4][4] = ' ';ch[5][4] = ' ';ch[6][4] = ' ';ch[7][4] = ' ';ch[8][4] = 'w';ch[9][4] = 'w';ch[10][4] = ' ';ch[11][4] = ' ';ch[12][4] = ' ';ch[13][4] = ' ';ch[14][4] = ' ';ch[15][4] = ' ';ch[16][4] = '-';
		ch[0][5] = '-';ch[1][5] = ' ';ch[2][5] = ' ';ch[3][5] = ' ';ch[4][5] = ' ';ch[5][5] = ' ';ch[6][5] = 'w';ch[7][5] = 'w';ch[8][5] = 'w';ch[9][5] = 'w';ch[10][5] = 'w';ch[11][5] = ' ';ch[12][5] = ' ';ch[13][5] = ' ';ch[14][5] = ' ';ch[15][5] = ' ';ch[16][5] = '-';
		ch[0][6] = '-';ch[1][6] = ' ';ch[2][6] = ' ';ch[3][6] = ' ';ch[4][6] = ' ';ch[5][6] = ' ';ch[6][6] = ' ';ch[7][6] = 'w';ch[8][6] = 'w';ch[9][6] = ' ';ch[10][6] = ' ';ch[11][6] = ' ';ch[12][6] = ' ';ch[13][6] = ' ';ch[14][6] = ' ';ch[15][6] = 'a';ch[16][6] = '-';
		ch[0][7] = '-';ch[1][7] = '-';ch[2][7] = ' ';ch[3][7] = ' ';ch[4][7] = ' ';ch[5][7] = ' ';ch[6][7] = ' ';ch[7][7] = ' ';ch[8][7] = ' ';ch[9][7] = ' ';ch[10][7] = ' ';ch[11][7] = ' ';ch[12][7] = ' ';ch[13][7] = ' ';ch[14][7] = ' ';ch[15][7] = ' ';ch[16][7] = '-';
		ch[0][8] = '-';ch[1][8] = '-';ch[2][8] = '-';ch[3][8] = ' ';ch[4][8] = ' ';ch[5][8] = ' ';ch[6][8] = ' ';ch[7][8] = ' ';ch[8][8] = ' ';ch[9][8] = '-';ch[10][8] = ' ';ch[11][8] = ' ';ch[12][8] = ' ';ch[13][8] = ' ';ch[14][8] = ' ';ch[15][8] = '-';ch[16][8] = '-';
		ch[0][9] = '-';ch[1][9] = '-';ch[2][9] = '-';ch[3][9] = '-';ch[4][9] = ' ';ch[5][9] = ' ';ch[6][9] = ' ';ch[7][9] = ' ';ch[8][9] = '-';ch[9][9] = '-';ch[10][9] = '-';ch[11][9] = ' ';ch[12][9] = ' ';ch[13][9] = ' ';ch[14][9] = '-';ch[15][9] = '-';ch[16][9] = '-';
		ch[0][10] = '-';ch[1][10] = '-';ch[2][10] = '-';ch[3][10] = '-';ch[4][10] = '-';ch[5][10] = '-';ch[6][10] = '-';ch[7][10] = '-';ch[8][10] = '-';ch[9][10] = '-';ch[10][10] = '-';ch[11][10] = '-';ch[12][10] = '-';ch[13][10] = '-';ch[14][10] = '-';ch[15][10] = '-';ch[16][10] = '-';
		return ch;
	}
	
	public void actionPerformed(ActionEvent e) {
		repaint();
		playerMove();
		playerMove2();
		checkCollisions();
	}
	
	public void playerMove(){
		if(p.getRX() == -1 && array[p1 - 1][p2] != '-' && p.bewegen == true && array[p1 - 1][p2] != 'w'){
			p1 = p1 - 1;
			p.bewegen = false;
		}
		if(p.getRX() == +1 && array[p1 + 1][p2] != '-' && p.bewegen == true && array[p1 + 1][p2] != 'w'){
			p1 = p1 + 1;
			p.bewegen = false;
		}
		if(p.getRY() == -1 && array[p1][p2 - 1] != '-' && p.bewegen == true && array[p1][p2 - 1] != 'w'){
			p2 = p2 - 1;
			p.bewegen = false;
		}
		if(p.getRY() == +1 && array[p1][p2 + 1] != '-' && p.bewegen == true && array[p1][p2 + 1] != 'w'){
			p2 = p2 + 1;
			p.bewegen = false;
		}
	}
	public void playerMove2(){
		if(pp.getRX() == -1 && array[pp1 - 1][pp2] != '-' && pp.bewegen == true && array[pp1 - 1][pp2] != 'w'){
			pp1 = pp1 - 1;
			pp.bewegen = false;
		}
		if(pp.getRX() == +1 && array[pp1 + 1][pp2] != '-' && pp.bewegen == true && array[pp1 + 1][pp2] != 'w'){
			pp1 = pp1 + 1;
			pp.bewegen = false;
		}
		if(pp.getRY() == -1 && array[pp1][pp2 - 1] != '-' && pp.bewegen == true && array[pp1][pp2 - 1] != 'w'){
			pp2 = pp2 - 1;
			pp.bewegen = false;
		}
		if(pp.getRY() == +1 && array[pp1][pp2 + 1] != '-' && pp.bewegen == true && array[pp1][pp2 + 1] != 'w'){
			pp2 = pp2 + 1;
			pp.bewegen = false;
		}
	}
	
	public void checkCollisions(){
	    Integer i = new Integer(j);
	    p1holz = i.toString();
	    Integer i2 = new Integer(j2);
	    p2holz = i2.toString();
		if(p.bau == true){
			if(wahl == 1 && j >= 20){
				neueHolzfällerhütte1();
				j = j - 20;
				holzhaus = holzhaus + 1;
				p.bau = false;
			}
			if(wahl == 2 && j >= 20){
				neuesWohnhaus1();
				j = j - 20;
				haus = haus + 1;
				p.bau = false;
			}
			if(wahl == 3 && j >= 20){
				neuerSteinbruch1();
				j = j - 20;
				p.bau = false;
			}
			if(wahl == 4 && j >= 20){
				neueKaserne1();
				j = j - 20;
				p.bau = false;
			}
		}
	}

	public void neueHolzfällerhütte1(){
		Gebäude g = new Gebäude(p1, p2);
		holzfällerhütte1.add(g);
	}
	public void neuesWohnhaus1(){
		Gebäude g = new Gebäude(p1, p2);
		wohnhaus1.add(g);
	}
	public void neuerSteinbruch1(){
		Gebäude g = new Gebäude(p1, p2);
		steinbruch1.add(g);
	}
	public void neueKaserne1(){
		Gebäude g = new Gebäude(p1, p2);
		kaserne1.add(g);
	}

	class actionListener implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if(holzhaus >= 1){
				j = j + holzhaus;
			}
			if(steinb >= 1){
				s = s + steinb;
			}
		}
	}

	class actionListener2 implements ActionListener {
		public void actionPerformed(ActionEvent e) {
			if(laufen == true){
				if(pp1 != p1){
					if(pp1 > p1 && array[pp1 - 1][pp2] != 'w'){
						pp1 = pp1 - 1;
					}else if(pp1 < p1 && array[pp1 + 1][pp2] != 'w'){
						pp1 = pp1 + 1;
					}
				}
				if(pp2 != p2){
					if(pp2 > p2){
						pp2 = pp2 - 1;
					}else if(pp2 < p2){
						pp2 = pp2 + 1;
					}
				}
				if(pp1 == p1 && pp2 == p2){
					laufen = false;
				}
			}
		}
	}
	
	public int getP1(){
		return p1;
	}
	public int getP2(){
		return p2;
	}
	public int getWahl(){
		return wahl;
	}
	public void paint(Graphics g) {
		
		super.paint(g);
			Graphics2D g2d = (Graphics2D) g;
			array = initArray();
			for(int n=0 ; n < 17; n++){
				for(int m=0; m < 17; m++){
					
					if(array[m][n] == '-'){
						g2d.drawImage(wand, a*m, a*n, null);
					}
					if(array[m][n] == ' '){
						g2d.drawImage(img2, a*m, a*n, null);
					}
					if(array[m][n] == 'a'){
						g2d.drawImage(f1, a*m, a*n, null);
					}
					if(array[m][n] == 'b'){
						g2d.drawImage(f2, a*m, a*n, null);
					}
					if(array[m][n] == 'w'){
						g2d.drawImage(w, a*m, a*n, null);
					}
				}
			}
			g2d.drawImage(p.getImage(), a*p1, a*p2, null);
			g2d.drawImage(pp.getImage(), a*pp1, a*pp2, null);
			
			for (int w = 0; w < holzfällerhütte1.size(); w++){
				Gebäude g1 = (Gebäude) holzfällerhütte1.get(w);
				g2d.drawImage(holzhütte, a*g1.getX(), a*g1.getY(), null);
			}
			for (int w = 0; w < wohnhaus1.size(); w++){
				Gebäude g1 = (Gebäude) wohnhaus1.get(w);
					g2d.drawImage(haus1, a*g1.getX(), a*g1.getY(), null);
			}
			for (int w = 0; w < steinbruch1.size(); w++){
				Gebäude g1 = (Gebäude) steinbruch1.get(w);
					g2d.drawImage(steinbruch, a*g1.getX(), a*g1.getY(), null);
			}
			for (int w = 0; w < kaserne1.size(); w++){
				Gebäude g1 = (Gebäude) kaserne1.get(w);
					g2d.drawImage(kas, a*g1.getX(), a*g1.getY(), null);
			}
			g2d.drawImage(u, 0, 550, null);
			g2d.drawImage(wahlimg, 250, 555, null);
			g2d.drawImage(wahlimg, 670, 555, null);
			g2d.drawImage(wahlkimg, c, 555, null);
			g2d.drawImage(wahlkimg, c2, 555, null);
				Font font1 = new Font("serif", Font.PLAIN, 20);
				g.setFont(font1);
				g.setColor(Color.BLACK);
			g.drawString(p1holz, 50, 580);
			g.drawString(p2holz, 470, 580);
	}
	
	private class AL extends KeyAdapter{
		public void keyPressed(KeyEvent e){
			int key = e.getKeyCode(); 
		
			if (key == KeyEvent.VK_LEFT){
				p.richtungx = - 1;
				p.richtungy = 0;
			}
			if (key == KeyEvent.VK_RIGHT){
				p.richtungx = + 1;
				p.richtungy = 0;
			}
			if (key == KeyEvent.VK_UP){
				p.richtungx = 0;
				p.richtungy = - 1;
			}
			if (key == KeyEvent.VK_DOWN){
				p.richtungx = 0;
				p.richtungy = + 1;
			}
			if (key == KeyEvent.VK_P){
					p.bau = true;
			}
			if (key == KeyEvent.VK_O){
				laufen = true;
			}
			if (key == KeyEvent.VK_I){
				if(wahl == 1){
					wahl = 2;
					c = 291;
				}else if(wahl == 2){
					wahl = 3;
					c = 330;
				}else if(wahl == 3){
					wahl = 4;
					c = 370;
				}else if(wahl == 4){
					wahl = 1;
					c = 252;
				}
			}
			if (key == KeyEvent.VK_F8){
				Speichern();
			}
			if (key == KeyEvent.VK_F7){
				Laden();
			}
		}
		public void keyReleased(KeyEvent e){
			int key = e.getKeyCode(); 
		
			if (key == KeyEvent.VK_LEFT){
				p.richtungx = 0;
				p.richtungy = 0;
				p.bewegen = true;
			}
			if (key == KeyEvent.VK_RIGHT){ 
				p.richtungx = 0;
				p.richtungy = 0;
				p.bewegen = true;
			}
			if (key == KeyEvent.VK_UP){
				p.richtungy = 0;
				p.richtungx = 0;
				p.bewegen = true;
			}
			if (key == KeyEvent.VK_DOWN){
				p.richtungy = 0;
				p.richtungx = 0;
				p.bewegen = true;
			}
			if (key == KeyEvent.VK_P){
				p.bau = false;
			}
		}
	}
	private class AL2 extends KeyAdapter{
		public void keyPressed(KeyEvent e){
			int key = e.getKeyCode(); 
		
			if (key == KeyEvent.VK_A){
				pp.richtungx = - 1;
				pp.richtungy = 0;
			}
			if (key == KeyEvent.VK_D){
				pp.richtungx = + 1;
				pp.richtungy = 0;
			}
			if (key == KeyEvent.VK_W){
				pp.richtungx = 0;
				pp.richtungy = - 1;
			}
			if (key == KeyEvent.VK_S){
				pp.richtungx = 0;
				pp.richtungy = + 1;
			}
			if (key == KeyEvent.VK_Q){
				pp.bau = true;
			}
			if (key == KeyEvent.VK_1){
				if(wahl2 == 1){
					wahl2 = 2;
					c2 = 711;
				}else if(wahl2 == 2){
					wahl2 = 3;
					c2 = 750;
				}else if(wahl2 == 3){
					wahl2 = 4;
					c2 = 790;
				}else if(wahl2 == 4){
					wahl2 = 1;
					c2 = 672;
				}
			}
		}
		public void keyReleased(KeyEvent e){
			int key = e.getKeyCode(); 
		
			if (key == KeyEvent.VK_A){
				pp.richtungx = 0;
				pp.richtungy = 0;
				pp.bewegen = true;
			}
			if (key == KeyEvent.VK_D){ 
				pp.richtungx = 0;
				pp.richtungy = 0;
				pp.bewegen = true;
			}
			if (key == KeyEvent.VK_W){
				pp.richtungy = 0;
				pp.richtungx = 0;
				pp.bewegen = true;
			}
			if (key == KeyEvent.VK_S){
				pp.richtungy = 0;
				pp.richtungx = 0;
				pp.bewegen = true;
			}
			if (key == KeyEvent.VK_Q){
				pp.bau = false;
			}
		}
	}
}
```

Hier das Gebäude:

```
public class Gebäude{
int x, y;

	public Gebäude(int startX, int startY){
		 x = startX;
		 y = startY;
	}
	public int getX(){
		return x;
	}
	public int getY(){
		return y;
	}
}
```

So hab ich's schon versucht:

```
if(p.bau == true && array[p1][p2] != array[Gebäude().getX()][Gebäude().getY()]){
  if(wahl == 1 && j >= 20){
    neueHolzfällerhütte1();
    j = j - 20;
    holzhaus = holzhaus + 1;
    p.bau = false;
  }
}
```
Klappt aber nicht.
Was hab ich falsch gemacht?


----------



## fastjack (11. Jan 2012)

An der Stelle, an der Du ein Gebäude auf ein Feld setzt, mußt Du vorher checken, ob bereits ein Gebäude drauf ist.


----------



## Krypthor (11. Jan 2012)

Aber wie?
Ich hatte das ja schon so probiert:

```
if(p.bau == true && array[p1][p2] != array[Gebäude().getX()][Gebäude().getY()]){
  if(wahl == 1 && j >= 20){
    neueHolzfällerhütte1();
    j = j - 20;
    holzhaus = holzhaus + 1;
    p.bau = false;
  }
}
```
bau wird true wenn die Taste gedrückt wird, das Problem ist, dass x und y im Moment des setzens 
auf dem Feld des Spielers sind.


----------



## Evil-Devil (12. Jan 2012)

Entweder bin ich blind oder ich finde deine Variable array nicht. An sich musst du lediglich auf deiner Spielkarte/Map hinterlegen das dort bereits ein Gebäude gebaut wurde und das dann abfragen. Also nicht soviel anders als es jetzt schon ist, wenn array dazu da ist, wofür ich es halte.


----------



## Krypthor (12. Jan 2012)

Am Anfang ist x und y des Gebäudes ja noch nichts, also das kann ich ja dann schonmal nicht abfragen,
und ich hab es mit einem boolean versucht(wenn booleangebäude = true ist), aber das funktioniert auch nicht.
ich bekomme immer ein problem wenn ich die Gebäuden X und Y Koordinaten abfrage?!


----------



## Evil-Devil (12. Jan 2012)

Du sollst es ja auch nicht in deinem Gebäude sondern auf deiner Map abfragen.

Von der Rangordnung her steht die Map ganz oben. Auf ihr stehen die Gebäude oder was auch immer. Das Gebäude sollte gar nicht erst gefragt werden müssen.


----------



## Apo (12. Jan 2012)

naja du musst deinem Array auch sagen, dass es jetzt besetzt ist. Wenn ich das recht sehe, dann ist das array bei dir ein char[][].
Wenn du nun eine Hütte setzt, musst du natürlich auch dein array anpassen und array[p1][p2] auf einen neuen Wert setzen.
Aber der Code ist wirklich schwer lesbar, muss ich leider sagen.


----------



## fastjack (13. Jan 2012)

Ich steh auch auf dem Schlauch. Also, der Spieler steht auf Feld X/Y. Der Benutzer klickt irgendwo hin. Hole zu diesen Mauskoordinaten das entsprechende Feld im Array, also MX/MY und schau nach, ob dort bereits ein Gebäude ist.
Der Kniff ist, wie man zu den Mauskoordinaten das "Feld auf der Karte" errechnet.


----------



## Gast2 (13. Jan 2012)

Moin,


```
public class Feld {

    private Gebaeude gebaeude;

    public boolean addGebaeude(Gebaeude g) {
        if (this.gebaeude != null) return false;
        this.gebauede = g
        return true;
    }
}
```


```
private Feld[][] felder = new Feld[20][20];
```


```
Feld f = felder[p1][p2];
if (f.addGebaeude(new Holzfaellerhuette)) {
    // todo
} else {
    Meldung("Probleme! Hütte schon vorhanden.");
}
```

hand, mogel


----------



## Krypthor (15. Jan 2012)

Aber die Gebäude hab ich doch in der Map schon drin?!

```
public void neueHolzfällerhütte1(){
        Gebäude g = new Gebäude(p1, p2);
        holzfällerhütte1.add(g);
    }
    public void neuesWohnhaus1(){
        Gebäude g = new Gebäude(p1, p2);
        wohnhaus1.add(g);
    }
    public void neuerSteinbruch1(){
        Gebäude g = new Gebäude(p1, p2);
        steinbruch1.add(g);
    }
    public void neueKaserne1(){
        Gebäude g = new Gebäude(p1, p2);
        kaserne1.add(g);
    }
```


----------



## Gast2 (15. Jan 2012)

Moin,

verstehe ich das Richtig ... Du hast eine Liste mit Holzfällerhäusen, eine Liste mit Kasernen und so weiter?

außerdem ... sind das Deine Funktionen zum Hinzufügen der Häuser?

hand, mogel

PS: falls p1 und p2 Koordinaten sind, dann sind evt. px und py bzw. x und y etwas besser geeignet


----------



## Krypthor (15. Jan 2012)

Jo, ich hab das so gemacht damit man sie später auch wieder entfernen kann...
und p1 und p2 sind Koordinaten.
Aber mit dem setzen das klappt immer noch nicht obwohl ich nicht verstehe warum?!


----------



## Gast2 (15. Jan 2012)

Moin,

Du hast einen Wurm in Deiner Softwarearchitektur drinnen ... als erstes solltest Du Dein Steinbruch, Holzhütte etc. von Gebäude erben lassen und direkt Steinbruch & Co. in den generischen Listen führen ... macht es später sehr viel einfacher auch später nur an einem Gebäude etwas zu ändern - auch wenn einige Gebäude identisch sind (alle Tore zu Unterwelt [Erdloch/Erdriss/Höhle/...] sind identisch und erben nur von Cave)

und dann macht es sich besser eine Klasse Feld zu definieren wo die einzelnen Gebäude als Member vorhanden sind ... damit sparst Du Dir das Überprüfen der Koordinaten ... und die Klasse Feld kannst Du als Array anlegen - dann kannst Du einfach von X & Y über das Array auf das Feld zugreifen und hast auch gleich alle Gebäude - in diesem Feld


```
public class Feld {
 
    private Gebaeude holzhuette;  // besser private Holzhuette holzhuette;
    private Gebaeude steinbruch;  // besser private Steinbruch steinbruch;
 
    public boolean addHolzhuette(Holzhuette h) {
        if (hasHolzhuette()) return false; // vgl. CCD
        this.holzhuette = h;
        return true;
    }

    public boolean hasHolzhuette() {
        return this.holzhuette != null;
    }

    public Holzhuette getHolzhuette() {
        // magic things
    }

    // TODO Steinbruch & Co. - im Idealfall mit Generics
}
```

hand, mogel


----------



## Krypthor (16. Jan 2012)

Ah das ist wirklich besser, dank dir!


----------



## HimBromBeere (16. Jan 2012)

> Der Kniff ist, wie man zu den Mauskoordinaten das "Feld auf der Karte" errechnet.


Keine Ahnung, ob du das schon erldigt hast, jedenfalls klingt das nach Koordinatentransformation. Dafür brauchst du natürlich sowas wie einen Maßstab und eine Bildschirm-Ursprungsposition. Daraus kannste dann Mauskoordinaten berechnen bzw. Feldkoordinaten... sieh dir dafür mal AffineTranformation an, mit denen geht das ganz fix


----------

