Example #1
0
        public void TestMethod1()
        {
            int nBuildings = 3;

            Point[] buildings = new Point[nBuildings];

            //buildings[0] = new Point(-5,-3);
            //buildings[1] = new Point(-9, 2);
            //buildings[2] = new Point(3, -4);

            buildings[0] = new Point(1, 2);
            buildings[1] = new Point(0, 0);
            buildings[2] = new Point(2, 2);

            int widthDistance = buildings.Max(_ => _.X) - buildings.Min(_ => _.X);

            var average = buildings.Average(_ => _.Y);

            var yPos = (long) buildings.Select(p => new Tuple<int, double>(p.Y, Math.Abs(p.Y - average))).OrderBy(_ => _.Item2).First().Item1;
            var dist = buildings.Select(p => Math.Abs((p.Y - yPos))).Sum();

             var totalDistance = (long)widthDistance + dist;

            Assert.AreEqual(4,totalDistance);
        }
Example #2
0
    public static void Exécute(TextReader input, TextWriter output)
    {
        int N = int.Parse(input.ReadLine());

        Point[] points = new Point[N];
        for (int i = 0; i < N; i++)
        {
            string[] inputs = input.ReadLine().Split(' ');
            int      X      = int.Parse(inputs[0]);
            int      Y      = int.Parse(inputs[1]);
            points[i].y = Y;
            points[i].x = X;
        }

        if (N == 1)
        {
            output.WriteLine("0");
            return;
        }

        var y  = points.Select(x => x.y).ToArray();
        var xs = points.Select(x => x.x).ToArray();

        var sorted = points.OrderBy(x => x.y).ToArray();
        var middle = sorted.Length / 2;

        int minY = sorted[middle - 1].y;
        int maxY = sorted[middle].y;

        points = points.OrderBy(x => x.x).ToArray();

        long upValue   = Len(y, minY);
        long downValue = Len(y, maxY);

        while (minY < maxY - 1)
        {
            int  mid      = (minY + maxY) / 2;
            long midValue = Len(y, mid);
            if (upValue < downValue)
            {
                maxY      = mid;
                downValue = midValue;
            }
            else
            {
                minY    = mid;
                upValue = midValue;
            }
        }

        // Write an action using Console.WriteLine()
        // To debug: Console.Error.WriteLine("Debug messages...");

        output.WriteLine(Math.Min(upValue, downValue) + xs.Max() - xs.Min());
    }
Example #3
0
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            int fontSize = 8;
            int xPitch   = 60;
            int yPitch   = 30;

            if (matrix != null)
            {
                pictureBox1.Size = new Size(70 + 60 * matrix.GetLength(1), 70 + 30 * matrix.GetLength(0));
                for (int i = 0; i < matrix.GetLength(0); ++i)
                {
                    for (int j = 0; j < matrix.GetLength(1); ++j)
                    {
                        e.Graphics.DrawString(matrix[i, j].ToString("F0"), new Font("メイリオ", fontSize), Brushes.Black,
                                              new RectangleF(50 + xPitch * i, 50 + yPitch * j, 50, 20), new StringFormat()
                        {
                            Alignment = StringAlignment.Center
                        });
                    }
                }
                var points = new Point[] {
                    new Point(50 - 20 + 10, 50 - 10),
                    new Point(50 - 20, 50 - 10),
                    new Point(50 - 20, 50 - 10 + yPitch * matrix.GetLength(0) + 5),
                    new Point(50 - 20 + 10, 50 - 10 + yPitch * matrix.GetLength(0) + 5)
                };
                e.Graphics.DrawLines(Pens.Black, points);
                points       = points.Select(x => new Point(x.X + xPitch * matrix.GetLength(1) + 30, x.Y)).ToArray();
                points[0].X -= 20;
                points[3].X -= 20;
                e.Graphics.DrawLines(Pens.Black, points);
            }
        }
        public Point[] PossibleCoordsToMoveTo()
        {
            if (Piece == null)
            {
                return(new Point[0]);
            }

            int xDir = Piece.PColor == PieceColor.RED ? 1 : -1;

            var gotoCoords = new Point[0];

            switch (Piece.Type)
            {
            case PieceType.Herzmuschel:
                gotoCoords = new Point[] { new Point(xDir, -1), new Point(xDir, 1) };
                break;

            case PieceType.Moewe:
                gotoCoords = new Point[] { new Point(1, 0), new Point(-1, 0), new Point(0, 1), new Point(0, -1) };
                break;

            case PieceType.Robbe:
                gotoCoords = new Point[] { new Point(-1, 2), new Point(1, 2), new Point(-2, 1), new Point(2, 1), new Point(-1, -2), new Point(1, -2), new Point(-2, -1), new Point(2, -1) };
                break;

            case PieceType.Seestern:
                gotoCoords = new Point[] { new Point(xDir, 0), new Point(1, 1), new Point(-1, 1), new Point(1, -1), new Point(-1, -1) };
                break;
            }

            return(gotoCoords.Select(x => new Point(x.X + X, x.Y + Y)).ToArray());
        }
        private static string DrawOrientationSquares(string result, int circleThickness)
        {
            var points = new Point[] {
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness * 2, CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness * 2, CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness * 2),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness * 2),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness),
            };
            string pts = string.Join(" ", points.Select(x => x.X.ToString().Replace(",", ".") + " , " + x.Y.ToString().Replace(",", ".")));

            result += "<polygon points =\"" + pts + "\"" + " style =\"fill:black\" />";

            points = new Point[] {
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 1, CONSTS.DEFAULT_MARKER_DIAMETER * 1),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 1 + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * 1),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 1 + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * 1 + circleThickness),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 1, CONSTS.DEFAULT_MARKER_DIAMETER * 1 + circleThickness),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 1, CONSTS.DEFAULT_MARKER_DIAMETER * 1),
            };
            pts     = string.Join(" ", points.Select(x => x.X.ToString().Replace(",", ".") + " , " + x.Y.ToString().Replace(",", ".")));
            result += "<polygon points =\"" + pts + "\"" + " style =\"fill:black\" />";

            points = new Point[] {
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * 1),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness * 2, CONSTS.DEFAULT_MARKER_DIAMETER * 1),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness * 2, CONSTS.DEFAULT_MARKER_DIAMETER * 1 + circleThickness),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * 1 + circleThickness),
                new Point(CONSTS.DEFAULT_MARKER_DIAMETER * 0 + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * 1),
            };
            pts     = string.Join(" ", points.Select(x => x.X.ToString().Replace(",", ".") + " , " + x.Y.ToString().Replace(",", ".")));
            result += "<polygon points =\"" + pts + "\"" + " style =\"fill:black\" />";

            return(result);
        }
