Subido por daniwil98

SuperAirHockey en Arduino

Anuncio
Reto arduino + processing
Por:
Daniel Jaramillo Ochoa – 30000024528
Jose Ricardo Giraldo Loaiza – 1033472
Super Air Hockey – Blue vs Red
Link video de youtube:
https://youtu.be/glSm60bsA0E
Esquema de conexion:
Codigo de Processing:
El codigo consta de 4 clases, Air Hockey, Disco, Habilidad
y Paddle.
-Clase Air Hockey
import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;
import cc.arduino.*;
import org.firmata.*;
import processing.serial.*;
//Clases que se llaman
Disco[] Disco= new Disco[5];
Paddle[] player= new Paddle[2];
Minim soundBackground= new Minim(this);
Arduino arduino;
Habilidad[] Habilidad= new Habilidad[2];
//Todas las variables
PImage fondo;
PImage fondoIntro;
PImage ganador1;
PImage ganador2;
PImage pEmpate;
int habilidad1 = 0;
int habilidad2 = 0;
int comprobarHabilidad1 = 0;
int comprobarHabilidad2 = 0;
int comprobarSegundaHabilidad1 = 0;
int comprobarSegundaHabilidad2 = 0;
float control1;
float control2;
float posicion1;
float posicion2;
int puntaje1 = 0;
int puntaje2 = 0;
String anotacion;
int comprobarAnotacion;
int estadoJuego = 0;
int time;
int time2;
void setup() {
size(1004, 599);
AudioPlayer song = soundBackground.loadFile("MusicaFondo.mp3");
song.play();
song.loop();
fondo = loadImage("Fondo.png");
fondoIntro = loadImage("Menu.png");
ganador1 = loadImage("Ganador1.png");
ganador2 = loadImage("Ganador2.png");
pEmpate = loadImage("Empate.png");
player[0]= new Paddle();
player[1]= new Paddle();
for (int i=0; i < Disco.length; i++) {
Disco[i] = new Disco();
}
for (int i=0; i < Habilidad.length; i++) {
Habilidad[i] = new Habilidad();
}
//Iniciar arduino y leds
arduino = new Arduino(this, Arduino.list()[0], 57600);
arduino.pinMode(8, arduino.INPUT);
arduino.pinMode(3, arduino.OUTPUT);
arduino.pinMode(4, arduino.OUTPUT);
arduino.pinMode(6, arduino.OUTPUT);
arduino.pinMode(5, arduino.OUTPUT);
arduino.pinMode(7, arduino.OUTPUT);
arduino.pinMode(2, arduino.OUTPUT);
arduino.digitalWrite(6, Arduino.HIGH);
arduino.digitalWrite(5, Arduino.HIGH);
arduino.digitalWrite(7, Arduino.HIGH);
arduino.digitalWrite(2, Arduino.HIGH);
}
void draw() {
if (estadoJuego == 0) {
background(fondoIntro);
if (keyPressed) {
if ( key == 'n' || key == 'N' ) {
estadoJuego = 1;
time2 = millis()/1000;
}
}
}
//Estado del juego y posicion
if (estadoJuego == 1) {
time = (millis()/ 1000) - time2;
background(fondo);
control1 = arduino.analogRead(0);
control2 = arduino.analogRead(1);
posicion1 = map(control1, 0, 1023, 0, height-80);
posicion2 = map(control2, 0, 1023, 0, height-80);
Disco[0].pintar();
Disco[0].mover();
Disco[0].rebotar();
//Aquí se inicia el juego
if (keyPressed) {
if ( key == 'n' || key == 'N' ) {
Disco[0].angle= random(TWO_PI);
Disco[0].spX= 8 * cos( Disco[0].angle);
Disco[0].spY= 8 * sin( Disco[0].angle);
arduino.digitalWrite(3, Arduino.LOW);
arduino.digitalWrite(4, Arduino.LOW);
comprobarAnotacion= 0;
anotacion = "";
textSize(50);
text(anotacion, (width/2)-100, height/2);
}
}
if (comprobarAnotacion == 1) {
anotacion = "¡Anotación!";
textSize(100);
text(anotacion, (width/2)-250, 200);
}
//Y aqui los jugadores
player[0].relleno= color(0, 0, 255);
player[0].pintar();
player[0].posY= posicion1;
player[1].relleno= color(255, 0, 0);
player[1].pintar();
player[1].posX= width-27;
player[1].posY= posicion2;
//Cargar la habilidad
if (keyPressed) {
if (key == 'q' || key == 'Q') {
if (habilidad1 == 0) {
habilidad1 = 1;
arduino.digitalWrite(6, Arduino.LOW);
Habilidad[0].posX= 50;
if (habilidad2 == 0) {
comprobarHabilidad2 = 1;
habilidad2 = 2;
} else {
comprobarHabilidad2 = 2;
}
}
}
if (key == 'o' || key == 'O') {
if (habilidad2 == 0) {
habilidad2 = 1;
arduino.digitalWrite(5, Arduino.LOW);
Habilidad[1].posX= width - 150;
if (habilidad1 == 0) {
comprobarHabilidad1 = 1;
habilidad1 = 2;
} else {
comprobarHabilidad1 = 2;
}
}
}
}
if (habilidad1 == 1) {
Habilidad[0].mover();
Habilidad[0].colision();
}
if (comprobarHabilidad2 == 1) {
Habilidad[1].mover();
Habilidad[1].colision();
}
if (habilidad2 == 1) {
Habilidad[1].mover();
Habilidad[1].colision();
}
if (comprobarHabilidad2 == 1) {
Habilidad[0].mover();
Habilidad[0].colision();
}
if (keyPressed) {
if (key == 'w' || key == 'W' ) {
if (comprobarSegundaHabilidad1 == 0) {
comprobarSegundaHabilidad1 = 1;
arduino.digitalWrite(7, Arduino.LOW);
player[0].tamY= player[0].tamY + 20;
}
}
}
if (keyPressed) {
if (key == 'p' || key == 'P') {
if (comprobarSegundaHabilidad2 == 0) {
comprobarSegundaHabilidad2 = 1;
arduino.digitalWrite(2, Arduino.LOW);
player[1].tamY= player[1].tamY + 20;
}
}
}
//El juego debe durar un minuto sin limite de anotaciones
if (time == 60) {
estadoJuego = 2;
}
//Puntajes
textSize(50);
fill(255);
text(puntaje1, (width/2)-120, 70);
text(puntaje2, (width/2)+90, 70);
textSize(20);
text("Time: " + time, 60, 30);
}
//Y resultados
if (estadoJuego == 2) {
if (puntaje1 > puntaje2) {
background(ganador1);
}
if (puntaje1 < puntaje2) {
background(ganador2);
}
if (puntaje1 == puntaje2) {
background(pEmpate);
}
if (keyPressed) {
if ( key == 'n' || key == 'N') {
puntaje1 = 0;
puntaje2= 0;
comprobarHabilidad1 = 0;
comprobarHabilidad2 = 0;
habilidad1 = 0;
habilidad2 = 0;
comprobarSegundaHabilidad1 = 0;
comprobarSegundaHabilidad2 = 0;
estadoJuego=0;
}
}
}
}
-Clase Disco
class Disco{
float posX;
float posY;
float angle;
//Velocidad
float spX;
float spY;
//Aceleracion
float acX;
float acY;
color relleno;
float tam;
int comp;
Disco(){
angle= random(TWO_PI);
posX= width/2;
posY= height/2 ;
spX= 8 * cos(angle);
spY= 8 * sin(angle);
acX= 0.2;
acY= 0.2;
tam= 30;
relleno = color(255);
}
void pintar(){
noStroke();
fill(0, 0, 0, 50);
ellipse(posX + 4, posY + 6, tam, tam);
fill(relleno);
lights();
ellipse(posX, posY, tam, tam);
}
void mover(){
posX= posX + spX;
posY= posY + spY;
}
void rebotar(){
if(posX > width){
puntaje1++;
posX= width/2;
posY= height/2 ;
spX= 0;
spY= 0;
comp= -1;
comprobarAnotacion=1;
player[0].tamY= 80;
player[1].tamY= 80;
Habilidad[1].posX= width - 150;
Habilidad[0].posX= 50;
habilidad1 = 0;
habilidad2 = 0;
comprobarHabilidad1 = 0;
comprobarHabilidad2 = 0;
comprobarSegundaHabilidad2 = 0;
comprobarSegundaHabilidad1 = 0;
arduino.digitalWrite(4, Arduino.HIGH);
arduino.digitalWrite(6, Arduino.HIGH);
arduino.digitalWrite(5, Arduino.HIGH);
arduino.digitalWrite(2, Arduino.HIGH);
arduino.digitalWrite(7, Arduino.HIGH);
}
if(posX < 0){
puntaje2++;
posX= width/2;
posY= height/2 ;
spX= 0;
spY= 0;
comp= 1;
comprobarAnotacion=1;
player[0].tamY= 80;
player[1].tamY= 80;
Habilidad[1].posX= width - 150;
Habilidad[0].posX= 50;
habilidad1 = 0;
habilidad2 = 0;
comprobarHabilidad1 = 0;
comprobarHabilidad2 = 0;
comprobarSegundaHabilidad2 = 0;
comprobarSegundaHabilidad1 = 0;
arduino.digitalWrite(3, Arduino.HIGH);
arduino.digitalWrite(6, Arduino.HIGH);
arduino.digitalWrite(5, Arduino.HIGH);
arduino.digitalWrite(2, Arduino.HIGH);
arduino.digitalWrite(7, Arduino.HIGH);
}
if(posY > height - 23 || posY < 23){
spY = spY*(-1);
}
if(posX < 28 && posY > player[0].posY && posY < player[0].posY + player[0].tamY){
spX = spX*(-1) + 1;
spX += 0.92;
}
if(posX > width-27 && posY > player[1].posY && posY < player[1].posY + player[1].tamY ){
spX = spX*(-1) - 1;
}
}
}
-Clase Habilidad
class Habilidad{
float posX;
float posY;
float spX;
float spY;
color relleno;
float tamX;
float tamY;
float acX;
float acY;
Habilidad(){
spX= 90;
spY= 0;
acX= 0;
acY= 0.2;
tamX= 80;
tamY= 10;
}
void mover(){
if(habilidad1 == 1){
posX+=spX;
}
if(habilidad2 == 1){
posX-=spX;
}
}
void colision(){
if(habilidad1==1){
if(posX > width-27 && posY > player[1].posY && posY < player[1].posY + player[1].tamY ){
player[1].tamY= player[1].tamY - 30;
}
if (posX > width){
habilidad1 = 2;
if(comprobarHabilidad2 == 1){
habilidad2 = 0;
}
}
}
if(habilidad2==1){
if(posX < 28 && posY > player[0].posY && posY < player[0].posY + player[1].tamY ){
player[0].tamY= player[0].tamY - 30;
}
if (posX < 0){
habilidad2 = 2;
if(comprobarHabilidad1 == 1){
habilidad1 = 0;
}
}
}
}
}
-Clase Paddle
class Paddle {
float posX;
float posY;
float tamX;
float tamY;
color relleno;
Paddle() {
posY = height/2;
posX = 10;
tamX= 18;
tamY= 80;
}
void pintar(){
noStroke();
fill(0, 0, 0, 50);
rect(posX, posY + 6, tamX + 5, tamY,10);
fill(relleno);
rect(posX, posY, tamX, tamY,10);
}
}
Descargar