Le D.D.Tap est un jeu qui peut être joué à l’aide de capteurs reliés à l’Arduino et interface pour le jeu produite avec le traitement. C’est une révolution de danse de danse simple jeu qui accumule des points lorsque le joueur active les capteurs ou appuyez sur les touches du clavier lorsque les flèches au hasard atteint la barre rouge transparente. Le circuit intégré sur l’Arduino est simple car j’avais limité les capteurs. J’ai utilisé les cellules photoélectriques dans une configuration de pull-up pour agir en tant que capteurs. J’ai téléchargé l’applet trop @http://www.openprocessing.org/visuals/?visualID=29670 mais pour la fonction Twitter fonctionne, vous devez entrer votre propre clé de consommateur et ainsi de suite retenu sur votre compte OAuth sur http://dev.twitter.com/apps . Chargement sur openprocessing.org est assez longue à cause du fichier afin de l’ignorer, appuyez simplement sur "Code Source".
Aussi, j’ai utilisé l’yeahx3 de la chanson de Chris Brown car il a le rythme accrocheur pour les flèches au hasard ~
Le résultat est OK, mais je tiens encore à résoudre le problème d’accumuler plus d’un bonus pour chaque flèche. Ce problème n’était pas si important quand joue avec le clavier mais quand sa lecture des données série entre le port de com, le débit était si rapide qu’il déclenche des bonus plus d’une fois pour chaque flèche. Je serais heureux si quelqu'un pourrait aider avec les codes de traitement. J’ai pensé à créer un tableau pour vérifier les bonus, mais cela ne fonctionne pas très bien. Alors, j’ai en quelque sorte moitié résolu ce problème en utilisant le retard dans le code de l’Arduino. Cela a bien sûr présenté autres problèmes tels que ; Si les deux côtés de la flèche atteint en même temps, prime qu’une seule flèche pourrait être demandée. La vidéo montre l’exemple de l’interaction et que s’il y avait un nouveau record, le score serait affiché comme un tweet à votre page. Je suis prêt à accepter des suggestions de mise à niveau.
Voici le code!!! Sans le twitter touche bien sûr...
Groupe de flèches
pointeurs de pointeur de [] ;
Boolean réinitialiser = true ;
int num ;
public static float yPos, yPos2 ;
initialisation de Twitter
twitter Tweet ;
Communication série
Import processing.serial.* ;
Port série ;
String portname = « COM1 » ;
int baudrate = 9600 ;
lecture int = 0 ;
Photo de Byte, blueButton, rouge ;
initialiser le jeu pour mp3
Import ddf.minim.* ;
Minim minim ;
AudioPlayer Oui ;
initialiser des variables
PFont polices ;
int cible ;
int niveau = 1 ;
score d’int = 0 ;
int enregistrée ;
réalisation de l’int ;
victoire booléen = false ;
perdre du boolean = false ;
PrintWriter sortie ;
Fichier de chaîne [] ;
String [] values ;
int [] valeur ;
void setup() {}
taille (600, 600) ;
initialiser le port
port = nouvelle série (ce, portname, baudrate) ;
println(port) ;
charger l’image
image = loadImage("view.jpg") ;
blueButton = loadImage("bluebutton.png") ;
Rouge = loadImage("redbutton.png") ;
musique
minim = new Minim(this) ;
Yes = minim.loadFile("yes.mp3") ;
Yes.Play() ;
police
police = loadFont("BerlinSansFB-Bold-48.vlw") ;
textFont(font) ;
valeurs = loadStrings("Values.txt") ; valeurs de charges
valeur = int[values.length nouveau] ;
pour (int i = 0; i < values.length; i ++) {}
println(values) ;
valeur [i] = Integer.valueOf(values[i]).intValue() ; Convertit une chaîne en entier
}
fichier = loadStrings("Highscore.txt") ; chargement précédent record
pour (int i = 0; i < file.length; i ++) {}
enregistré = Integer.valueOf(file[i]).intValue() ; Convertit une chaîne en entier
}
frameRate(value[0]) ;
}
{} void draw()
yPos = 0 ; réinitialiser l’emplacement de la flèche
yPos2 = 0 ;
View() ; dessiner le design fond
niveau 1
Si (niveau == 1) {}
Si {(reset)
Make() ;
cible = valeur [1] ;
}
Si ((millis() > = value[4]) & & (score > = target)) {}
Level = 2 ;
Reset = true ;
Redraw() ;
}
ElseIf (millis() > = {value[4])}
perdre = true ;
}
}
niveau 2
ElseIf (niveau == 2) {}
Si {(reset)
Make() ;
cible = valeur [2] ;
}
Si ((millis() > = value[5]) & & (score > = target)) {}
Level = 3 ;
Reset = true ;
Redraw() ;
}
ElseIf (millis() > = {value[5])}
perdre = true ;
}
}
niveau 3
ElseIf (niveau == 3) {}
Si {(reset)
Make() ;
cible = valeur [3] ;
}
Si ((millis() > = value[6]) & & (score > = target)) {}
gagner = true ;
}
ElseIf (millis() > = {value[6])}
perdre = true ;
}
}
instructions
textSize(40) ;
texte (« contrôles », 410, 50) ;
textSize(20) ;
texte ("« a » pour frapper à gauche \n'l' droit de frapper", 410, 100) ;
Battement de chaîne = ("score cible:" + cible) ;
texte (beat, 405, 200) ;
texte ("temps d’Ellapsed:", 410, 250) ;
texte (millis () / 1000, 410, 280) ;
String beatH = ("Highscore:\n précédente" + enregistré) ;
Text(beatH,410,320) ;
niveau et score
Fill(0) ;
score = score + réalisation ;
textSize(40) ;
texte ("Score", 420, 450) ;
texte (score, 420, 480) ;
Chaîne de lev = "niveau" + niveau ;
texte (lev, 420, 410) ;
réalisation = 0 ; réinitialiser la réalisation
flèche de l’affichage
pour (int i = 0; i < num; i ++) {}
pointeurs [i] .arr (); //make la flèche
Pointers[i].Motion() ;
}
Sortie des contrôles et des actions lorsque le joueur termine les manches
Si {(win)
remplissage (255, 73, 73, 190) ;
textSize(80) ;
texte ("vous gagnez!!! \nPress ESC", 80, 300) ;
enregistrer (« Tap score » + score + « .jpg ») ; peut être utilisé si vous souhaitez enregistrer l’affichage à gagner
comparer les meilleurs scores stockée et enregistrer le score le plus élevé
Si (score > = enregistré) {}
Fill(0) ;
texte ("\tNEW\nHIGHSCORE!!!", 20, 100) ;
sortie = createWriter("Highscore.txt") ;
output.println(score) ;
output.Flush() ;
output.Close() ;
Envoyer le résultat à twitter
Twitter = new tweet(score) ;
twitter.sendHighscore() ;
}
noLoop() ; arrêter l’affichage
}
ElseIf (perdre) {}
remplissage (255, 73, 73, 190) ;
textSize(80) ;
texte (« vous perdez!!! \nTRY encore une fois: P ", 50, 350) ;
noLoop() ;
}
lire le port série
tandis que (port.available () > 0) {}
portRead() ;
}
}
stop() Sub //stop musique
{
toujours fermer les classes audio Minim lorsque vous avez terminé avec eux
Yes.Close() ;
toujours arrêter Minim avant de repartir
minim.Stop() ;
Super.Stop() ;
}
view() Sub {//background conception
Smooth() ;
noStroke() ;
Background(0) ; mettre le fond blanc
image(Picture,0,0) ;
remplissage (151, 16, 201, 90); //purple bar
Quad (15, 450, 385, 450, 385, 490, 15, 490) ;
remplissage (2,56,242,30); //side barres
Quad (400, 10, 590, 10, 590, 590, 400, 590) ;
Fill(242,2,79,30) ;
Quad (405, 15, 585, 15, 585, 585, 405, 585) ;
image (blueButton, 0,450) ;
image (rouge, 200 450) ;
Fill(30) ;
}
void make() {//create flèches
num = valeur [7] ; nombre de flèches
reset = false ;
pointeurs = nouveau pointeur [num] ;
faire des flèches
pour (int i = 0; i < num; i ++) {}
pointeurs [i] = nouveau pointeur (niveau); //make une nouvelle flèche
}
arrière-plan (0); actualisation //show
Delay(2000) ;
}
void portRead() {//acts presque comme une interruption quand les touches sont enfoncées
Fill(255) ;
lire = port.read() ;
Si (lecture == « A ») {}
ellipse (100, 550, 80, 80) ;
pour (int i = 0; i < pointers.length; i ++) {}
Si ((yPos > = 450)) {}
réalisation = 100 ;
}
}
}
ElseIf (lecture == « B ») {}
ellipse (300, 550, 80, 80) ;
pour (int i = 0; i < pointers.length; i ++) {}
Si ((yPos2 > = 450)) {}
réalisation = 100 ;
}
}
}
Fill(30) ;
}
keyPressed() Sub {//acts près une interruption quand les touches sont enfoncées
Si (clé == « a ») {}
ellipse (100, 550, 80, 80) ;
Si ((yPos > = 450)) {}
Delay(5) ;
réalisation = 100 ;
}
}
ElseIf (clé == « l ») {}
ellipse (300, 550, 80, 80) ;
Si ((yPos2 > = 450)) {}
Delay(5) ;
réalisation = 100 ;
}
}
}
pointeur de classe
{
flotteur gauche, droite ;
PVector pos, pos2 ;
Vel PVector ;
pointeur (int v) {}
POS = new PVector (int 100, (au hasard (-12000, 0))) ;
POS2 = new PVector (int 300, (au hasard (-12000, 0))) ;
vel = new PVector (0, (v * 2) + 3) ; seulement se déplaçant dans la direction y
}
void arr() {}
Fill(255) ;
strokeWeight(9) ;
accident vasculaire cérébral (54,83,234, 160); //vary couleurs
flèche vers la gauche
Si (pos.y < = 490) {}
Si (pos.y > = yPos) {}
yPos = pos.y ;
}
beginShape() ;
vertex (pos.x-20, pos.y) ;
vertex (pos.x, pos.y-20) ;
vertex (pos.x, pos.y-10) ;
vertex (pos.x+10, pos.y-10) ;
vertex (pos.x+10, pos.y+10) ;
vertex (pos.x, pos.y+10) ;
vertex (pos.x, pos.y+20) ;
endShape(CLOSE) ;
}
accident vasculaire cérébral (13,242,2, 160); //vary couleurs
flèche vers la droite
Si (pos2.y < = 490) {}
Si (pos2.y > = yPos2) {}
yPos2 = pos2.y ;
}
beginShape() ;
vertex (pos2.x+20, pos2.y) ;
vertex (pos2.x, pos2.y+20) ;
vertex (pos2.x, pos2.y+10) ;
vertex (pos2.x-10, pos2.y+10) ;
vertex (pos2.x-10, pos2.y-10) ;
vertex (pos2.x, pos2.y-10) ;
vertex (pos2.x, pos2.y-20) ;
endShape(CLOSE) ;
}
}
void motion() {//move flèches
pos.Add (vel); //add le vecteur de vitesse à votre position
POS2.Add(vel) ;
}
}
classe 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 jeu nouveau record!!!:" ;
Boolean envoyé ;
highscore int ;
TwitterFactory tf ;
Tweet {(int hscore)
meilleur score = hscore ;
String ConsumerKey = "***" ;
String ConsumerSecret = "***" ;
String oauth_token = "***" ;
String oauth_token_secret = "***" ;
envoyé = 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() ;
try {}
Statut st = twitter.updateStatus (msg + record + « au » + getDateTime()) ;
println ("avec succès mis à jour: [" + st.getText() + "].") ;
envoyé = true ;
}
{} catch (TwitterException e)
println(e.getStatusCode()) ;
}
}
String getDateTime() {}
DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-JJ hh : mm:") ;
Date date = new Date() ;
Return dateFormat.format(date) ;
}
}
_____________________________________________________________________
Code de l’Arduino
int ledPin = 13 ;
int valeur1, valeur2 ;
void setup() {}
Serial.Begin(9600) ;
pinMode(A0,INPUT) ;
pinMode(A1,INPUT) ;
pinMode(ledPin,OUTPUT) ;
}
void loop() {}
valeur1 = analogRead(A0) ;
value2 = analogRead(A1) ;
valeur1 = constrain(value1,0,1023) ;
value2 = constrain(value2,0,1023) ;
valeur1 = map(value1,0,1023,0,1) ;
value2 = map(value2,0,1023,0,1) ;
Si (value1 < = 10) {}
Serial.Print ("Value1 =") ;
Serial.println(value1) ;
Serial.println("A") ;
}
Si (valeur2 < = 10) {}
Serial.Print ("Value2 =") ;
Serial.println(value2) ;
Serial.println("B") ;
}
Delay(200) ;
}
Vous devez créer deux fichiers txt nommés « valeur » et meilleurs scores ' et si vous lisez les codes, vous devez savoir combien de champs il existe. Bonne chance!