Example #6
0
        protected override void OnSpellEffect(Spell spell)
        {
            var targetPos = (TilePosition)((TerrainEntity)spell.Targets[0][0]).Position;

            Point[] area = new Point[]
            {
                new Point(1, 1),
                new Point(-1, -1),
                new Point(-1, 1),
                new Point(1, -1),
                new Point(0, 0),
                new Point(0, 1),
                new Point(0, -1),
                new Point(1, 0),
                new Point(-1, 0)
            };
            TilePosition[] tileArea = area.Select(pos => new TilePosition(targetPos.Point + pos)).ToArray();
            foreach (TilePosition tile in tileArea)
            {
                var targets = this.World.GetEntities(tile).OfType <UnitEntity>();
                foreach (UnitEntity target in targets)
                {
                    if (target.Module <HealthModule>().IsDead())
                    {
                        if (targets.Count() == 1)
                        {
                            var unit = new ZombieUnit(this.Owner);
                            spell.RunAction(new AddEntityAction(unit, tile.GenerateSpawn()));
                        }
                        spell.RunAction(new RemoveEntityAction(target));
                    }
                }
            }
        }
Example #7
0
        public static System.Windows.Point[] GetPoints(Control control, bool relative = false)
        {
            if (control == null)
            {
                throw new ArgumentNullException(nameof(control));
            }
            var pos = relative
                                ? Point.Empty
                      // Get control position on the screen
                                : control.PointToScreen(System.Drawing.Point.Empty);
            var pointsToCheck =
                new Point[]
            {
                // Top-Left.
                pos,
                // Top-Right.
                new Point(pos.X + control.Width - 1, pos.Y),
                // Bottom-Left.
                new Point(pos.X, pos.Y + control.Height - 1),
                // Bottom-Right.
                new Point(pos.X + control.Width - 1, pos.Y + control.Height - 1),
                // Middle-Centre.
                new Point(pos.X + control.Width / 2, pos.Y + control.Height / 2)
            };

            return(pointsToCheck.Select(x => new System.Windows.Point(x.X, x.Y)).ToArray());
        }
Example #8
0
        protected override void OnSpellEffect(Spell spell)
        {
            var targetPos = spell.Controller.Hero.PositionAs <TilePosition>();

            Point[] area = new Point[]
            {
                new Point(1, 1),
                new Point(-1, -1),
                new Point(-1, 1),
                new Point(1, -1),
                new Point(0, 1),
                new Point(0, -1),
                new Point(1, 0),
                new Point(-1, 0)
            };
            TilePosition[] tileArea = area.Select(pos => new TilePosition(targetPos.Point + pos)).ToArray();
            foreach (TilePosition tile in tileArea)
            {
                var targets = this.World.GetEntities(tile).OfType <UnitEntity>();
                foreach (UnitEntity target in targets)
                {
                    target.Module <AttackModule>().Damage += 2;
                }
            }
        }
Example #9
0
        protected override void OnSpellEffect(Spell spell)
        {
            var targetPos = (TilePosition)((TerrainEntity)spell.Targets[0][0]).Position;

            Point[] area = new Point[]
            {
                new Point(1, 1),
                new Point(-1, -1),
                new Point(-1, 1),
                new Point(1, -1),
                new Point(0, 1),
                new Point(0, -1),
                new Point(1, 0),
                new Point(-1, 0),
                new Point(0, 0)
            };
            TilePosition[] tileArea = area.Select(pos => new TilePosition(targetPos.Point + pos)).ToArray();
            foreach (TilePosition tile in tileArea)
            {
                var targets = this.World.GetEntities(tile).OfType <UnitEntity>();
                foreach (UnitEntity target in targets)
                {
                    spell.RunAction(target, new DealDamageToUnitAction(target, 3));
                }
            }
        }
Example #10
0
 private void Form2_Paint(object sender, PaintEventArgs e)
 {
     if (matrix != null)
     {
         for (int i = 0; i < matrix.GetLength(0); ++i)
         {
             for (int j = 0; j < matrix.GetLength(1); ++j)
             {
                 e.Graphics.DrawString(matrix[i, j].ToString("F0"), new Font("メイリオ", 8), Brushes.Black,
                                       new RectangleF(50 + 60 * i, 180 + 30 * j, 50, 20), new StringFormat()
                 {
                     Alignment = StringAlignment.Center
                 });
             }
         }
         var points = new Point[] {
             new Point(50 - 20 + 10, 180 - 10),
             new Point(50 - 20, 180 - 10),
             new Point(50 - 20, 180 - 10 + 30 * matrix.GetLength(0) + 5),
             new Point(50 - 20 + 10, 180 - 10 + 30 * matrix.GetLength(0) + 5)
         };
         e.Graphics.DrawLines(Pens.Black, points);
         points       = points.Select(x => new Point(x.X + 60 * matrix.GetLength(1) + 30, x.Y)).ToArray();
         points[0].X -= 20;
         points[3].X -= 20;
         e.Graphics.DrawLines(Pens.Black, points);
     }
 }
Example #11
0
        protected override void OnSpellEffect(Spell spell)
        {
            var targetPos = (TilePosition)((TerrainEntity)spell.Targets[0][0]).Position;

            Point[] area = new Point[]
            {
                new Point(1,1),
                new Point(-1,-1),
                new Point(-1,1),
                new Point(1,-1),
                new Point(0,0),
                new Point(0,1),
                new Point(0,-1),
                new Point(1,0),
                new Point(-1,0)
            };
            TilePosition[] tileArea = area.Select(pos => new TilePosition(targetPos.Point + pos)).ToArray();
            foreach (TilePosition tile in tileArea)
            {
                var targets = this.World.GetEntities(tile).OfType<UnitEntity>();
                foreach (UnitEntity target in targets)
                    if (target.Module<HealthModule>().IsDead())
                    {
                        if (targets.Count() == 1)
                        {
                            var unit = new ZombieUnit(this.Owner);
                            spell.RunAction(new AddEntityAction(unit, tile.GenerateSpawn()));
                        }
                        spell.RunAction(new RemoveEntityAction(target));
                    }
            }
        }
        private static int calculateMedianYCoordinate(Point[] locations)
        {
            int[] orderedYCoordinatesOfLocations = locations.Select(location => location.Y).OrderBy(yCoordinate => yCoordinate).ToArray();
            int medianIndex = locations.Count() / 2;
            int medianY = orderedYCoordinatesOfLocations[medianIndex];

            return medianY;
        }
        public static Tuple<Point, Vector> Compute(Point[] points)
        {
            var avgX = points.Select(p => p.X).Average();
            var avgY = points.Select(p => p.Y).Average();

            var shifted = points.Select(p => p - new Vector(avgX, avgY));
            var mvSample = new MultivariateSample(2);
            foreach (var p in shifted)
                mvSample.Add(p.X, p.Y);

            var pca = mvSample.PrincipalComponentAnalysis();
            var firstComponentVector = pca.Component(0).NormalizedVector();

            return Tuple.Create(
                new Point(avgX, avgY),
                new Vector(firstComponentVector[0], firstComponentVector[1]));
        }
