public class Tile
{
    public Tile (Coordinate position)
    {
        this(position, TileId.EMPTY);
    }

    public Tile (Coordinate position, int id)
    {
        _position = position;
        _id = id;
    }

    public final Coordinate getPosition ()
    {
        return _position;
    }
    
    public final int getId ()
    {
        return _id;
    }

    public final void setId (int id)
    {
        _id = id;
    }

    @Override
    public String toString ()
    {
        return TileId.idToString(_id);
    }

    private Coordinate _position;
    private int _id;
}
@@ -1,12 +1,39 @@
+import java.util.Objects;%0A%0A
 public class
@@ -545,24 +545,530 @@
 id);%0A    %7D%0A%0A
+    @Override%0A    public int hashCode ()%0A    %7B%0A        return Objects.hash(_id, _position.hashCode());%0A    %7D%0A%0A    // just compare tile positions%0A    %0A    @Override%0A    public boolean equals (Object obj)%0A    %7B%0A        if (obj == null)%0A            return false;%0A%0A        if (this == obj)%0A            return true;%0A        %0A        if (getClass() == obj.getClass())%0A        %7B%0A            Tile temp = (Tile) obj;%0A%0A            return _position.equals(temp.getPosition());%0A        %7D%0A%0A        return false;%0A    %7D%0A%0A
     private 

Update Tile.java