¿Es más eficiente para incluir una función de “localización de verificación” en una “función de movimiento” para un juego, o en el exterior como una función externa?

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

Pregunta

Estoy creando un juego en C ++ (hablando de eso, ¿el código que utilizo importa?), Que se desvivían por ser descrito en términos generales como un juego de mesa, y me pregunto cuál de estos dos "comprobar si el personaje está fuera de los límites" funciones es más eficiente:

UNO:

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

dos

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

En esencia, el primero se mueve cada entidad, a continuación, comprueba todas las posiciones de las entidades y los reajusta en consecuencia, y el segundo se asegura de que los jugadores se mueven no le mueva fuera de límites, reather de esperar hasta el final de la bucle.

Me gustaría saber cuál de estos dos sistemas (?) Es más eficiente o más rápido que el otro, o, si los dos son iguales, lo que uno de ellos sería un mejor estilo de codificación?

¿Fue útil?

Solución

Me aseguraría de que jamás se mueve es legal antes de moverlo. De esa manera se mantiene un estado sano en lugar de intentar algo y salir de la "junta" en un estado no válido. También tiene más sentido en una forma orientada a objetos. El objeto no puede hacer un movimiento válido, por tanto, el movimiento se puede confiar.

Otros consejos

Este último es más rápido (no hacer y deshacer). También me parece que es el más limpio, pero eso es una cuestión de opinión.

Comprobación antes de pasar sería más rápido, guardar, supongo, las probabilidades de una persona de salir de los límites de ser notablemente bajo.

En cuanto al estilo, recomiendo no comprobación de los límites de dentro del método move (), incluso si el cheque se extrae en su propio método, ya que eso le da dos "razones para cambiar" el movimiento método () por la línea (rompiendo así Responsabilidad individual ; algunas personas sólo hacen cumplir esto en la clase nivel, pero lo recomiendo para los métodos cuando se puede salir con la suya).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top