public IEnumerable <PreventRectOrdering> iterPreventRectsOrdering2(System.Drawing.Rectangle rect) { foreach (var preventRect in iterPreventRects()) { double dist = Math.Sqrt(Math.Pow(rect.Y - preventRect.Y, 2) - Math.Pow(rect.X - preventRect.X, 2)); // var a = Point.Subtract(new Point(rect.X, rect.Y), new Point(preventRect.X, preventRect.Y)); var item = new PreventRectOrdering() { rect = preventRect, dist = dist, }; yield return(item); } }
private Pt _calcPreventPt() { // Console.WriteLine("{0} _preventCollision", snake); List <PreventRectOrdering> rectResult = new List <PreventRectOrdering>(); var headPreventCollisionRect = snake.headPreventCollisionRect; foreach (var preventRect in snake.iterPreventRects()) { bool isCollision = _gamePlay.scene.hitTestCollision(preventRect, _ignorePreventCollisionIds); // if (isCollision == false) { double dist = Math.Sqrt(Math.Pow(preventRect.X - headPreventCollisionRect.X, 2) + Math.Pow(preventRect.Y - headPreventCollisionRect.Y, 2)); double weighted = dist; var item = new PreventRectOrdering() { x = preventRect.X, y = preventRect.Y, weighted = dist, }; rectResult.Add(item); } } if (rectResult.Count > 0) { // Console.WriteLine("{0} FindPrevent={1}", snake, rectResult.Count); var rndResult = (from x in rectResult orderby x.weighted descending select x).First(); return(new Pt() { x = rndResult.x, y = rndResult.y }); } return(null); }