Эффективнее ли включать функцию “проверить местоположение” в “функцию перемещения” для игры или снаружи в качестве внешней функции?
-
12-09-2019 - |
Вопрос
Я создаю игру на 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 () вниз по строке (таким образом, нарушая Единая ответственность;некоторые люди применяют это только на уровне класса, но я рекомендую это для методов, когда вам это может сойти с рук).