次のように、16 進グリッドに整数座標を使用しています。
object Cood
{
val up = Cood(0, 2)
val upRight = Cood(1, 1)
val downRight = Cood(1, -1)
val down = Cood(0, - 2)
val downLeft = Cood(-1, -1)
val upLeft = Cood(- 1, 1)
val dirns: List[Cood] = List[Cood](up, upRight, downRight, down, downLeft, upLeft)
}
case class Cood(x: Int, y: Int)
{
def +(operand: Cood): Cood = Cood(x + operand.x, y + operand.y)
def -(operand: Cood): Cood = Cood(x - operand.x, y - operand.y)
def *(operand: Int): Cood = Cood(x * operand, y * operand)
}
Hexs と Sides の両方に座標値があります。すべてのヘックスには 6 つの面がありますが、一部の面は 2 つのヘックスで共有されます。たとえば、Hex(2, 2) とその上の隣の Hex(2, 6) は Side(2, 4) を共有します。だから私はこのような集合演算を適用したい:
val hexCoods: Set[Cood] = ... some code
val sideCoods: Set[Cood] = hexCoods.flatMap(i => Cood.dirns.map(_ + i).toSet)
しかし、これを行うと、Cood は参照型として扱われ、重複した座標は取り除かれません。これを回避する方法はありますか?