Example #14
0
        private bool IsLoadingScreen(Bitmap bitmap)
        {
            var warframeLogoPoints    = new Point[] { new Point(1885, 1964), new Point(1956, 1973), new Point(2003, 2000), new Point(2022, 1985), new Point(2080, 1970), new Point(2116, 2003), new Point(2122, 1977), new Point(2209, 2003) };
            var notWarframeLogoPoints = new Point[] { new Point(1900, 1969), new Point(1927, 1968), new Point(1956, 1999), new Point(1994, 1977), new Point(2037, 1996), new Point(2069, 1977), new Point(2100, 1996) };
            var warframePointsPresent = !warframeLogoPoints.Any(p => bitmap.GetPixel(p.X, p.Y).GetBrightness() < 0.95);
            var notWarframePointsDark = notWarframeLogoPoints.Select(p => bitmap.GetPixel(p.X, p.Y).GetBrightness()).Average() < 0.9;

            return(warframePointsPresent && notWarframePointsDark);
        }
Example #15
0
        public MazeGenerationResults Generate()
        {
            var results = new MazeGenerationResults();
            var targets = new Dictionary <Point, bool>();
            var offsets = new Point(new int[2]).GetAllOffsets();

            foreach (var cell in InnerMap.Cells)
            {
                var cellNeighbors = offsets.Select(x => x + cell.Key);
                foreach (var cellNeighbor in cellNeighbors)
                {
                    var neighborIsAlive = Map.CellExists(cellNeighbor);
                    targets[cellNeighbor] = neighborIsAlive;
                }
                targets[cell.Key] = true;
            }

            foreach (var target in targets)
            {
                var targetNeighbours      = offsets.Select(x => x + target.Key);
                var aliveTargetNeighbours = offsets.Where(x => Map.CellExists(x));
                var aliveNeighbourCount   = aliveTargetNeighbours.Count();

                if (target.Value) // Alive
                {
                    if (DieIf.Contains(aliveNeighbourCount))
                    {
                        InnerMap.RemoveCell(target.Key);
                        results.Results.Add(new MazeGenerationResult(target.Key, CellState.Empty, CellDisplayState.Path));
                    }
                }
                else // Dead
                {
                    if (BornIf.Contains(aliveNeighbourCount))
                    {
                        InnerMap.SetCell(new Cell(CellState.Filled, CellDisplayState.Wall), target.Key);
                        results.Results.Add(new MazeGenerationResult(target.Key, CellState.Filled, CellDisplayState.Wall));
                    }
                }
            }
            return(results);
        }
        private void Log(Point[] points)
        {
            var template =
            @"Shortest Path Request

            Points:
            {0}
            ";
            var data = string.Format(template,  string.Join("\n", points.Select(p => p.ToString()).ToArray()));
            logService.Write(ShortestPath.Core.Domain.Persisted.Log.LogType.SEARCH, data);
        }
Example #17
0
        static void Main(string[] args)
        {
            Point[] arr = new Point[15].Select(x => x = new Point()).ToArray();

            Console.WriteLine("Points:\n"
                              + string.Join("\n", arr.Select(x => x.ToString())));

            Console.WriteLine("\nPoints in first octant:\n"
                              + string.Join("\n", arr.Where(x => x.InFirstOctant())));
            Console.ReadLine();
        }
        public static Point[] SmoothPoints(Point[] points, Func<double[], double[]> scalarSmooth)
        {
            Contract.Requires(points != null);
            Contract.Requires(scalarSmooth != null);
            Contract.Ensures(Contract.Result<Point[]>() != null);
            Contract.Ensures(Contract.Result<Point[]>().Length != points.Length);

            var x = points.Select(p => p.X).ToArray();
            var y = points.Select(p => p.Y).ToArray();

            x = scalarSmooth(x);
            y = scalarSmooth(y);

            var n = points.Length;
            var result =
                Enumerable.Range(0, n)
                .Select(i => new Point(x[i], y[i]))
                .ToArray();

            return result;
        }
Example #19
0
 public void Send(Point[] points)
 {
     using (var client = new Producer(_router))
     {
         var messages = points.Select(x =>
             {
                 var pointToString = _formatter.PointToString(x);
                 return new Message(pointToString);
             }).ToArray();
         client.SendMessageAsync("InfluxCapacitor", messages).Wait();
     }
 }
        private void Timer_Tick(object sender, EventArgs e)
        {
            ViewPortModel.Children.Where(o => o.GetName() == "Aircraft").ToList().ForEach(el =>
            {
                Matrix3D aircraftPosition = (el as ModelVisual3D).Children[0].GetTransform();


                ViewPortModel.Children.Where(o => o.GetType().Equals(typeof(BoxVisual3D))).ToList().ForEach(box =>
                {
                    Matrix3D boxPosition = box.GetTransform();
                    Rect3D boxBounds     = (box as BoxVisual3D).Model.Bounds;

                    Point[] p = new Point[4];
                    p[0]      = new Point(boxPosition.OffsetX - (boxBounds.SizeX * 100) / 2, boxPosition.OffsetY + (boxBounds.SizeY * 100) / 2);
                    p[1]      = new Point(boxPosition.OffsetX - (boxBounds.SizeX * 100) / 2, boxPosition.OffsetY - (boxBounds.SizeY * 100) / 2);
                    p[2]      = new Point(boxPosition.OffsetX + (boxBounds.SizeX * 100) / 2, boxPosition.OffsetY + (boxBounds.SizeY * 100) / 2);
                    p[3]      = new Point(boxPosition.OffsetX + (boxBounds.SizeX * 100) / 2, boxPosition.OffsetY - (boxBounds.SizeY * 100) / 2);

                    bool xy = pnpoly(4, p.Select(point => (float)point.X).ToArray(), p.Select(point => (float)point.Y).ToArray(), (float)aircraftPosition.OffsetX, (float)aircraftPosition.OffsetY);

                    Point[] p2 = new Point[4];
                    p2[0]      = new Point(boxPosition.OffsetX - (boxBounds.SizeX * 100) / 2, boxPosition.OffsetZ + (boxBounds.SizeZ * 100) / 2);
                    p2[1]      = new Point(boxPosition.OffsetX - (boxBounds.SizeX * 100) / 2, boxPosition.OffsetZ - (boxBounds.SizeZ * 100) / 2);
                    p2[2]      = new Point(boxPosition.OffsetX + (boxBounds.SizeX * 100) / 2, boxPosition.OffsetZ + (boxBounds.SizeZ * 100) / 2);
                    p2[3]      = new Point(boxPosition.OffsetX + (boxBounds.SizeX * 100) / 2, boxPosition.OffsetZ - (boxBounds.SizeZ * 100) / 2);

                    bool xz = pnpoly(4, p2.Select(point => (float)point.X).ToArray(), p2.Select(point => (float)point.Y).ToArray(), (float)aircraftPosition.OffsetX, (float)aircraftPosition.OffsetZ);

                    if (xy && xz)
                    {
                        Debug.WriteLine("Collision");
                    }
                });
            }
                                                                                          );
        }
