package jrummikub.model; import jrummikub.util.Pair; import static jrummikub.model.StoneTray.Direction.*; /** Class managing a {@link Player}'s {@link Stone}s */ public class Hand extends StoneTray implements IHand { /** * The width of the hand */ public final static int WIDTH = 14; @Override public int getFreeRowSpace(int row) { int count = 0; for (Pair entry : this) { if (entry.getSecond().getY() == row) { count++; } } return WIDTH - count; } @Override public int getRowCount() { int rows = 0; for (Pair entry : this) { if (entry.getSecond().getY() > rows) { rows = (int) entry.getSecond().getY(); } } return rows + 1; } @Override protected Pair fixInvalidDrop(Stone stone, Position pos, Direction dir) { float x = pos.getX(); float y = pos.getY(); if (x >= 0 && x <= WIDTH - 1) { return null; } if (x < 0) { return new Pair(new Position(0, y), RIGHT); } else { if (getFreeRowSpace((int) y) == 0) { return new Pair(new Position(0, y + 1), RIGHT); } else { return new Pair(new Position(WIDTH - 1, y), LEFT); } } } }