Este documento describe el desarrollo de una versión mejorada del videojuego Ping-Pong. Se detallan las mejoras implementadas como la opción de iniciar la partida con un switch, la existencia de dos porterías, y la posibilidad de jugar a dos velocidades diferentes. También se explican los componentes electrónicos utilizados y los diagramas de bloques de los módulos del juego. Finalmente, se resumen los problemas encontrados y cómo fueron resueltos.
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Videojuego Ping-Pong versionado en VHDL
1. Informe práctica
VIDEOJUEGO PING-PONG
VERSIONADO
Grupo 16
Ana García Saiz
Yohanna Díaz Flores
Diseño de Sistemas Electrónicos
Grado en Ingeniería en Tecnologías Industriales
Universidad Rey Juan Carlos
Curso 2015/2016
2. Índice
1. Responsabilidad de los miembros del grupo ............................................................................ 1
2. Desarrollo del videojuego Ping-Pong versionado ..................................................................... 1
2.1. Introducción ....................................................................................................................... 1
2.2. Botones, switches y displays empleados ........................................................................... 2
2.2.1. Movimiento de los jugadores...................................................................................... 2
2.2.2. Transcurso de la partida.............................................................................................. 3
2.3. Diseño del videojuego........................................................................................................ 5
2.3.1. Diseño estructural....................................................................................................... 5
2.3.2. Diagrama de bloques del módulo Interfaz_pb............................................................ 6
2.3.2. Diagrama de bloques del módulo Fondo.................................................................... 7
2.4. Problemas encontrados y resolución............................................................................... 10
2.5. Mejoras implementadas .................................................................................................. 10
2.6. Enlace al video de PING-PONG versionado………………………………………………………………….11
3. 1
1. Responsabilidad de los miembros del grupo
El trabajo se ha repartido conjunta y equilibradamente entre las dos. Todos los problemas
solventados y las mejoras conseguidas han sido fruto del esfuerzo y la participación activa de
ambas.
2. Desarrollo del videojuego Ping-Pong versionado
2.1. Introducción
Se trata de un videojuego cuyo objetivo y forma de jugar son análogos a los del Ping-Pong
original.
Esta versión, en concreto, incluye como mejoras:
- La opción de iniciar la partida a través de un switch.
- La existencia de dos porterías.
- La posibilidad de jugar a dos velocidades distintas: “lento” y “rápido”, rótulos que,
además, aparecen en los displays de 7 segmentos.
Dichas mejoras se detallarán en el apartado 2.5.
4. 2
2.2. Botones, switches y displays empleados
2.2.1. Movimiento de los jugadores
Botones
rst: se reinicia el videojuego.
pb_1: si se pulsa, el jugador de la izquierda sube.
pb_2: si se pulsa, el jugador de la izquierda baja.
pb_3: si se pulsa, el jugador de la derecha sube.
pb_4: si se pulsa, el jugador de la derecha baja.
5. 3
2.2.2. Transcurso de la partida
Switches
sw: cuando se pone a ‘1’ comienza la partida, es decir, la pelota inicia su movimiento
desde su posición inicial. Si está a ‘0’, el juego no se reiniciará automáticamente tras
encajar un gol y la pelota permanecerá parada en el centro del campo hasta que
sw=’1’.
sw2: si está a ‘0’ el modo de juego es “lento” y si está a ‘1’ el modo de juego es
“rápido”.
Displays de 7 segmentos
En ellos aparece la palabra “lento” o “rápido” en función del modo de juego.
Modo de juego “lento”
7. 5
2.3. Diseño del videojuego
2.3.1. Diseño estructural
En los apartados que vienen a continuación se describen los procesos implicados en los
módulos Interfaz_pb y Fondo, a través de diagramas de bloques y su explicación
correspondiente. El módulo Sincro_vga no se detalla como los anteriores porque ya está
comentado en el manual.
8. 6
2.3.2. Diagrama de bloques del módulo Interfaz_pb
P_botones
Este proceso hace que los jugadores suban o bajen en función del botón que se pulse. Pb_1
hace que suba el jugador de la izquierda y pb_2 hace que baje. Para el jugador de la derecha,
si se pulsa pb_3 este se mueve hacia arriba y si se presiona pb_4 se desplaza hacia abajo.
9. 7
2.3.2. Diagrama de bloques del módulo Fondo1
1
El bloque P_pelota es una máquina de estados que engloba tres procesos: el combinacional de
estados, el secuencial y el combinacional de salidas. Estos tres procesos no se detallan en bloques
independientes porque su inclusión complicaría en exceso el diagrama.
10. 8
P_control_pelota (nivel lento)
Este proceso genera la señal s1_pelota que se activa cada 0,02s. Como puede verse en el
videojuego, la pelota se mueve bastante despacio, por eso estamos en el nivel “lento”. Para
elegir este modo de juego, se debe poner el sw2 a ‘0’.
P_control_pelota_2 (nivel rápido)
Idéntico al proceso anterior, con la diferencia que ahora la señal s1_pelota_2 se activa cada
0,01s. La pelota se mueve, entonces, más deprisa porque estamos en el nivel “rápido”. Para
elegir este modo de juego, se debe poner el sw2 a ‘1’.
P_movimiento_pelota
Este proceso genera el movimiento de la pelota, definido por las señales filapel y colpel. Su
dirección depende de las señales señal_SO, señal_SE,… generadas en la máquina de estados,
así como de s1_pelota o s1_pelota_2, dependiendo de si estamos en el nivel lento o rápido.
P_rebote
Este proceso genera las señales tope_jug1 y tope_jug2 que se ponen a ‘1’ cuando la pelota
rebota contra el jugador de la izquierda o el de la derecha, respectivamente. Las entradas, por
tanto, son colpel, filapel, filajug, filajug2.
P_controljug
Este proceso genera la señal s1_control que se activa cada 5 ms. Permite ver el movimiento de
los jugadores.
P_botones1
Este proceso permite mover hacia arriba o hacia abajo el jugador de la izquierda, cuando las
señales jugizq_sube o jugizq_baja (procedentes del módulo Interfaz_pb) se ponen a ‘1’. Por
supuesto, s1_control también debe estar activa y la salida es filajug.
P_botones2
Similar al anterior, con la diferencia de que en este caso el jugador que se mueve es el de la
derecha. Las señales que entran son s1_control, jugde_sube y jugde_baja. La salida es filajug2.
P_pelota
Incluye los procesos P_comb_pelota, P_sec_pelota y P_com_pelota_salidas.
Los estados son NO, NE, SE, SO, gol1 y gol2. Los cuatro primeros se corresponden con las
direcciones noroeste, noreste, sureste y suroeste que puede seguir la pelota. Gol1 y gol2 son
los estados en los que se encuentra la pelota cuando el jugador de la izquierda ha encajado un
gol o cuando lo ha hecho el jugador de la derecha.
11. 9
P_comb_pelota
Este proceso obtiene el estado siguiente a partir del actual. Las entradas a este proceso
son:
- Tope_jug1,tope_jug2: cuando se ponen a ‘1’ significa que la pelota rebota con el
jugador de la izquierda o de la derecha, respectivamente.
- rebote_izq,rebote_dcha, tope_arriba, tope_abajo: se activan en el momento en el que
la pelota choca contra el borde izquierdo, derecho, superior e inferior,
respectivamente.
- tope_izq, tope_dcha: se ponen a ‘1’ cuando el jugador de la izquierda recibe un gol o
cuando lo hace el de la derecha.
- sw: debe estar a ‘1’ para que la pelota comienza a moverse tras encajar un tanto. Si
está a ‘0’, después de marcar un gol, el juego no se reiniciará automáticamente, es
decir, la pelota permanecerá parada en el centro del campo hasta que sw=’1’.
P_sec_pelota
Este proceso guarda el estado actual.
P_com_pelota_salidas
La señal de entrada es sw2: si está a ‘0’el modo de juego es “lento” y si está a ‘1’ el modo
de juego es “rápido”. En función de esta señal cambiará la velocidad de la pelota y la
palabra que aparece en los displays.
Este proceso obtiene como salidas:
- an: enciende los ánodos de los displays.
- seg: ilumina los segmentos necesarios en función de las palabra que se desee mostrar.
- señal_gol1, señal_gol2: se ponen a ‘1’ cuando el jugador izquierdo ha recibido un gol o
bien cuando lo ha hecho el jugador de la derecha.
- señal_SO, señal_SE, señal_NO, señal_NE: se activan para que la pelota siga las
direcciones suroeste, sureste, noroeste y noreste, respectivamente.
P_pinta_fondo
Este proceso pinta el videojuego en la pantalla.
Las señales de entrada son:
- Visible: si está a ‘1’ significa que estamos en los píxeles visibles.
- Pxl_num: indica el número de columna.
- Line_num: indica el número de fila.
Los puertos de salida son:
- Green.
- Red.
- Blue.
12. 10
2.4. Problemas encontrados y resolución
Hemos encontrado dos problemas en la realización del videojuego. El primer problema
encontrado fue el siguiente: al añadir el estado de “gol” en la máquina de estados para que al
anotar un gol al jugador izquierda o derecha la pelota volviera a la posición inicial, solo se
anotaban goles en el lado izquierdo, mientras que en el lado derecho la pelota rebotaba en el
borde.
Resolución: Añadimos un segundo estado llamado “gol2”, de esta forma se anotan goles a
ambos lados del campo.
El segundo problema que encontramos fue que la pelota al chocar con la esquina de alguno de
los dos jugadores, traspasaba al jugador y no rebotaba. Hemos solucionado este problema
cambiando los “límites” del tope_jug1 y tope_jug2 y de esta forma, la pelota rebota también
en las esquinas de cada jugador.
2.5. Mejoras implementadas
Como se ha mencionado antes, en esta versión del videojuego se han implementado tres
mejoras:
1. Por medio de un switch, se inicia y se para el juego. El videojuego se inicia con la
pelota en el centro del campo. Si el switch está a ‘1’, la pelota se moverá y los
jugadores podrán moverse y jugar. Si el switch está a ‘0’, la pelota permanece inmóvil
en el centro del campo (posición inicial). Si se quiere parar el juego, se pone el switch a
‘0’ y después de que se haya anotado el gol, la pelota volverá al centro del campo y no
se moverá hasta que el switch vuelva a estar a ‘1’.
2. Existen dos porterías. Solo se considera que se ha anotado un gol, cuando la pelota
entra alguna de las porterías. Primero, la hemos definido con un ancho de 20 píxeles y
ocupa la tercera parte del borde vertical del campo. Después de pintarlas, hemos
añadido dos señales de rebote_izq y rebote_dcha que definen la parte del campo
fuera de la portería, de esta forma la pelota rebotará esas zonas. Las señales tope_izq
y tope_dcha se utilizarán para definir los bordes de la portería e indican que se ha
anotado un gol.
3. Se puede jugar a dos velocidades distintas: lento y rápido. Esta mejora la hemos
realizado añadiendo otro contador para la pelota. El primer contador es de 20ms y se
corresponde al nivel lento. El segundo contador, para el nivel rápido, es de 10ms.
Además, con la ayuda de un segundo switch, se podrá cambiar la velocidad de la
pelota. Si el switch está a ‘1’ la velocidad de la pelota aumenta, y aparece la palabra
“rápido” en los displays de 7 segmentos. Por otra parte, si el switch está a ‘0’, la
velocidad de la pelota disminuye y aparece la palabra “lento” en los displays.
13. 11
2.5. Enlace al video de PING-PONG versionado
Enlace Dropbox:
https://www.dropbox.com/s/8e9v8voieurudb9/InShot_20160520_154410.mp4?dl=0