コード例 #1
0
 public void AddPlacedTetraStick(PlacedTetraStick placedTetraStick)
 {
     var colour = TetraStickColours.TetraStickToColour(placedTetraStick.TetraStick);
     var path = new Path
     {
         Data = CombineGeometries(placedTetraStick.Lines.Select(LineToGeometry).ToImmutableList()),
         StrokeThickness = 1,
         Stroke = new SolidColorBrush(Colors.Black),
         Fill = new SolidColorBrush(colour),
         Tag = MakeTag(TagType.TetraStick, placedTetraStick)
     };
     BoardCanvas.Children.Add(path);
 }
コード例 #2
0
        private static IImmutableList<int> BuildDlxMatrixRow(
            IReadOnlyDictionary<string, int> tagToIndexDict,
            PlacedTetraStick placedTetraStick)
        {
            var arr1 = new int[15]; // the 15 tetra sticks
            var arr2 = new int[30]; // Hxy where 0 <= x < 5, 0 <= y <= 5
            var arr3 = new int[30]; // Vxy where 0 <= x <= 5, 0 <= y < 5
            var arr4 = new int[16]; // Ixy where 0 < x < 5, 0 < y < 5

            arr1[tagToIndexDict[placedTetraStick.TetraStick.Tag]] = 1;

            var tuple = NormaliseLines(placedTetraStick.Lines);
            var hs = tuple.Item1;
            var vs = tuple.Item2;

            foreach (var h in hs)
            {
                var x = h.Item1.X;
                var y = h.Item1.Y;
                arr2[y*5 + x] = 1;
            }

            foreach (var v in vs)
            {
                var x = v.Item1.X;
                var y = v.Item1.Y;
                arr3[x*5 + y] = 1;
            }

            foreach (var pt in placedTetraStick.InteriorJunctionPoints)
            {
                if (pt.X > 0 && pt.X < 5 && pt.Y > 0 && pt.Y < 5)
                {
                    var x = pt.X - 1;
                    var y = pt.Y - 1;
                    arr4[x*4 + y] = 1;
                }
            }

            var arrs = new[] {arr1, arr2, arr3, arr4};

            return arrs.SelectMany(arr => arr).ToImmutableList();
        }
コード例 #3
0
        public bool IsPlacedTetraStickOnBoardCorrectly(PlacedTetraStick placedTetraStick)
        {
            // ReSharper disable once LoopCanBeConvertedToQuery
            foreach (var frameworkElement in GetTetraStickFrameworkElements())
            {
                var pst = GetPlacedTetraStick(frameworkElement);
                if (pst.TetraStick.Tag != placedTetraStick.TetraStick.Tag) continue;
                return (Equals(pst.Location, placedTetraStick.Location) &&
                        pst.Orientation == placedTetraStick.Orientation &&
                        pst.ReflectionMode == placedTetraStick.ReflectionMode);
            }

            return false;
        }
コード例 #4
0
        public bool IsPlacedTetraStickOnBoard(PlacedTetraStick placedTetraStick)
        {
            // ReSharper disable once LoopCanBeConvertedToQuery
            foreach (var frameworkElement in GetTetraStickFrameworkElements())
                if (GetPlacedTetraStick(frameworkElement).TetraStick.Tag == placedTetraStick.TetraStick.Tag)
                    return true;

            return false;
        }
コード例 #5
0
 private static Tuple<TagType, PlacedTetraStick> MakeTag(TagType tagType, PlacedTetraStick placedTetraStick)
 {
     return Tuple.Create(tagType, placedTetraStick);
 }
コード例 #6
0
 public void RemovePlacedTetraStick(PlacedTetraStick placedTetraStick)
 {
     // ReSharper disable once LoopCanBePartlyConvertedToQuery
     foreach (var frameworkElement in GetTetraStickFrameworkElements())
     {
         if (GetPlacedTetraStick(frameworkElement).TetraStick.Tag != placedTetraStick.TetraStick.Tag) continue;
         BoardCanvas.Children.Remove(frameworkElement);
         return;
     }
 }