Die D.D.Tap ist ein Spiel, die mit Sensoren verbunden mit Arduino und Schnittstelle, die es dem Spiel mit der Verarbeitung produziert gespielt werden kann. Es ist eine einfache Tanz Dance Revolution wie Spiel, Punkt ansammelt, wenn der Spieler die Sensoren aktiviert oder die Tasten der Tastatur betätigen, die zufällige Pfeile erreicht die rote Balken transparentere. Die Schaltung gebaut auf Arduino ist einfach, denn ich habe Sensoren beschränkt hatte. Ich habe die Photozellen in einer Pull-up-Konfiguration als Sensoren fungieren. Ich habe hochgeladen das Applet zu @http://www.openprocessing.org/visuals/?visualID=29670 , aber für die Twitter-Funktion arbeiten, geben Sie Ihren eigenen Verbraucher Schlüssel und So weiter Ihr OAuth-Konto auf http://dev.twitter.com/apps entnommen. Verladung auf openprocessing.org ist ziemlich lang, durch die große Datei so zu überspringen, drückst du "Source Code".
Auch ich das Lied yeahx3 von Chris Brown verwendet, da es den eingängigen Beat für die zufällige Pfeile hat ~
Das Ergebnis ist OK, aber ich möchte noch zum Beheben des Problems der mehr als eine Prämie für jeden Pfeil ansammeln. Dieses Problem war nicht so bedeutsam, wenn es mit der Tastatur gespielt, aber wenn seine Lesung serielle Daten aus den COM-Port, die Datenrate so schnell war, dass es Boni mehr als einmal für jeden Pfeil löst. Ich wäre froh, wenn jemand, mit der Verarbeitung-Codes helfen würde. Ich dachte, erstellen ein Array um die Boni zu überprüfen, aber das hat nicht gut funktioniert. Also, ich irgendwie halb dieses Problem gelöst mit Verzögerung in die Arduino-Code. Dies führte natürlich andere Probleme wie; Wenn beide Seiten des Pfeils zur gleichen Zeit erreicht, konnte nur ein Pfeilbonus in Anspruch genommen werden. Das Video zeigt das Beispiel der Interaktion und gäbe es ein neuen Highscore, die Partitur als Tweet auf Ihrer Seite veröffentlicht werden würde. Ich bin bereit, Anregungen Upgrade zu akzeptieren.
Hier ist der Code!!! Ohne die Twitter-Taste natürlich...
Gruppe der Pfeile
[] Zeiger Zeiger;
Boolescher Wert zurücksetzen = True;
Int Num;
öffentliche statische Schwimmer yPos, yPos2;
Twitter-Initialisierung
Tweet Twitter;
Serielle Kommunikation
Import processing.serial.*;
Serielle Schnittstelle;
Portname String = "COM1";
Int Baudrate = 9600;
Int lesen = 0;
PImage Bild, BlueButton, RedButton;
initialisieren Sie spielen für mp3
Import ddf.minim.*;
Minim Minim;
AudioPlayer ja;
Variablen zu initialisieren
PFont Schrift;
Int Ziel;
Int Ebene = 1;
Int Ergebnis = 0;
Int aufgezeichnet;
Int Leistung;
Boolesche gewinnen = False;
Boolescher Wert verlieren = False;
PrintWriter Ausgang;
String [] Datei;
Werte vom Typ String [];
Int [] Wert;
void setup() {}
Größe (600, 600);
Port zu initialisieren
Port = neue Seriennummer (diese, Portname, Baudrate);
println(Port);
Bild laden
Bild = loadImage("view.jpg");
BlueButton = loadImage("bluebutton.png");
RedButton = loadImage("redbutton.png");
Musik
Minim = new Minim(this);
Ja = minim.loadFile("yes.mp3");
Yes.Play();
Schriftart
Schriftart = loadFont("BerlinSansFB-Bold-48.vlw");
textFont(font);
Werte = loadStrings("Values.txt"); Belastungswerte
Wert = neue int[values.length];
für (Int ich = 0; ich < values.length; i ++) {}
println(Values);
Wert [i] = Integer.valueOf(values[i]).intValue(); String in Integer umwandeln
}
Datei = loadStrings("Highscore.txt"); vorherigen Datensatz zu laden
für (Int ich = 0; ich < file.length; i ++) {}
erfasst = Integer.valueOf(file[i]).intValue(); String in Integer umwandeln
}
frameRate(value[0]);
}
void draw() {}
yPos = 0; Pfeil-Position zurücksetzen
yPos2 = 0;
View(); Hintergrund-Design zeichnen
Stufe 1
Wenn (level == 1) {}
Wenn (Reset) {}
Make();
Ziel = Value [1];
}
Wenn ((millis() > = value[4]) & & (Partitur > = Ziel)) {}
Level = 2;
Reset = True;
Redraw();
}
ElseIf (millis() > = value[4]) {}
verlieren = True;
}
}
Stufe 2
ElseIf (Ebene == 2) {}
Wenn (Reset) {}
Make();
Ziel = Wert [2];
}
Wenn ((millis() > = value[5]) & & (Partitur > = Ziel)) {}
Level = 3;
Reset = True;
Redraw();
}
ElseIf (millis() > = value[5]) {}
verlieren = True;
}
}
Stufe 3
ElseIf (Ebene == 3) {}
Wenn (Reset) {}
Make();
Ziel = Wert [3];
}
Wenn ((millis() > = value[6]) & & (Partitur > = Ziel)) {}
gewinnen = True;
}
ElseIf (millis() > = value[6]) {}
verlieren = True;
}
}
Anweisungen
textSize(40);
Text ("Kontrollen", 410, 50);
textSize(20);
Text ("'a', linke \n'l zu schlagen", rechts zu schlagen ", 410, 100);
Zeichenfolge Beat = ("Ziel der Gäste:" + Ziel);
Text (Beat, 405, 200);
Text ("Ellapsed Zeit:", 410, 250);
Text (Millis () / 1000, 410, 280);
Untersuchung eine Zeichenfolge = ("Frühere Highscore:\n" + aufgenommen);
Text(beatH,410,320);
Ebene und score
Fill(0);
Ergebnis = Ergebnis + Leistung;
textSize(40);
Text ("Score", 420, 450);
Text (Score, 420, 480);
String-Lev = "Ebene" + Ebene;
Text (Lev, 420, 410);
Leistung = 0; Zurücksetzen der Leistung
Display-Pfeil
für (Int ich = 0; ich < Num; i ++) {}
(Zeiger [i] .arr); //make den Pfeil
Pointers[i].Motion();
}
Ausgang Kontrollen und Aktionen beim Spieler alle Runden beendet
Wenn (Win) {}
Füllung (255, 73, 73, 190);
textSize(80);
Text ("SIE gewinnen!!! \nPress ESC", 80, 300);
Speichern ("Tap Partitur" + Punkte + ".jpg"); kann verwendet werden, wenn Sie Anzeige auf ausgezeichnete speichern möchten
Vergleichen Sie gespeicherte Highscore und sparen Sie höchste Punktzahl
Wenn (Wert > = aufgezeichnet) {}
Fill(0);
Text ("\tNEW\nHIGHSCORE!!!", 20, 100);
Ausgang = createWriter("Highscore.txt");
Output.println(Score);
Output.Flush();
Output.Close();
senden Sie Ergebnis zu twitter
Twitter = neue tweet(score);
twitter.sendHighscore();
}
noLoop(); Stopp-Anzeige
}
ElseIf (verlieren) {}
Füllung (255, 73, 73, 190);
textSize(80);
Text ("SIE verlieren!!! \nTRY wieder: P ", 50, 350);
noLoop();
}
seriellen Port lesen
während (port.available () > 0) {}
portRead();
}
}
void stop() //stop Musik
{
Minim Audio-Klassen immer zu schließen, wenn Sie mit ihnen fertig
Yes.Close();
halten Sie immer Minim vor dem beenden
minim.Stop();
super.Stop();
}
void view() {//background design
Smooth();
noStroke();
Background(0); weißen Hintergrund festlegen
Image(Picture,0,0);
Füllung (151, 16, 201, 90); //purple bar
Quad (15, 450, 385, 450, 385, 490, 15, 490);
Füllung (2,56,242,30); //side bars
Quad (400, 10, 590, 10, 590, 590, 400, 590);
Fill(242,2,79,30);
Quad (405, 15, 585, 15, 585, 585, 405, 585);
Bild (BlueButton, 0,450);
Bild (RedButton, 200.450);
Fill(30);
}
void make() {//create Pfeile
NUM = Wert [7]; Anzahl der Pfeile
Reset = False;
Zeiger = neue Zeiger [Num];
Pfeile zu machen
für (Int ich = 0; ich < Num; i ++) {}
Hinweise [i] = neue Zeiger (Ebene); //make einen neuen Pfeil
}
Hintergrund (0); //show aktualisieren
Delay(2000);
}
void portRead() {//acts fast wie ein Interrupt, wenn Tasten gedrückt werden
Fill(255);
Lesen = port.read();
Wenn (lesen == 'A') {}
Ellipse (100, 550, 80, 80);
für (Int ich = 0; ich < pointers.length; i ++) {}
Wenn ((yPos > = 450)) {}
Leistung = 100;
}
}
}
ElseIf (lesen == 'B') {}
Ellipse (300, 550, 80, 80);
für (Int ich = 0; ich < pointers.length; i ++) {}
Wenn ((yPos2 > = 450)) {}
Leistung = 100;
}
}
}
Fill(30);
}
void keyPressed() {//acts in der Nähe einen Interrupt, wenn Tasten gedrückt werden
Wenn (Schlüssel == 'a') {}
Ellipse (100, 550, 80, 80);
Wenn ((yPos > = 450)) {}
Delay(5);
Leistung = 100;
}
}
ElseIf (Schlüssel == 'l') {}
Ellipse (300, 550, 80, 80);
Wenn ((yPos2 > = 450)) {}
Delay(5);
Leistung = 100;
}
}
}
Klasse-Zeiger
{
Schwimmer, links, rechts;
PVector pos, pos2;
PVector Vel;
Zeiger (Int V) {}
POS = neue PVector (100, Int (zufällige (-12000, 0)));
Pos2 = neue PVector (300, Int (zufällige (-12000, 0)));
Vel = neue PVector (0, (V * 2) + 3); nur verschieben in y-Richtung
}
void arr() {}
Fill(255);
strokeWeight(9);
Schlaganfall (54,83,234, 160); //vary Farben
Pfeil nach links
Wenn (pos.y < = 490) {}
Wenn (pos.y > = yPos) {}
yPos = pos.y;
}
beginShape();
Scheitelpunkt (pos.x-20, pos.y);
Scheitelpunkt (pos.x, pos.y-20);
Scheitelpunkt (pos.x, pos.y-10);
Scheitelpunkt (pos.x+10, pos.y-10);
Scheitelpunkt (pos.x+10, pos.y+10);
Scheitelpunkt (pos.x, pos.y+10);
Scheitelpunkt (pos.x, pos.y+20);
endShape(CLOSE);
}
Schlaganfall (13,242,2, 160); //vary Farben
Pfeil nach rechts
Wenn (pos2.y < = 490) {}
Wenn (pos2.y > = yPos2) {}
yPos2 = pos2.y;
}
beginShape();
Scheitelpunkt (pos2.x+20, pos2.y);
Scheitelpunkt (pos2.x, pos2.y+20);
Scheitelpunkt (pos2.x, pos2.y+10);
Scheitelpunkt (pos2.x-10, pos2.y+10);
Scheitelpunkt (pos2.x-10, pos2.y-10);
Scheitelpunkt (pos2.x, pos2.y-10);
Scheitelpunkt (pos2.x, pos2.y-20);
endShape(CLOSE);
}
}
void motion() {//move Pfeile
Pos.Add (Vel); //add der Geschwindigkeitsvektor in Ihrer position
Pos2.Add(VEL);
}
}
Klasse 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 Spiel neue Highscore!!!:";
Boolescher Wert gesendet;
Int Highscore;
TwitterFactory Tf;
Tweet (Int Hscore) {}
Highscore = Hscore;
String ConsumerKey = "***";
String ConsumerSecret = "***";
String Oauth_token = "***";
String Oauth_token_secret = "***";
gesendet = False;
ConfigurationBuilder Cb = neue ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey(ConsumerKey)
.setOAuthConsumerSecret(ConsumerSecret)
.setOAuthAccessToken(oauth_token)
.setOAuthAccessTokenSecret(oauth_token_secret);
TF = neue TwitterFactory(cb.build());
}
void sendHighscore() {}
Twitter Twitter = tf.getInstance();
versuchen Sie {}
Status-St = twitter.updateStatus (msg + Highscore + "auf" + getDateTime());
Println ("erfolgreich aktualisiert: [" + st.getText() + "].");
gesendet = True;
}
Catch (TwitterException e) {}
println(e.getStatusCode());
}
}
String getDateTime() {}
DateFormat DateFormat = neues SimpleDateFormat ("Yyyy-MM-Dd HH");
Datum = new Date();
Rückkehr dateFormat.format(date);
}
}
_____________________________________________________________________
Arduino Code
Int-LedPin = 13;
Int value1, value2;
void setup() {}
Serial.Begin(9600);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(ledPin,OUTPUT);
}
void loop() {}
Wert1 = analogRead(A0);
Value2 = analogRead(A1);
Wert1 = constrain(value1,0,1023);
Value2 = constrain(value2,0,1023);
Wert1 = map(value1,0,1023,0,1);
Value2 = map(value2,0,1023,0,1);
Wenn (Wert1 < = 10) {}
Serial.Print ("Wert1 =");
Serial.println(value1);
Serial.println("A");
}
Wenn (value2 < = 10) {}
Serial.Print ("Value2 =");
Serial.println(Value2);
Serial.println("B");
}
Delay(200);
}
Du musst zwei Txt-Dateien namens 'value' und Highscore erstellen "und wenn Sie die Codes zu lesen, sollten Sie wissen, wie viele es sind. Viel Glück!