ANIMAL: Animal(string) getAttack() -> int getHealth() -> int getImage() -> bitmap getMove() -> int isWater() -> bool getLands() -> list GAMESTATE: gamestate(player) isValid(PlacePhase) -> bool isValid(BuildPhase) -> bool isValid(MovePhase) -> bool getValidPlaces(player, animal) -> list(PlacePhases) getValidBuilds(player, animal) -> list(BuildPhases) getValidMoves(player, animal) -> list(MovePhases) getAnimals() -> list getScore(player) -> int getTiles(player) -> list(Tiles) getLandCount(player, land) -> int getHumanTilesLeft() -> int PLAYER: getFirstMove() -> PlacePhase getBuildPhase() -> BuildPhase getBuilds() -> Map(animal, remaining) getMovePhase() -> MovePhase getPlacePhase() -> PlacePhase addBuild(animal) -> TILE: Tile(enum) getAnimal() -> animal getTerrainType() -> enum? string? getImage() -> bitmap getOwner() -> player PLACEPHASE: PlacePhase() addPlace(animal, tile) -> getPlaces() -> Map(animal, tile) BUILDPHASE: BuildPhase() startBuild(animal) -> getStartBuilds() -> List (animals?) MOVEPHASE: MovePhase() addTile(Tile) -> getTiles() -> List(tiles)