public override void Init()
        {
            cells = new Dictionary <ulong, Cell>();
            int side = (int)parameters.side;

            for (int q = 0; q < side; q++)
            {
                int r2 = side - q;

                for (int r = 0; r < r2; r++)
                {
                    int s1 = -q - r;
                    cells.Add(Cantor.Tuple(q, r, s1), CreateCellAtPosition(new TriangularPosition(q, r, s1)));

                    if ((q + r) < side - 1)
                    {
                        int s2 = s1 - 1;
                        cells.Add(Cantor.Tuple(q, r, s2), CreateCellAtPosition(new TriangularPosition(q, r, s2)));
                    }
                }
            }

            base.Init();
        }
 protected override Cell CellAtPosition(TriangularPosition position)
 {
     return(cells[Cantor.Tuple(position.q, position.r, position.s)]);
 }
 protected override bool ContainsAtPosition(TriangularPosition position)
 {
     return(cells.ContainsKey(Cantor.Tuple(position.q, position.r, position.s)));
 }
 public override int GetHashCode()
 {
     return((int)Cantor.Tuple(q, r, s));
 }
        public void CanTuple()
        {
            var z = Cantor.Tuple(1, 2, 3);

            Assert.AreEqual(z, 69);
        }