Game - List or Map - Board - Deck Deck - List - void shuffle() //Randomizes order of cards in deck - void draw(Deck other) //Draws one card from deck other. Returns false if the other deck is empty - void draw(Deck other, int n) //Draws n cards from deck other - void emptyInto(Deck other) //Moves all cards in deck to deck other - boolean isEmpty() //Checks whether there are any cards in the deck - int size() //Gets number of cards in deck - List getCards() //Gets copy of cards in deck in correct order ICardWithoutSuit - S getValue() //Returns the value of the card - T getSymbol() //Returns the symbol/color of the card ICard extends ICardWithoutSuit - R getSuit() //Returns the suit of the card IGrid - K getElement(int x, int y) - setElement(int x, int y, K element) - int getHeight() - int getWidth() Board - Grid x2 - List deadRobots; - List aliveRobots; - removeDeadRobotFromBoard(Robot robot); Position //Immutable int xCoordinate; int yCoordinate; int getXCoordinate() int getYCoordinate() Direction { NORTH (1), NORTH_EAST (2), EAST (3), SOUTH_EAST (4), SOUTH (5), SOUTH_WEST (6), WEST (7), NORTH_WEST (8); } TileType { TILE (1), HOLE (2), COGWHEEL_RIGHT (3), COGWHEEL_LEFT (4), TRANSPORT_BAND_SLOW (5), TRANSPORT_BAND_SLOW_RIGHT (6), TRANSPORT_BAND_SLOW_LEFT (7), TRANSPORT_BAND_SLOW_SIDE_ENTRANCES (8), TRANSPORT_BAND_SLOW_SIDE_ENTRANCE_LEFT (9), TRANSPORT_BAND_SLOW_SIDE_ENTRANCE_RIGHT (10), TRANSPORT_BAND_FAST (11), TRANSPORT_BAND_FAST_RIGHT (12), TRANSPORT_BAND_FAST_LEFT (13), TRANSPORT_BAND_FAST_SIDE_ENTRANCES (14), TRANSPORT_BAND_FAST_SIDE_ENTRANCE_LEFT (15), TRANSPORT_BAND_FAST_SIDE_ENTRANCE_RIGHT (16), FLAG_1 (17), FLAG_2 (18), FLAG_3 (19), FLAG_4 (20), WRENCH (21), WRENCH_AND_HAMMER (22), DEATH_TILE (23) } WallType { WALL_NORMAL (1), WALL_CORNER (2), WALL_LASER_SINGLE (3), WALL_LASER_DOUBLE (4); } Tile TileType type Direction direction FunctionalTile extends Tile doPhaseAction() //Information required has not been decided doRoundAction() //Information required has not been decided doStepOnAction() //Information required has not been decided. Not needed for all functional tiles Wall WallType type Direction direction Robot - int playerId - int currentDamage - boolean inPowerDown - int lastFlagVisited - Position backup - int getDamage() - setDamage(int damage) - Position getPosition() - setPosition(Position position) - setPowerDown(boolean value) - boolean isInPowerDown() BoardLoader - Board loadBoard(String boardFile) Player - Deck - int playerId //Both ID and name? - string playerName - List program - Robot robot //Might not be needed - boolean willTakePowerdownNextTurn - boolean isAlive() - boolean getName() - Robot getRobot() //Might not be needed - setPowerDownNextTurn(boolean willTakePowerdown) IO - Game - List getElementsToRender() - ? HandleInput(?) ???