Example #21
0
        //TODO: Improve getting center coordinate
        public static SphereNode ByThreePoints(Point point1, Point point2, Point point3)
        {
            var points = new Point[3] {
                point1, point2, point3
            };

            using (Polygon pol = Polygon.ByPoints(points))
                using (Point c = pol.Center())
                {
                    var center = new double[3] {
                        c.X, c.Y, c.Z
                    };
                    double radius = points.Select(pt => c.DistanceTo(pt)).Max();
                    return(new SphereNode(center, radius));
                }
        }
Example #22
0
        /// <summary>
        /// Clears the clusters.
        /// </summary>
        /// <param name="listOfClusters">The list of clusters.</param>
        private IList <RecognizedObject> FindNewCenters(IList <Cluster> listOfClusters)
        {
            Point[] newCentres = new Point[listOfClusters.Count];

            for (int i = 0; i < listOfClusters.Count; i++)
            {
                newCentres[i] = new Point(listOfClusters[i].ItemsList.Select(item => item.CalculatedCenter.X).Average(),
                                          listOfClusters[i].ItemsList.Select(item => item.CalculatedCenter.Y).Average());
            }

            return(newCentres.Select(item => new RecognizedObject
            {
                Center = item
            })
                   .ToList());
        }
Example #23
0
        public static string DrawSVGPoligonsfromSegments(BaseSegment[] segments, string pattern)
        {
            string result = string.Empty;

            int circleThickness = 10;

            result += "<?xml version=\"1.0\" encoding=\"utf-8\"?><!DOCTYPE svg> <svg width =\"" + (CONSTS.DEFAULT_MARKER_DIAMETER + circleThickness * 2) + "\" height =\"" + (CONSTS.DEFAULT_MARKER_DIAMETER + circleThickness * 2) + "\" >";
            int center = (CONSTS.DEFAULT_MARKER_DIAMETER + circleThickness * 2) / 2;

            result += "<rect width= \"" + (CONSTS.DEFAULT_MARKER_DIAMETER + circleThickness * 2) + "\" height=\"" + (CONSTS.DEFAULT_MARKER_DIAMETER + circleThickness * 2) + "\" fill = \"none\" stroke = \"black\" stroke-width = \"" + circleThickness + "\"/>";

            result = DrawOrientationCircles(result, circleThickness);

            int idx = 0;

            foreach (var item in segments)
            {
                if (item == null || item.Points == null || item.Points[0] == null)
                {
                    continue;
                }
                var points = new Point[] {
                    new Point(CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[0].X + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[0].Y + circleThickness),
                    new Point(CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[1].X + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[1].Y + circleThickness),
                    new Point(CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[2].X + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[2].Y + circleThickness),
                    new Point(CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[3].X + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[3].Y + circleThickness),
                    new Point(CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[0].X + circleThickness, CONSTS.DEFAULT_MARKER_DIAMETER * item.Points[0].Y + circleThickness),
                };
                string pts = string.Join(" ", points.Select(x => x.X.ToString().Replace(",", ".") + " , " + x.Y.ToString().Replace(",", ".")));

                if (pattern[idx].Equals('1'))
                {
                    result += "<polygon points =\"" + pts + "\"" + " style =\"fill:black\" />";
                }
                else
                {
                    result += "<polygon points =\"" + pts + "\"" + " style =\"fill:none\" />";
                }
                idx++;
            }

            result += "</svg>";


            return(result);
        }
Example #24
0
        private static Geometry GetDiamondGeometry()
        {
            Point[] points = new Point[] {
                new Point(0, s_itemSize.Height / 2),
                new Point(s_itemSize.Width / 2, s_itemSize.Height),
                new Point(s_itemSize.Width, s_itemSize.Height / 2),
                new Point(s_itemSize.Width / 2, 0)
            };

            PathSegmentCollection psc = new PathSegmentCollection(
                points.Select(point => new LineSegment(point, true)).OfType <PathSegment>());

            PathFigure pf = new PathFigure(points[0], psc, true);

            PathGeometry geometry = new PathGeometry(new PathFigure[] { pf }, FillRule.EvenOdd, null);

            return(geometry);
        }
Example #25
0
        static void Main(string[] args)
        {
            Console.WriteLine("==== Part 1 & 2 ====");
            var foos = LoadMap("input.txt");

            maxX        = foos.Max(f => f.Position.X);
            maxY        = foos.Max(f => f.Position.Y);
            fieldLookup = foos.ToDictionary(f => f.Position);
            Console.WriteLine($"maxX: {maxX}, maxY: {maxY}");

            var slopes = new Point[] { new Point(1, 1), new Point(3, 1), new Point(5, 1), new Point(7, 1), new Point(1, 2) };

            var result1 = slopes
                          .Select(s => CountTrees(s))
                          .Peak()
                          .Aggregate(1, (a, b) => a * b);

            Console.WriteLine($"Part2-Result: {result1}");
        }
Example #26
0
        public bool IsChatCollapsed(Bitmap screen)
        {
            //Already moved down pixels
            var lightPixelsLower    = new Point[] { new Point(151, 2115), new Point(158, 2136), new Point(166, 2115), new Point(173, 2124), new Point(171, 2136) };
            var darkPixelsLower     = new Point[] { new Point(156, 2120), new Point(168, 2131), new Point(172, 2110), new Point(146, 2118), new Point(176, 2133) };
            var isLowerAndCollapsed = !lightPixelsLower.Any(p => screen.GetPixel(p.X, p.Y).ToHsv().Value <= 0.3f) &&
                                      !darkPixelsLower.Any(p => screen.GetPixel(p.X, p.Y).ToHsv().Value >= 0.15f);

            if (isLowerAndCollapsed)
            {
                return(true);
            }

            //Not yet moved down pixels
            var lightPixelsHigher    = lightPixelsLower.Select(p => new Point(p.X, p.Y - 27));
            var darkPixelsHigher     = darkPixelsLower.Select(p => new Point(p.X, p.Y - 27));
            var isHigherAndCollapsed = !lightPixelsHigher.Any(p => screen.GetPixel(p.X, p.Y).ToHsv().Value <= 0.3f) &&
                                       !darkPixelsHigher.Any(p => screen.GetPixel(p.X, p.Y).ToHsv().Value >= 0.15f);

            return(isLowerAndCollapsed || isHigherAndCollapsed);
        }
