# moorhuhn clon prob



## SebiB90 (2. Dez 2004)

ich mach ein moorhuhn spiel mit weihnachtsmännern und hab da ein prob
ich hab eine klasse für die weihnachtsmänner die über den bildschirm fliegen und eine hauptklasse.
in der hauptklasse wird ein thread gestartet der dann zufällig weihnachtsmänner erstellt und die immer bewegen mit move und paint. nur wie soll ich die zwischen und speichern und wie kann ich die zufällig erstellen?


----------



## foobar (2. Dez 2004)

> nur wie soll ich die zwischen und speichern und wie kann ich die zufällig erstellen?


Was willst du speichern? 
Um Objekte zufällig anzuordnen, kannst du Math.Random() benutzen.


----------



## SebiB90 (2. Dez 2004)

in einer endlos schleife(thread) will ich die weihnachtsmänner bewegen dazu muss ich aber jede instanc von denen speichern aber wie?
für jede instance ne neue variable? wie soll ich dann alle durch gehen können um die zu bewegen?


----------



## Wildcard (2. Dez 2004)

Warum gibst du nicht jedem Weihnachtsmann die Fähigkeit sich selbst zu bewegen?


----------



## SebiB90 (2. Dez 2004)

für jeden einen eigenen thread?
verbraucht das nicht zu viel ressourcen?

ich kann´s mal versuchen


----------



## Wildcard (2. Dez 2004)

Die müssen sich ja nicht  jede nanosekunde bewegen, also einfach schlafen legen.
Ich finds besser als beliebig viele Objekte in der Hauptklasse zu bewegen.


----------



## SebiB90 (2. Dez 2004)

dann mach ich das so

und mit demzufällig erstellen 
wär das so am besten?

```
while(true) {
  if(new Random().nextBoolean()) {
    new Santa();
  }
}
```


----------



## Reality (3. Dez 2004)

Man muss dazu doch nicht mehrere Threads machen!
Man sagt einfach in einem Thread: x1 += 2; x2 += 4; usw. Danach neu zeichnen.

Liebe Grüße
Reality


----------



## SebiB90 (3. Dez 2004)

ich versteh nicht richtig was du meinst Reality. kannst du ein beispiel code geben?


----------



## Reality (3. Dez 2004)

```
//globale Variablen

int x1 = 12; // Erster Wheinachtsmann
int y1 = 40;

int x2 = 37; // Zweiter Wheinachtsmann
int y2 = 48;
//usw.

public void run(){
  //do something;
  x1 += 2;
  x2 += 2;

  repaint();
}

public static void paint(Graphics g){
  g.drawImage(x1, y1, img, this);
  g.drawImage(x2, y2, img2, this);
}
```

So bewegst du die Wheinachtsmänner gleichzeitig mit nur einem Thread.

Liebe Grüße
Reality


----------



## Jockel (3. Dez 2004)

Er meint damit, dass du alle Figuren im selben Thread auf einmal aktualisierst und nicht für jede Figur einen eigenen Thread hast... x1, x2, etc. in Realitys Code stellen nur die Positionen der verschiedenen Figuren da.

[edit]
hm... zu langsam...


----------



## Illuvatar (3. Dez 2004)

Außerdem würde es sich anbieten eine Klasse für die Weihnachtsmänner zu machen, und dieWeihnachtsmänner in einer Collection wie einem Vector zu speichern.


----------



## SebiB90 (3. Dez 2004)

ich hab ne extra klasse für die weinachtsmänner
dann nehm ich collection oder ist ein array schneller?


----------



## Reality (3. Dez 2004)

Wenn du weisst wieviele Wheinachtsmänner du haben willst, dann nimm ein Array. Ist schneller und braucht weniger Resourcen.

Liebe Grüße
Reality


----------



## Roar (3. Dez 2004)

nein, nicht viel. außerdem was machst du wenn du mal mehr weihnachtsmänner haben willst? array vergörßern? anderne code anpassen?
@real: da fehlt aber noch ein sleep, hm? :-D


----------



## SebiB90 (3. Dez 2004)

das weiß ich ja nicht


----------



## Roar (3. Dez 2004)

was weißt du nicht?


----------



## SebiB90 (3. Dez 2004)

Roar hat gesagt.:
			
		

> was weißt du nicht?


das hier weiß ich nicht


			
				Reality hat gesagt.:
			
		

> Wenn du weisst wieviele Wheinachtsmänner du haben willst, dann nimm ein Array. Ist schneller und braucht weniger Resourcen.
> 
> Liebe Grüße
> Reality


----------



## Roar (3. Dez 2004)

dann nimm eine List


----------



## SebiB90 (3. Dez 2004)

und welche wär die beste dafür?
gibt so viele und kenn mich nicht so gut mit denen aus


----------



## Roar (3. Dez 2004)

einen Vector, da er thread sicher ist


----------



## Reality (3. Dez 2004)

Roar hat gesagt.:
			
		

> @real: da fehlt aber noch ein sleep, hm? :-D



Jojo, ist ja nur ein Pseudo-Code. Habe anfangs sogar vergessen die Variablen als int zu deklarieren; habe es dann verändert. 

Liebe Grüße
Reality


----------



## SebiB90 (4. Dez 2004)

werden hier bei die objecte kopiert oder referenziert?

```
for(Enumeration e=santas.elements();e.hasMoreElements();) {
  Santa santa=(Santa)e.nextElement();
  if(santa.isOut()) {
    santas.remove(santas.indexOf(santa));
  }else {
    santa.move();
  }
}
```


----------



## Beni (4. Dez 2004)

In Java werden Objekte immer referenziert. (Nur die Methode clone kann Objekte kopieren).

Aber dein Code dürfte so nicht funktionieren, du kannst doch die Liste nicht ändern, während eine Enumeration darüber läuft (bzw, du wirst einige Santa's überspringen)?


----------



## SebiB90 (4. Dez 2004)

wie sollman die dann anders durch gehen?


----------



## bygones (4. Dez 2004)

geh mit einem Iterator über die Collection. Der Iterator hat die Methode remove... wenn du ansonsten direkt über die Collection sie manipulierst wird eine ConcurrentModificationException geworfen


----------

