Является ли более эффективным включение функции «проверки местоположения» в «функцию перемещения» для игры или вне ее в качестве внешней функции? - PullRequest
0 голосов
/ 06 июня 2009

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

ONE:

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

TWO

//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
}

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

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

Ответы [ 3 ]

0 голосов
/ 06 июня 2009

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

0 голосов
/ 06 июня 2009

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

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

0 голосов
/ 06 июня 2009

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

...