Example #27
0
        public void DrawPolyline(Point[] points)
        {
            _canvas.DrawLines(Pens.Black, points.Select(p => GetTranslatedPoint(p))
                                                .Select(p => new PointF((p.X / 200.0f) * zoom, (p.Y / 200.0f) * zoom))
                                                .ToArray());

            //var pointsString = new StringBuilder();

            //var firstPoint = GetTranslatedPoint(points[0]);
            //pointsString.AppendLine("ctx.beginPath();");
            //pointsString.AppendLine(string.Format("ctx.moveTo({0}, {1});", firstPoint.X / 1000, -firstPoint.Y / 1000));

            //for (int i = 1; i < points.Length; i++)
            //{
            //    var currentPoint = GetTranslatedPoint(points[i]);
            //    pointsString.AppendLine(string.Format("ctx.lineTo({0}, {1});", currentPoint.X / 1000, -currentPoint.Y / 1000));
            //}

            //pointsString.AppendLine("ctx.stroke();");

            //AppendTextToOutput(pointsString.ToString());
        }
Example #28
0
        protected override void OnSpellEffect(Spell spell)
        {
            var targetPos = spell.Controller.Hero.PositionAs<TilePosition>();

            Point[] area = new Point[]
            {
                new Point(1,1),
                new Point(-1,-1),
                new Point(-1,1),
                new Point(1,-1),
                new Point(0,1),
                new Point(0,-1),
                new Point(1,0),
                new Point(-1,0)
            };
            TilePosition[] tileArea = area.Select(pos => new TilePosition(targetPos.Point + pos)).ToArray();
            foreach (TilePosition tile in tileArea)
            {
                var targets = this.World.GetEntities(tile).OfType<UnitEntity>();
                foreach (UnitEntity target in targets)
                    target.Module<AttackModule>().Damage += 2;
            }
        }
        public void PutManyRectangles_AndTagCloudIsCircularity(int rectanglesCount)
        {
            circularCloudLayouter = new CircularTagsCloudLayouter();
            const int randomRange = 200;
            var       random      = new Random(randomRange);

            for (var i = 0; i < rectanglesCount; i++)
            {
                rectangleSizes.Add(new Size(1 + random.Next(randomRange), 1 + random.Next(randomRange)));
            }

            double maxDistanceFromCenter = 0;
            double tagCloudSquare        = 0;

            for (var i = 0; i < rectanglesCount; i++)
            {
                var rectangle = circularCloudLayouter.PutNextRectangle(rectangleSizes[i]);
                var vertices  = new Point[]
                {
                    new Point(rectangle.Left, rectangle.Bottom),
                    new Point(rectangle.Left, rectangle.Top),
                    new Point(rectangle.Right, rectangle.Bottom),
                    new Point(rectangle.Right, rectangle.Top),
                };
                var theMostFarVertexFromCenter = vertices
                                                 .Select((x) => CalcDistanceBetweenPoints(cloudCenter, x))
                                                 .Max();
                maxDistanceFromCenter = Math.Max(maxDistanceFromCenter,
                                                 theMostFarVertexFromCenter);
                tagCloudSquare += rectangleSizes[i].Width * rectangleSizes[i].Height;
            }
            var circleArea   = Math.PI * maxDistanceFromCenter * maxDistanceFromCenter;
            var squaresRatio = tagCloudSquare / circleArea;

            squaresRatio.Should().BeGreaterOrEqualTo(0.3);
        }
Example #30
0
        private void DrawWireframeDrill()
        {
            Gl.glColor3f(0, 0, 0);
            Gl.glLineWidth(1);

            Rotate rotate  = new Rotate();
            Point  tPoint  = new Point();
            Point  tPoint2 = new Point();


            Point[] arr1;// = new Point[64];
            // SetupArray(arr1);


            Point[] arr2 = new Point[64];
            SetupArray(arr2);

            //   O = Math.PI * 1 / 180;

            double h, dH, H, tH, t2H, L2, dL;
            int    i, j;
            int    Q = (int)(_form1.O1 * 180 / Math.PI + 5);


            h  = _form1.R1 / Math.Tan(_form1.O1);
            H  = _form1.Array[_form1.ActQuant / 2].Y;
            dH = (2 * H) / (Q - 1);

            t2H = -H;
            L2  = t2H / h;
            rotate.SetRotate(L2, 0, 0, 1);
            for (j = 0; j < _form1.ActQuant; j++)
            {
                rotate.TransformPoint(_form1.ArraySv[j], arr2[j]);
            }

            dL = Math.Atan(_form1.ArraySv[0].Y / _form1.ArraySv[0].X);
            dL = (Math.PI - dL) * 2 / (12 - 1);

            for (i = 0; i < Q; i++)
            {
                tH  = t2H;
                t2H = -H + (i + 1) * dH;

                L2 = t2H / h;
                //  CopyArray(arr1, arr2);
                arr1 = arr2.Select(o => o.Clone()).ToArray();
                rotate.SetRotate(L2, 0, 0, 1);
                for (j = 0; j < _form1.ActQuant; j++)
                {
                    rotate.TransformPoint(_form1.ArraySv[j], arr2[j]);
                }

                Gl.glBegin(Gl.GL_LINE_STRIP);
                for (j = 0; j < _form1.ActQuant; j++)
                {
                    Gl.glVertex3d(arr1[j].X, arr1[j].Y, tH);
                }
                Gl.glEnd();

                Gl.glBegin(Gl.GL_LINE_STRIP);
                for (j = 0; j < 12; j++)
                {
                    rotate.SetRotate(dL * j, 0, 0, 1);
                    rotate.TransformPoint(arr1[0], tPoint);
                    Gl.glVertex3d(tPoint.X, tPoint.Y, tH);
                }
                Gl.glEnd();

                if (i < (Q - 1))
                {
                    Gl.glBegin(Gl.GL_LINES);
                    for (j = 0; j < _form1.ActQuant; j++)
                    {
                        Gl.glVertex3d(arr1[j].X, arr1[j].Y, tH);
                        Gl.glVertex3d(arr2[j].X, arr2[j].Y, t2H);
                    }
                    Gl.glEnd();

                    Gl.glBegin(Gl.GL_LINES);
                    for (j = 0; j < 12; j++)
                    {
                        rotate.SetRotate(dL * j, 0, 0, 1);
                        rotate.TransformPoint(arr1[0], tPoint);
                        rotate.TransformPoint(arr2[0], tPoint2);
                        Gl.glVertex3d(tPoint.X, tPoint.Y, tH);
                        Gl.glVertex3d(tPoint2.X, tPoint2.Y, t2H);
                    }
                    Gl.glEnd();
                }
            }
        }
