Paso 34: Pong - Gamepad Input
El análisis teórico de la entrada del jugador y AI dejó fuera una llave, pero intuitiva, noción: las palas no deben moverse fuera de la pantalla. La detección de colisión asegura la bola no se movería fuera de la pantalla de juego, pero el siguiente paso es asegurar que el jugador y AI no se pueden mover fuera de este mismo límite. Afirmando que las paletas dentro de los límites de la pantalla, frustración del jugador se mantiene a un mínimo y no hay ningún intento de dibujar los objetos fuera de la pantalla visible. Controladores de gráficos no pueden comprobar de forma explícita que la ubicación es un valor válido, por lo tanto las funciones de gráficos pueden intentar escribir en la memoria fuera del búfer de vídeo.La solución es la misma para el jugador y la IA: antes de intentar mover la paleta, simplemente afirman que la paleta no es en un determinado borde de la pantalla. Puesto que las paletas sólo pueden moverse verticalmente, hay solamente dos casos. Supongamos que la paleta está intentando moverse hacia arriba. Antes de modificar la ubicación lógica, Compruebe la coordenada y. Si es 0, la paleta es tangente a la parte superior de la pantalla y no debe moverse hacia arriba más.
Deja el caso donde la paleta se mueve hacia abajo. Puesto que la altura de la paleta es una constante, h, entonces el punto más bajo de la esquina superior izquierda debe ser (x, Y - h), donde x es el punto fijo horizontal de la paleta y Y es la altura de la pantalla. Para ir cualquier más bajo significaría la paleta no es simplemente tangente, sino que se cruzan, con el borde inferior de la pantalla.
Ahora, para algunos contenidos más fresco. La entrada del juego debe ser intercalada entre movimiento de la bola y el código de detección de colisión, pero no hay ninguna relación entre el código de la AI y el código del juego entrado. Los conductores, una vez más, proporcionan una función agradable para el manejo de entrada de mando en el PIC de XGS. La función de Gamepad_Read() una constante como un argumento que determina que mando a leer (GAMEPAD_0 o GAMEPAD_1) y devuelve un número que representa lo que botón se ha presionado. Los botones sólo es necesarios para este juego son el y botones en el D-pad, representado por GAMEPAD_UP y GAMEPAD_DOWN, respectivamente.
Usando una instrucción switch para leer la entrada, para cada caso, lo único que hacer es ajustar p1_y de la manera correcta, con un enganche. Como la paleta de AI, la paleta no debe rodar fuera de la pantalla. La solución es exactamente igual, simplemente Compruebe que hay todavía sitio para mover la paleta antes de ajustar p1_y. El código del juego entrado debe parecerse:
switch (Gamepad_Read(GAMEPAD_0)) { case GAMEPAD_UP: if (p1_y != 0) p1_y--; break; case GAMEPAD_DOWN: if (p1_y != SCREEN_HEIGHT-PADDLE_HEIGHT) p1_y++; break; }