package jrummikub.model; import java.util.ArrayList; import java.util.Collection; import java.util.EnumSet; import java.util.List; import java.util.Random; /** * StoneHeap creates all {@link Stone}s for a game, manages them and allows * players to draw one or more random Stones. */ public class StoneHeap { List heap; private Random generator = new Random(); /** Creates 106 Stones according to standard rules */ public StoneHeap() { heap = new ArrayList(); for (int i = 1; i <= 13; i++) { for (int j = 0; j < 2; j++) { for (StoneColor c : EnumSet.allOf(StoneColor.class)) { heap.add(new Stone(i, c)); } } } // Joker heap.add(new Stone(StoneColor.BLACK)); heap.add(new Stone(StoneColor.RED)); } /** * Removes random {@link Stone} from the heap and returns it * * @return the drawn stone */ public Stone drawStone() { return heap.remove(generator.nextInt(heap.size())); } /** * Removes several {@link Stone}s from the heap and returns them * * @param number * number of requested Stones * @return list of drawn stones */ public List drawStones(int number) { List drawnStones = new ArrayList(); for (int i = 0; i < number; i++) { drawnStones.add(drawStone()); } return drawnStones; } /** * Get the number of stones left * * @return number of stones on the heap */ public int getSize() { return heap.size(); } /** * Put stones back on the heap * * @param stones * collection of stones to put back */ public void putBack(Collection stones) { heap.addAll(stones); } }