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 { /** * 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 iterator() { return new Iterator() { 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); } }; } }