class Square { final String fCoordinate; final Position fOver; final Position fAt; boolean fOccupied; Square(String coordinate, Position over, Position at) { fCoordinate = coordinate; fOver = over; fAt = at; fOccupied = false; } void pickUp(RobotArm arm) { if (!fOccupied) throw new Problem("Cannot pick up at unoccupied square "+fCoordinate); arm.move(fOver); arm.grip(Game.GRIP_OPEN); arm.move(fAt); arm.grip(Game.GRIP_CLOSE); arm.move(fOver); fOccupied = false; } void putDown(RobotArm arm) { if (fOccupied) throw new Problem("Cannot put down on occupied square "+fCoordinate); arm.move(fOver); arm.move(fAt); arm.grip(Game.GRIP_OPEN); arm.move(fOver); fOccupied = true; } boolean equals(String coordinate) { return fCoordinate.equals(coordinate); } public String toString() { return fCoordinate; } }