uebungen/sources/src/main/java/pr2/collections/iterieren/CoinGenerator.java

116 lines
2.8 KiB
Java

package pr2.collections.iterieren;
import de.smits_net.games.framework.board.Board;
import de.smits_net.games.framework.image.SimpleImage;
import de.smits_net.games.framework.sprite.Sprite;
import de.smits_net.games.framework.sprite.Sprite.BoundaryPolicy;
import java.awt.Point;
import java.util.Iterator;
import java.util.Random;
/**
* Klasse, die eine beliebige Menge an Geld generiert.
*/
public class CoinGenerator implements Iterable<Sprite> {
/**
* Zufallszahlen-Generator.
*/
private static final Random RND = new Random();
/**
* Das Spielfeld.
*/
private final Board board;
/**
* Anzahl der Münzen, die erzeugt werden sollen.
*/
int number; // nicht private wegen innerer Klasse
/**
* Erzeugt eine neue Instanz, die zu dem übergebenen Spielfeld gehört.
*
* @param board Das Spielfeld.
* @param number Anzahl der Münzen.
*/
public CoinGenerator(Board board, int number) {
this.board = board;
this.number = number;
}
/**
* Erzeugt einen neuen Iterator.
*
* @return Der Iterator.
*/
@Override
public Iterator<Sprite> iterator() {
return new Iterator<Sprite>() {
int count = 0;
@Override
public boolean hasNext() {
return count < number;
}
@Override
public Sprite next() {
count++;
return createCoin();
}
};
}
/**
* Legt eine zufällige Münze an.
*
* @return die Münze als Sprite.
*/
Sprite createCoin() {
final String prefix = "pr2/collections/iterieren";
String asset;
switch (RND.nextInt(8)) {
case 0:
asset = prefix + "/1c.png";
break;
case 1:
asset = prefix + "/2c.png";
break;
case 3:
asset = prefix + "/5c.png";
break;
case 4:
asset = prefix + "/10c.png";
break;
case 5:
asset = prefix + "/20c.png";
break;
case 6:
asset = prefix + "/50c.png";
break;
case 7:
asset = prefix + "/1e.png";
break;
default:
asset = prefix + "/2e.png";
break;
}
int xPos = RND.nextInt(board.getWidth()) - 20;
int yPos = RND.nextInt(board.getHeight()) - 20;
return new Sprite(board, new Point(xPos, yPos), BoundaryPolicy.NONE,
new SimpleImage(asset)) {
@Override
protected void mousePressed() {
this.setVisible(false);
}
};
}
}