El D.D.Tap es un juego que se puede reproducir con sensores conectados a Arduino y la interfaz del juego produjo con el proceso. Es una simple danza baile revolución como juego que acumula puntos cuando el jugador activa los sensores o presione las teclas del teclado cuando las flechas al azar alcanza la barra transparente roja. El circuito construido en Arduino es simple como yo había limitado los sensores. Usé las fotocélulas en configuración pull-up para actuar como sensores. He subido el applet también @http://www.openprocessing.org/visuals/?visualID=29670 pero para que la función de Twitter trabajar, debe introducir su propia clave de consumo y así sucesivamente tomadas de su cuenta de OAuth en http://dev.twitter.com/apps . Carga en openprocessing.org es muy largo debido al gran archivo para saltarlo, solo presione "Código fuente".
También, usé el yeahx3 de la canción de Chris Brown ya que tiene el pegadizo ritmo de las flechas al azar ~
El resultado es aceptable pero aún me gustaría solucionar el problema de acumular más de un bono para cada flecha. Este problema no era tan importante cuando juega con el teclado pero cuando sus lectura serial de datos del puerto com, la tarifa de datos era tan rápida que provoca más de una vez los bonos para cada flecha. Alegraría que alguien ayudaría con los códigos de procesamiento. Pensé en crear un array para comprobar los bonos pero que no funcionaba muy bien. Así que, de alguna manera medio solucioné ese problema mediante el retraso en el código de Arduino. Esto por supuesto que te presenten otros problemas tales como; Si ambos lados de la flecha alcanza al mismo tiempo, sólo una flecha Bono podría ser reclamado. El video muestra el ejemplo de la interacción y que si había una nueva puntuación, la puntuación sería publicada como un tweet en tu página. Estoy dispuesto a aceptar cualquier sugerencia de mejora.
Aquí está el código!!! Sin el twitter clave por supuesto...
Grupo de flechas
punteros de puntero [];
restablece valor booleano = true;
int num;
flotación estática pública yPos, yPos2;
inicialización de Twitter
twitter Tweet;
Comunicación en serie
Import processing.serial.*;
Puerto serial;
String portname = "COM1";
int baudrate = 9600;
lectura de int = 0;
PImage imagen, blueButton, redButton;
inicializar el juego mp3
Import ddf.minim.*;
Mínima mínima;
AudioPlayer sí;
inicializar las variables
PFont fuente;
int blanco;
int nivel = 1;
int cuenta = 0;
int registrado;
logro del int;
Victoria boolean = false;
perder el boolean = false;
PrintWriter salida;
Archivo de String [];
String [] valores;
int [] valor;
void setup() {}
tamaño (600, 600);
inicializar el puerto
puerto = serie nueva (este, portname, velocidad en baudios);
println(Port);
Cargar imagen
imagen = loadImage("view.jpg");
blueButton = loadImage("bluebutton.png");
redButton = loadImage("redbutton.png");
música
mínima = nuevo Minim(this);
sí = minim.loadFile("yes.mp3");
Yes.Play();
fuente
Font = loadFont("BerlinSansFB-Bold-48.vlw");
textFont(font);
valores = loadStrings("Values.txt"); valores de carga
valor = int[values.length nuevo];
para (int i = 0; i < values.length; i ++) {}
println(values);
valor [i] = Integer.valueOf(values[i]).intValue(); convertir string a entero
}
archivo = loadStrings("Highscore.txt"); cargar registro de previo
para (int i = 0; i < file.length; i ++) {}
grabado = Integer.valueOf(file[i]).intValue(); convertir string a entero
}
frameRate(value[0]);
}
void draw() {}
yPos = 0; restablecer la ubicación de la flecha
yPos2 = 0;
View(); dibujar el diseño del fondo
nivel 1
Si (nivel == 1) {}
Si {} (reset)
make();
destino = valor [1];
}
Si ((millis() > = value[4]) & & (puntuación > = objetivo)) {}
nivel = 2;
RESET = true;
REDRAW();
}
else if (millis() > = {value[4])}
perder = true;
}
}
nivel 2
else if (nivel == 2) {}
Si {} (reset)
make();
destino = valor [2];
}
Si ((millis() > = value[5]) & & (puntuación > = objetivo)) {}
Level = 3;
RESET = true;
REDRAW();
}
else if (millis() > = {value[5])}
perder = true;
}
}
nivel 3
else if (nivel == 3) {}
Si {} (reset)
make();
destino = valor [3];
}
Si ((millis() > = value[6]) & & (puntuación > = objetivo)) {}
ganar = true;
}
else if (millis() > = {value[6])}
perder = true;
}
}
instrucciones
textSize(40);
texto ("controles", 410, 50);
textSize(20);
texto ("'a' para golpe izquierdo \n'l' para golpear la derecha", 410, 100);
Cadena compás = ("resultado de objetivo:" + destino);
texto (beat, 405, 200);
texto ("tiempo de Ellapsed:", 410, 250);
texto (millis () / 1000, 410, 280);
String City = ("Highscore:\n anterior" + grabado);
Text(beatH,410,320);
nivel y puntuación
Fill(0);
puntuación = puntuación + logro;
textSize(40);
texto ("Score", 420, 450);
texto (puntuación, 420, 480);
Cadena lev = "nivel" + nivel;
texto (lev, 420, 410);
logro = 0; restablecer el logro
flecha de la pantalla
para (int i = 0; i < num; i ++) {}
indicadores [i] .arr (); //make la flecha
Pointers[i].Motion();
}
Salida de controles y acciones cuando el jugador termina las rondas
Si {} (win)
relleno (255, 73, 73, 190);
textSize(80);
texto ("usted gana!!!!!! \nPress ESC", 80, 300);
Save ("Tap puntuación" + resultado + ".jpg"); se puede utilizar si desea guardar la pantalla al ganador
Comparar resultado almacenado y guardar la puntuación más alta
Si (puntuación > = grabado) {}
Fill(0);
texto ("\tNEW\nHIGHSCORE!!!", 20, 100);
salida = createWriter("Highscore.txt");
output.println(score);
output.Flush();
output.Close();
enviar resultado a twitter
Twitter = nuevo tweet(score);
twitter.sendHighscore();
}
noLoop(); pantalla STOP
}
else if (perder) {}
relleno (255, 73, 73, 190);
textSize(80);
texto ("pierdes!!!!!! \nTRY otra vez: P ", 50, 350);
noLoop();
}
leer puerto serie
mientras que (port.available () > 0) {}
portRead();
}
}
void stop() //stop música
{
cierre siempre las clases audio mínima Cuando acabes con ellos
Yes.Close();
siempre parada mínima antes de salir
Minim.STOP();
Super.STOP();
}
void view() {//background diseño
Smooth();
noStroke();
Background(0); establecer fondo blanco
Image(Picture,0,0);
relleno (151, 16, 201, 90), bar //purple
Quad (15, 450, 385, 450, 385, 490, 15, 490);
relleno (2,56,242,30); //side barras
Quad (400, 10, 590, 10, 590, 590, 400, 590);
Fill(242,2,79,30);
Quad (405, 15, 585, 15, 585, 585, 405, 585);
imagen (blueButton, 0,450);
imagen (redButton, 200.450);
Fill(30);
}
void make() {//create flechas
Num = valor [7]; número de flechas
RESET = false;
indicadores = nuevo puntero [num];
hacer flechas
para (int i = 0; i < num; i ++) {}
indicadores [i] = nuevo puntero (nivel); //make una nueva flecha
}
Fondo (0); //show actualización
Delay(2000);
}
void portRead() {//acts casi como una interrupción cuando se presionan las teclas
Fill(255);
lectura = port.read();
Si (leer == 'A') {}
elipse (100, 550, 80, 80);
para (int i = 0; i < pointers.length; i ++) {}
Si ((yPos > = 450)) {}
logro = 100;
}
}
}
else if (lectura == 'B') {}
elipse (300, 550, 80, 80);
para (int i = 0; i < pointers.length; i ++) {}
Si ((yPos2 > = 450)) {}
logro = 100;
}
}
}
Fill(30);
}
void keyPressed() {//acts cerca de una interrupción cuando se presionan las teclas
Si (clave == 'a') {}
elipse (100, 550, 80, 80);
Si ((yPos > = 450)) {}
Delay(5);
logro = 100;
}
}
else if (clave == 'l') {}
elipse (300, 550, 80, 80);
Si ((yPos2 > = 450)) {}
Delay(5);
logro = 100;
}
}
}
puntero de la clase
{
flotador hacia la izquierda, derecha;
PVector pos, pos2;
Vel de PVector;
puntero (int v) {}
pos = PVector nuevo (100, int (random (-12000, 0)));
POS2 = PVector nueva (300, int (random (-12000, 0)));
Vel = PVector nuevas (0, (v * 2) + 3); sólo avanzando en dirección y
}
void arr() {}
Fill(255);
strokeWeight(9);
movimiento (54,83,234, 160); //vary colores
flecha izquierda
Si (pos.y < = 490) {}
Si (pos.y > = yPos) {}
yPos = pos.y;
}
beginShape();
vértice (pos.x-20, pos.y);
vértice (pos.x, pos.y-20);
vértice (pos.x, pos.y-10);
vértice (pos.x+10, pos.y-10);
vértice (pos.x+10, pos.y+10);
vértice (pos.x, pos.y+10);
vértice (pos.x, pos.y+20);
endShape(CLOSE);
}
movimiento (13,242,2, 160); //vary colores
flecha derecha
Si (pos2.y < = 490) {}
Si (pos2.y > = yPos2) {}
yPos2 = pos2.y;
}
beginShape();
vértice (pos2.x+20, pos2.y);
vértice (pos2.x, pos2.y+20);
vértice (pos2.x, pos2.y+10);
vértice (pos2.x-10, pos2.y+10);
vértice (pos2.x-10 pos2.y-10);
vértice (pos2.x, pos2.y-10);
vértice (pos2.x, pos2.y-20);
endShape(CLOSE);
}
}
void motion() {//move flechas
pos.Add (vel); //add el vector de velocidad a su posición
POS2.Add(vel);
}
}
clase tweet {}
Import twitter4j.conf.*;
Import twitter4j.internal.async.*;
Import twitter4j.internal.org.json.*;
Import twitter4j.internal.logging.*;
Import twitter4j.json.*;
Import twitter4j.internal.util.*;
Import twitter4j.management.*;
Import twitter4j.auth.*;
Import twitter4j.api.*;
Import twitter4j.util.*;
Import twitter4j.internal.http.*;
Import twitter4j.*;
Import twitter4j.internal.json.*;
String msg = "Tap Tap juego nueva puntuación más alta!:";
Boolean enviado;
int resultado;
TwitterFactory tf;
Tweet (int hscore) {}
puntuación = hscore;
Cadena ConsumerKey = "***";
Cadena ConsumerSecret = "***";
Cadena oauth_token = "***";
Cadena oauth_token_secret = "***";
enviar = false;
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey(ConsumerKey)
.setOAuthConsumerSecret(ConsumerSecret)
.setOAuthAccessToken(oauth_token)
.setOAuthAccessTokenSecret(oauth_token_secret);
TF = new TwitterFactory(cb.build());
}
void sendHighscore() {}
Twitter twitter = tf.getInstance();
trate de {}
Estado st = twitter.updateStatus (msg + resultado + "en" + getDateTime());
println ("actualizados correctamente: [" + st.getText() + "].");
envió = true;
}
catch (TwitterException e) {}
println(e.getStatusCode());
}
}
String getDateTime() {}
DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd HH");
Fecha fecha = new Date ();
volver dateFormat.format(date);
}
}
_____________________________________________________________________
Código de Arduino
int ledPin = 13;
int valor1, valor2;
void setup() {}
Serial.Begin(9600);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(ledPin,OUTPUT);
}
void loop() {}
valor1 = analogRead(A0);
valor2 = analogRead(A1);
valor1 = constrain(value1,0,1023);
valor2 = constrain(value2,0,1023);
valor1 = map(value1,0,1023,0,1);
valor2 = map(value2,0,1023,0,1);
Si (valor1 < = 10) {}
Serial.Print ("valor1 =");
Serial.println(value1);
Serial.println("A");
}
Si (valor2 < = 10) {}
Serial.Print ("Value2 =");
Serial.println(value2);
Serial.println("B");
}
Delay(200);
}
Tienes que crear dos archivos de txt llamados 'valor' y la puntuación más alta ' y si usted lee los códigos, usted debe saber cuantos campos hay son. ¡Buena suerte!