Example #31
0
 public OctavePlot(Point[] points)
 {
     dataX = Embrace(String.Join(",", points.Select(d => d.X.ToString(cul))));
     dataY = Embrace(String.Join(",", points.Select(d => d.Y.ToString(cul))));
 }
Example #32
0
    private static Point calculateGiantsMedianPoint(Point[] giants)
    {
        var giantXs = giants.Select(g => g.X).OrderBy(x => x);
        var medianX = (giantXs.Count() % 2 == 0)
            ? giantXs.Skip(giantXs.Count() / 2 - 1).Take(2).Sum() / 2
            : giantXs.Skip((giantXs.Count() - 1) / 2).First();
        var giantYs = giants.Select(g => g.Y).OrderBy(y => y);
        var medianY = (giantYs.Count() % 2 == 0)
            ? giantYs.Skip(giantYs.Count() / 2 - 1).Take(2).Sum() / 2
            : giantYs.Skip((giantYs.Count() - 1) / 2).First();

        var target = new Point { X = medianX, Y = medianY };
        return target;
    }
Example #33
0
 public int[] GetIDsFromCells(Point[] cell)
 {
     return cell.Select(value => this.GetIDFromCell(value)).ToArray();
 }
            public static Polygon2D[] GetPolyUnion(Point[][] polygons)
            {
                if (polygons.Length == 0)
                {
                    return new Polygon2D[] { new Polygon2D(new Point[0]) };
                }
                else if (polygons.Length == 1)
                {
                    return new Polygon2D[] { new Polygon2D(polygons[0]) };
                }

                // See which edges are intersecting
                EdgeIntersection[] intersections = GetIntersections(polygons);
                if (intersections.Length == 0)
                {
                    return polygons.Select(o => new Polygon2D(o)).ToArray();
                }

                // Divide into islands of polygons
                var islands = GetIslands(polygons, intersections);

                List<Polygon2D> retVal = new List<Polygon2D>();

                // Union each island independently
                foreach (PolygonIsland island in islands)
                {
                    if (island.Polygons.Length == 1)
                    {
                        retVal.Add(new Polygon2D(island.Polygons[0]));       // there is only one polygon in this island (no intersections)
                    }
                    else
                    {
                        retVal.AddRange(MergeIsland(island));       // the island might actually be several polygons butted up next to each other
                    }
                }

                // Exit Function
                return retVal.ToArray();
            }
Example #35
0
        /*public static Point[] Interpolate(Point[] points, float[] xi)
        {
            var interpolatedvalues = new List<Point>();

            points = points.OrderBy(x => x.X).ToArray();

            //Assumes inorder enumerables
            var i = 0;

            foreach (var xValue in xi)
            {
                while (points[i].X < xValue)
                {
                    i++;
                    if (i >= points.Length)
                        break;
                }

                if (i >= points.Length)
                    break;

                if (Math.Abs(points[i].X - xValue) < Double.Epsilon)
                {
                    interpolatedvalues.Add(points[i]);
                }
                else
                {
                    var x0 = 0d;
                    var y0 = 0d;

                    if (i > 0)
                    {
                        x0 = points[i - 1].X;
                        y0 = points[i - 1].Y;
                    }

                    var x1 = points[i].X;
                    var y1 = points[i].Y;

                    var yValue = y0 * (xValue - x1) / (x0 - x1) + y1 * (xValue - x0) / (x1 - x0);
                    interpolatedvalues.Add(new Point(xValue, yValue));
                }
            }

            return interpolatedvalues.OrderBy(x => x.X).ToArray();
        }*/
        public static Point[] Interpolate(Point[] points, float[] xi)
        {
            var interpolatedPoints = new Point[xi.Length];

            for (var i = 0; i < xi.Length; i++)
            {
                interpolatedPoints[i] = new Point(xi[i], Interp1(points.Select(x => x.X).ToList(), points.Select(x => x.Y).ToList(), xi[i]));
            }

            return interpolatedPoints;
        }
Example #36
0
 public IDrawingGraphics FillPolygon(Point[] points)
 {
     this.Graphics.FillPolygon(this.state.CurrentBrush, points.Select((p) => new Point(CalculateX(p.X), CalculateY(p.Y))).ToArray());
     return this;
 }
        private void Log(Point[] points, bool cacheHit)
        {
            var template =
            @"Road Time Request
            Cache:
            {0}

            Points:
            {1}
            ";
            var data = string.Format(template, cacheHit ? "hit" : "miss", string.Join("\n", points.Select(p => p.ToString()).ToArray()));
            logService.Write(ShortestPath.Core.Domain.Persisted.Log.LogType.ROAD_TIME_QUERY, data);
        }
Example #38
0
 public static IControl Line(Point <Points> start, Point <Points> end, Stroke stroke)
 {
     return(Line(start.Select(Observable.Return), end.Select(Observable.Return), stroke));
 }
Example #39
0
    private string[] PathWithRotation(Point nextRoom, int rotation, Point to, int distance, List<Direction> testedDirections, Point[] rocks)
    {
        string[] path;

        Rotate(nextRoom, rotation);

        var direction = nextStepOf(RoomTypeAt(nextRoom), nextRoom.Position);
        if (testedDirections.Contains(direction))
        {
            Console.Error.WriteLine("Exiting room " + nextRoom + " at " + nextRoom.Position + " has already been tested.");
            path = null; //Already tested, so short circuit
        }
        else
        {
            testedDirections.Add(direction);
            //Console.Error.WriteLine("Testing " + nextRoom + " from " + nextRoom.Position + " as tile #" + RoomTypeAt(nextRoom));
            if (!IsValidEntry(nextRoom))
            {
                path = null;
            }
            else
            {
                var newRocks = rocks.Select(rock =>
                {
                    var newRock = rock + nextStepOf(RoomTypeAt(rock), rock.Position);
                    Console.Error.WriteLine("Rock moved from " + rock + " to " + newRock);
                    return newRock;
                }).ToArray();

                path = TestPaths(nextRoom, to, distance, newRocks);
            }
        }

        Rotate(nextRoom, 4 - rotation);
        return path;
    }
        private static Geometry GetDiamondGeometry()
        {
            Point[] points = new Point[]{
                new Point(0, s_itemSize.Height / 2),
                new Point(s_itemSize.Width / 2, s_itemSize.Height),
                new Point(s_itemSize.Width, s_itemSize.Height / 2),
                new Point(s_itemSize.Width / 2, 0)};

            PathSegmentCollection psc = new PathSegmentCollection(
                points.Select(point => new LineSegment(point, true)).OfType<PathSegment>());

            PathFigure pf = new PathFigure(points[0], psc, true);

            PathGeometry geometry = new PathGeometry(new PathFigure[] { pf }, FillRule.EvenOdd, null);

            return geometry;
        }
 private static Point[] GetPolygon(Point center, Point[] polygon, double percent)
 {
     return polygon.
         Select(o =>
         {
             Vector displace = o - center;
             displace *= percent;
             return center + displace;
         }).
         ToArray();
 }
            //TODO: This method is too simple.  There could be multiple polygons each with their own holes
            private static Polygon2D[] MergeIslandSprtFindAHoles(Point[][] polygons)
            {
                if (polygons.Length < 2)
                {
                    throw new ArgumentException("At least two polygons need to be passed to this method: " + polygons.Length.ToString());
                }

                // Find the parent, the rest will be holes
                int parentIndex = MergeIslandSprtFindAHolesSprtParent(polygons);
                if (parentIndex < 0)
                {
                    // Didn't find a parent.  Return each as its own polygon
                    //TODO: These are likely touching.  Try to do a better job of coming up with a single polygon
                    return polygons.Select(o => new Polygon2D(o)).ToArray();
                }

                List<Point[]> holes = new List<Point[]>(polygons);
                holes.RemoveAt(parentIndex);

                return new Polygon2D[] { new Polygon2D(polygons[parentIndex], holes.ToArray()) };
            }
Example #43
0
 public static Point GetCentroid(Point[] points)
 { return Point.Truncate(PolygonF.GetCentroid(points.Select(p => new PointF((float)p.X, (float)p.Y)).ToArray())); }
Example #44
0
        private void MainForm_Paint(object sender, PaintEventArgs e)
        {
            e.Graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
            e.Graphics.SmoothingMode      = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            e.Graphics.FillRectangle(Brushes.White, e.ClipRectangle);

            Point[] corners = new Point[]
            {
                new Point(0, 0),
                new Point(0, scale),
                new Point(scale, 0),
                new Point(scale, scale),
            };

            Point3D[] projectedCorners = corners
                                         .Select(p => Project(GetAxisPoint(p.X, p.Y)))
                                         .ToArray();

            int[] indices = Enumerable
                            .Range(0, 4)
                            .OrderBy(i => projectedCorners[i].z)
                            .ToArray();

            int fl = projectedCorners[indices[0]].x < projectedCorners[indices[1]].x ? indices[0] : indices[1];
            int fr = indices[0] + indices[1] - fl;
            int nl = projectedCorners[indices[2]].x < projectedCorners[indices[3]].x ? indices[2] : indices[3];
            int nr = indices[2] + indices[3] - nl;

            if (projectedCorners[fl].x <= projectedCorners[nl].x && projectedCorners[fr].x <= projectedCorners[nr].x)
            {
                PaintPart(corners[fr], corners[nl], e.Graphics);
            }
            else if (projectedCorners[fl].x >= projectedCorners[nl].x && projectedCorners[fr].x >= projectedCorners[nr].x)
            {
                PaintPart(corners[fl], corners[nr], e.Graphics);
            }
            else
            {
                int vx = (corners[fr].X - corners[fl].X) / scale;
                int vy = (corners[fr].Y - corners[fl].Y) / scale;
                int ux = (corners[nl].X - corners[fl].X) / scale;
                int uy = (corners[nl].Y - corners[fl].Y) / scale;
                int ms = -1;
                for (int i = 0; i < scale; i++)
                {
                    int cvx1 = vx * i;
                    int cvx2 = vx * (i + 1);
                    int cvy1 = vy * i;
                    int cvy2 = vy * (i + 1);

                    Point cfl = new Point(corners[fl].X + cvx1, corners[fl].Y + cvy1);
                    Point cfr = new Point(corners[fl].X + cvx2, corners[fl].Y + cvy2);
                    Point cnl = new Point(corners[nl].X + cvx1, corners[nl].Y + cvy1);
                    Point cnr = new Point(corners[nl].X + cvx2, corners[nl].Y + cvy2);

                    Point3D pcfl = Project(GetAxisPoint(cfl.X, cfl.Y));
                    Point3D pcfr = Project(GetAxisPoint(cfr.X, cfr.Y));
                    Point3D pcnl = Project(GetAxisPoint(cnl.X, cnl.Y));
                    Point3D pcnr = Project(GetAxisPoint(cnr.X, cnr.Y));

                    ms = i;
                    break;
                }

                if (ms != 1)
                {
                    for (int u = 0; u < scale; u++)
                    {
                        Point ufl = new Point(corners[fl].X + u * ux, corners[fl].Y + u * uy);
                        Point ufr = new Point(corners[fr].X + u * ux, corners[fr].Y + u * uy);
                        Point unl = new Point(corners[fl].X + (u + 1) * ux, corners[fl].Y + (u + 1) * uy);
                        Point unr = new Point(corners[fr].X + (u + 1) * ux, corners[fr].Y + (u + 1) * uy);

                        Point cfl = new Point(ufl.X + ms * vx, ufl.Y + ms * vy);
                        Point cfr = new Point(ufl.X + (ms + 1) * vx, ufl.Y + (ms + 1) * vy);
                        Point cnl = new Point(unl.X + ms * vx, unl.Y + ms * vy);
                        Point cnr = new Point(unl.X + (ms + 1) * vx, unl.Y + (ms + 1) * vy);

                        PaintPart(ufl, cnl, e.Graphics);
                        PaintPart(ufr, cnr, e.Graphics);
                        PaintPart(cfl, cnr, e.Graphics);
                    }
                }
            }

            Line(new Point3D(0, 0, 0), new Point3D(1, 0, 0), e.Graphics, Pens.Red);
            Line(new Point3D(0, 0, 0), new Point3D(0, 1, 0), e.Graphics, Pens.Green);
            Line(new Point3D(0, 0, 0), new Point3D(0, 0, 1), e.Graphics, Pens.Blue);
        }
