gagik12 / OOP

0 stars 1 forks source link

Замечания по Labyrinth #3

Open oMystique opened 8 years ago

oMystique commented 8 years ago

map1_not_found

void FillTheMapWithZeros(Map &map)
{
    for (int row = 0; row != SIZE_MAP - 1; ++row)
    {
        for (int colum = 0; colum != SIZE_MAP - 1; ++colum)
        {
            map[row][colum] = 0;
        }
    }
}

ибо его можно будет заменить.

Map(SIZE_MAP, std::vector<int>(SIZE_MAP, 0)

Возможно, стоит явно объявить конструктор по умолчанию у структуры Labirinth, где, в списках инициализации, задать размер вектору, при этом заполнив его нулями.

            if (map[y][x] == -1)
            {
                outputFile << '#';
            }
            else if (map[y][x] == 1)
            {
                outputFile << 'A';
            }
            else if (map[y][x] == -2)
            {
                outputFile << 'B';
            }
            else if(map[y][x] == -3)
            {
                outputFile << '.';
            }
            else
            {
                outputFile << ' ';
            }

Например, WALL Так же, стоит подумать об использовании константы вида std::map для хранения пар, где ключом будет являться число типа int, а значением char. Например:

std::map<int, char> exampleMap = {
    {WALL, '#'},
    {START, 'A'},
    {END, 'B'},
    ...
}

Тогда, описанное выше ветвление можно будет заменить чем-то вроде этого:

    auto exampleResult = exampleMap.find(3);
    if (exampleResult == exampleMap.end())
    {
        outputFile << ' ';
    }
    else    
    {   
        outputFile << exampleResult->second;    
    }
            case 'A':
                labirinth.map[row][colum] = 1;
                labirinth.startPoint = { row, colum };
                if (!haveStart)
                {
                    haveStart = true;
                }
                else
                {
                    outputFile << "We found more than one starting points!\n";
                    wasError = true;
                }
                break;

И превратит кусок кода, расположенный чуть выше, во что-то вроде:

            case 'A':
                if (labirinth.startPoint.is_initialized())
                {
                    outputFile << "We found more than one starting points!\n";
                    wasError = true;
                }
                labirinth.map[row][colum] = 1;
                labirinth.startPoint = { row, colum };
                break;

где labirinth.startPoint имеет тип boost::optional<Point>

Пока k = 0.9

gagik12 commented 8 years ago

Спасибо, тесты падают из-за того, что пустой файл в git нельзя залить.