private Direction CalculateDirection() { var startInfo = new PointInfo(CalculateRadius(_startPosition), 0); var startCoord = _startPosition; // Ближайшие к луноходу точки var points = new Coord[4]; for (var i = 0; i < 4; i++) { //Up points[0] = new Coord(startCoord.X, startCoord.Y + 1); //Left points[1] = new Coord(startCoord.X - 1, startCoord.Y); //Right points[2] = new Coord(startCoord.X + 1, startCoord.Y); //Down points[3] = new Coord(startCoord.X, startCoord.Y - 1); } // Добавление надёжных точек в возможный план маршрута var oneBlockVision = points.Where(IsFree).ToList(); var infos = new PointInfo[oneBlockVision.Count]; for (var i = 0; i < infos.Length; i++) { infos[i] = new PointInfo(CalculateRadius(oneBlockVision[i]), startInfo.MoveCost); } var min = 2001; var k = 0; // ReSharper disable once InconsistentNaming var min_k = 5; foreach (var inf in infos) { var cost = inf.CalculateCost(); //if (cost == min) //{ // if (_points[k].X < _points[min_k].X || _points[k].Y < _points[min_k].Y) // { // min_k = k; // } //} if (cost < min) { if (BlackList.Contains(points[k])) { k++; continue; } min = cost; min_k = k; } k++; } var d = (Direction) min_k; BlackList.Add(points[min_k]); return d; }