Эффективнее ли включать функцию “проверить местоположение” в “функцию перемещения” для игры или снаружи в качестве внешней функции?

StackOverflow https://stackoverflow.com/questions/958060

Вопрос

Я создаю игру на C ++ (кстати, имеет ли значение код, который я использую?), которую можно было бы свободно описать как настольную игру, и мне интересно, какая из этих двух функций "проверить, не выходит ли символ за пределы" более эффективна:

ОДИН:

int main()
{
    //display board
    //get player input
    //move player
    //if player is out of bounds,
      //force player back into bounds
}

ДВА

//int main()
{
    //same thing, except without last two lines.
}
void move(char input)
{
    //if input does not place player out of bounds
      //move player according to input
}

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

Я хотел бы знать, какая из этих двух (систем?) эффективнее или быстрее другой, или, если они обе равны, какой из них был бы лучшим стилем кодирования?

Это было полезно?

Решение

Я бы убедился, что любой переезд законен, прежде чем его переносить.Таким образом, вы сохраняете нормальное состояние вместо того, чтобы пытаться что-то сделать и оставлять "доску" в недопустимом состоянии.Это также имеет больше смысла с точки зрения объектно-ориентированного подхода.Объект не может совершить недопустимое перемещение, поэтому этому перемещению можно доверять.

Другие советы

Последнее выполняется быстрее (не выполнение И отмена).Я бы тоже подумал, что это уборщик, но это вопрос мнения.

Проверка перед перемещением была бы быстрее, за исключением, я полагаю, того, что вероятность того, что человек выйдет за пределы зоны, была бы удивительно низкой.

Что касается стиля, я рекомендую нет проверка границ из метода move (), даже если эта проверка извлекается в его собственный метод, поскольку это дает вам две "причины изменить" метод move () вниз по строке (таким образом, нарушая Единая ответственность;некоторые люди применяют это только на уровне класса, но я рекомендую это для методов, когда вам это может сойти с рук).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top