Hola amigos, quiero compartir con ustedes este proyecto que realicé hace unos días atrás para un amigo que me lo pidió; se trata del famoso juego de PONG publicado por primera vez en el año 1973 por la industria ATARI Interactive;
El juego se desarrolla en dos dimensiones y fue todo un éxito en ventas en aquella época; Bueno, vamos ahora a ver como construir uno similar:
MATERIALES:
CIRCUITO:
El circuito es bastante simple, he utilizado un potenciometro para mover la paleta hacia arriba y hacia abajo y un buzzer que emite un sonido cada vez que la pelota rebota
SKETCH
Ahora, por ultimo les dejo un vídeo del juego funcionando
COSAS POR AGREGAR:
Aunque el juego está totalmente funcional; Queda como reto añadirle algunas características:
Espero que este aporte les haya sido de utilidad.

El juego se desarrolla en dos dimensiones y fue todo un éxito en ventas en aquella época; Bueno, vamos ahora a ver como construir uno similar:
MATERIALES:
- Placa Arduino Uno R3
- Matriz P10 de 32x16 Pixels
- Un Potenciometro de 10K
- Un Buzzer
- Un Poco de cables
CIRCUITO:
El circuito es bastante simple, he utilizado un potenciometro para mover la paleta hacia arriba y hacia abajo y un buzzer que emite un sonido cada vez que la pelota rebota
SKETCH
Código:
/*
//JUEGO PONG CON ARDUINO UNO Y MATRIZ LED 16X32 P10
//MAS INFORMACION LA ENCUENTRAS EN MI BLOG:
//dinoelectro.blogspot.com
//
//PENDIENTE:
// MARCADOR DE PUNTAJE
// MODO DE DOS JUGADORES
//
//CONEXIONES:
// ARDUINO________________DMD
// PIN9___________________OE
// PIN6___________________A
// PIN7___________________B
// PIN13__________________SLK
// PIN8___________________SCLK
// PIN11__________________SPI
// CANAL A0_______________Pot 10K
// PIN5___________________Zumbador
*/
#include <DMD.h>
#include <TimerOne.h>
#include "SystemFont5x7.h"
int width=31,height=15; //DIMENSION DEL AREA DE JUEGO
int x1=width/2,y1=height/2,speedx=1,speedy=1; //POSICION Y VELOCIDAD DE LA BOLA
int paddlex=2,paddley=height/2,paddleh=3,paddles=1; //POSICION ANCHURA Y VEOCIDAD DE LA PALETA
DMD display(1,1);
void ScanDMD()
{
display.scanDisplayBySPI();
}
void setup() {
Timer1.initialize( 3000 );
Timer1.attachInterrupt(ScanDMD);
pinMode(5, OUTPUT); //aqui conectamos el zumbador
// welcomeScreen();
}
void loop(){
delay(50);
display.clearScreen(true);
analogWrite(5, 0); //APAGO EL SONIDO DE REBOTE
display.writePixel(x1,y1,GRAPHICS_NORMAL,1); //DIBUJA LA PELOTA EN EL CENTRO
x1=x1+speedx; //MUEVE LA PELOTA EN LA DIRECCION X
y1=y1+speedy; //MUEVE LA PELOTA EN LA DIRECCION Y
if(x1>=width){
speedx=-speedx;//SI LA PELOTA TOCA EL LADO LATERAL CAMBIA DE DIRECCION
analogWrite(5, 20); //EMITE SONIDO DE REBOTE
}else if(x1<=0){
speedx=-speedx;//SI LA PELOTA TOCA EL LADO LATERAL CAMBIA DE DIRECCION
analogWrite(5, 20); //EMITE SONIDO DE REBOTE
}
if(y1>=height){
speedy=-speedy;//SI LA PELOTA TOCA EL LADO SUPERIOR CAMBIA DE DIRECCION
analogWrite(5, 20); //EMITE SONIDO DE REBOTE
}else if(y1<=0){
speedy=-speedy;//SI LA PELOTA TOCA EL LADO SUPERIOR CAMBIA DE DIRECCION
analogWrite(5, 20); //EMITE SONIDO DE REBOTE
}
paddley=map(analogRead(A0),0,1023,0,12);
//GRAFICAMOS LA PALETA EN LA POSICION TOMANDO COMO REFERENCIA LA LECTURA DEL
//POTENCIOMETRO
display.drawLine(paddlex,paddley,paddlex,paddley+paddleh,GRAPHICS_NORMAL);
//SI LA PELOTA TIENE CONTACTO CON LA PALETA, CAMBIA DE DIRECCION
if(x1==paddlex && y1<=paddley+paddleh && y1>paddley-paddleh/3){
speedx=-speedx;
speedy=-speedy;
analogWrite(5, 20); //EMITE SONIDO DE REBOTE
} else if(x1==0){
//SI LA PELOTA ALCANZA LA POSICION X=0, EL JUEGO TERMINA
//ESCRIBE GAME OVER
analogWrite(5, 0); //APAGO
SONIDO GAME OVER
display.clearScreen(true);
display.selectFont(System5x7);
display.drawString(5,0,"GAME",4, GRAPHICS_NORMAL);
display.drawString(5,9,"OVER",4, GRAPHICS_NORMAL);
delay( 2000 );
//REINICIA VARIABLES
x1=width/2;
y1=height/2;
paddlex=2;
paddley=height/2;
display.clearScreen(true);
//ESCRIBE PONG DUINO
display.drawString(5,0,"PONG",4, GRAPHICS_NORMAL);
display.drawString(1,9,"DUINO",5, GRAPHICS_NORMAL);
delay(2000);
display.clearScreen(true);
//ESCRIBE "READY"
display.drawString(2,4,"READY",5, GRAPHICS_NORMAL);
delay(2000);
display.clearScreen(true);
//ESCRIBE GO!!!
display.drawString(5,4,"GO!!!",5, GRAPHICS_NORMAL);
delay(500);
}
}
Ahora, por ultimo les dejo un vídeo del juego funcionando
COSAS POR AGREGAR:
Aunque el juego está totalmente funcional; Queda como reto añadirle algunas características:
- Poner en modo de dos jugadores
- Poner un Marcador de Puntaje
- Armarlo en una cajita
Espero que este aporte les haya sido de utilidad.
Última edición: