Пример #1
0
        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);
            }
        }
Пример #2
0
 public void MakeTurn(Coordinate coordinate)
 {
     _nodes.GetNode(coordinate).State = NodeState.Cross;
 }