public int GetMetrica(NodeState state) { int metricaRight = 0; int metricaTop = 0; int metricaTopRight = 0; int metricaLeft = 0; int metricaTopLeft = 0; int metricaDown = 0; int metricaDownLeft = 0; int metricaDownRight = 0; int radius = _nodes.Width > 4 ? 5 : _nodes.Width; for (int i = 1; i < radius; i++) { metricaRight += Metrica(1, 0); metricaTop += Metrica(0, -1); metricaTopRight += Metrica(1, -1); metricaLeft += Metrica(-1, 0); metricaTopLeft += Metrica(-1, -1); metricaDown += Metrica(0, 1); metricaDownLeft += Metrica(-1, 1); metricaDownRight += Metrica(1, 1); } return(new int[] { metricaRight, metricaTop, metricaTopRight, metricaLeft, metricaTopLeft, metricaDown, metricaDownLeft, metricaDownRight, }.Max()); int Metrica(int dx, int dy) { var node = _nodes.GetNode(Point.X + dx, Point.Y + dy); if (node == null) { return(0); } if (node.State == state) { return(10); } return(0); } }
public void MakeTurn(Coordinate coordinate) { _nodes.GetNode(coordinate).State = NodeState.Cross; }