Example #45
0
        Sprite CreateSprite(Mobs ID, Enum state)
        {
            Point size;

            Point[] animation;
            string  spritesheet = "Sprites/Enimies2";
            bool    themeOffset = true;

            switch (ID)
            {
            case Mobs.goomba:
                size      = new Point(16, 16);
                animation = new Point[] { new Point(0, 16), new Point(16, 16) };
                break;

            case Mobs.GreenFlyingKoopa:
            case Mobs.greenKoopa:
                switch ((KoopaEnum)state)
                {
                case KoopaEnum.FLYING:
                    size      = new Point(16, 24);
                    animation = new Point[] { new Point(128, 8), new Point(144, 8) };
                    break;

                case KoopaEnum.WALKING:
                    size      = new Point(16, 24);
                    animation = new Point[] { new Point(96, 8), new Point(112, 8) };
                    break;

                case KoopaEnum.IN_SHELL:
                case KoopaEnum.IN_SHELL_MOVING:
                    size      = new Point(16, 16);
                    animation = new Point[] { new Point(160, 16) };
                    break;

                case KoopaEnum.IN_SHELL_TRANSITION:
                    size      = new Point(16, 16);
                    animation = new Point[] { new Point(176, 16) };
                    break;

                default:
                    return(NullSprite.Instance);
                }
                break;

            case Mobs.RedFlyingKoopa:
            case Mobs.redKoopa:
                if (offsets[Theme].Y != 128)
                {
                    switch ((KoopaEnum)state)
                    {
                    case KoopaEnum.FLYING:
                        size      = new Point(16, 24);
                        animation = new Point[] { new Point(128, 72), new Point(144, 72) };
                        break;

                    case KoopaEnum.WALKING:
                        size      = new Point(16, 24);
                        animation = new Point[] { new Point(96, 72), new Point(112, 72) };
                        break;

                    case KoopaEnum.IN_SHELL:
                    case KoopaEnum.IN_SHELL_MOVING:
                        size      = new Point(16, 16);
                        animation = new Point[] { new Point(160, 80) };
                        break;

                    case KoopaEnum.IN_SHELL_TRANSITION:
                        size      = new Point(16, 16);
                        animation = new Point[] { new Point(176, 80) };
                        break;

                    default:
                        return(NullSprite.Instance);
                    }
                }
                else
                {
                    switch ((KoopaEnum)state)
                    {
                    case KoopaEnum.FLYING:
                        size      = new Point(16, 24);
                        animation = new Point[] { new Point(128, 168), new Point(144, 168) };
                        break;

                    case KoopaEnum.WALKING:
                        size      = new Point(16, 24);
                        animation = new Point[] { new Point(96, 168), new Point(112, 168) };
                        break;

                    case KoopaEnum.IN_SHELL:
                    case KoopaEnum.IN_SHELL_MOVING:
                        size      = new Point(16, 16);
                        animation = new Point[] { new Point(160, 176) };
                        break;

                    case KoopaEnum.IN_SHELL_TRANSITION:
                        size      = new Point(16, 16);
                        animation = new Point[] { new Point(176, 176) };
                        break;

                    default:
                        return(NullSprite.Instance);
                    }
                }
                themeOffset = false;
                break;

            case Mobs.HammerBro:
                switch ((BroEnum)state)
                {
                case BroEnum.THROWING:
                    animation = new[] { new Point(352, 8), new Point(368, 8) };
                    break;

                case BroEnum.JUMPING:
                    animation = new[] { new Point(336, 8) };
                    break;

                case BroEnum.WALKING:
                    animation = new[] { new Point(320, 8), new Point(336, 8) };
                    break;

                default:
                    return(NullSprite.Instance);
                }
                size = new Point(16, 24);
                break;

            case Mobs.PiranhaPlant:
                size      = new Point(16, 24);
                animation = new Point[] { new Point(191, 8), new Point(208, 8) };
                break;

            case Mobs.BulletBill:
                size      = new Point(16, 16);
                animation = new Point[] { new Point(560, 16) };
                break;

            case Mobs.SuperBill:
            case Mobs.FakeBill:
                size        = new Point(16, 16);
                animation   = new Point[] { new Point(576, 16) };
                themeOffset = false;
                break;

            case Mobs.FatBill:
                size        = new Point(64, 64);
                animation   = new Point[] { new Point(0, 0) };
                spritesheet = "Sprites/BanzaiBillL";
                themeOffset = false;
                break;

            case Mobs.TurboBill:
                size        = new Point(16, 16);
                animation   = new Point[] { new Point(576, 48) };
                themeOffset = false;
                break;

            case Mobs.SpinyEgg:
                size        = new Point(16, 16);
                animation   = new Point[] { new Point(448, 80), new Point(464, 80) };
                themeOffset = false;
                break;

            case Mobs.Spiny:
                size        = new Point(16, 16);
                animation   = new Point[] { new Point(480, 80), new Point(496, 80) };
                themeOffset = false;
                break;

            case Mobs.Lakitu:
                size        = new Point(16, 24);
                animation   = new Point[] { new Point(416, 8) };
                themeOffset = false;
                break;

            case Mobs.LakituThrow:
                size        = new Point(16, 24);
                animation   = new Point[] { new Point(432, 8) };
                themeOffset = false;
                break;

            case Mobs.BooChase:
                spritesheet = ("Sprites/BooChase");
                size        = new Point(16, 16);
                animation   = new Point[] { new Point(0, 0) };
                themeOffset = false;
                break;

            case Mobs.BooHiddn:
                spritesheet = ("Sprites/BooHide");
                size        = new Point(16, 16);
                animation   = new Point[] { new Point(0, 0) };
                themeOffset = false;
                break;

            case Mobs.Bowser:
                size        = new Point(32, 32);
                themeOffset = false;
                switch ((BowserEnum)state)
                {
                case BowserEnum.Breathing:
                    animation = new Point[] { new Point(655, 0) };
                    break;

                case BowserEnum.Walking:
                    animation = new Point[] { new Point(720, 0), new Point(752, 0) };
                    break;

                case BowserEnum.Dashing:
                    animation = new Point[] { new Point(720, 0), new Point(752, 0) };
                    break;

                default:
                    animation = new Point[] { new Point(720, 0) };
                    break;
                }
                break;

            case Mobs.AIBowser:
                size        = new Point(32, 32);
                themeOffset = false;
                switch ((BowserEnum)state)
                {
                case BowserEnum.Breathing:
                    animation = new Point[] { new Point(655, 33) };
                    break;

                case BowserEnum.Walking:
                    animation = new Point[] { new Point(720, 33), new Point(752, 33) };
                    break;

                case BowserEnum.Dashing:
                    animation = new Point[] { new Point(720, 33), new Point(752, 33) };
                    break;

                default:
                    animation = new Point[] { new Point(720, 33) };
                    break;
                }
                break;

            default:
                return(NullSprite.Instance);
            }
            if (themeOffset)
            {
                animation = animation.Select(p => p + offsets[Theme]).ToArray();
            }
            return(new Sprite(Content.Load <Texture2D>(spritesheet), size, animation));
        }