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); }
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(); }
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; }
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; }
private static Tuple<TagType, PlacedTetraStick> MakeTag(TagType tagType, PlacedTetraStick placedTetraStick) { return Tuple.Create(tagType, placedTetraStick); }
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; } }