De D.D.Tap is een spel dat kan worden gespeeld met behulp van sensoren die zijn aangesloten op de Arduino en het aan het spel geproduceerd met verwerking interface. Het is een eenvoudige dans dans revolutie als spel dat punt accumuleert wanneer de speler de sensoren activeert of druk op de toetsen als de willekeurige pijlen bereikt de rode transparante balk. Het circuit gebouwd op Arduino is eenvoudig omdat ik had gebonden sensoren. Ik gebruikte de fotocellen in een pull-up configuratie om als sensoren fungeren. Ik heb geüpload de applet ook @http://www.openprocessing.org/visuals/?visualID=29670 , maar voor de Twitter functie werkt, moet u uw eigen sleutel van de consumenten enzovoort ontleend aan uw account OAuth op http://dev.twitter.com/apps . Laden op openprocessing.org is vrij lang als gevolg van het grote bestand dus overslaan, drukt u gewoon op "Broncode".
Ook, ik gebruikte het lied yeahx3 door Chris Brown aangezien er de pakkende beat voor de willekeurige pijlen ~
Het resultaat is OK, maar ik wil nog het probleem van de accumulatie van meer dan één bonus voor elke pijl op te lossen. Dit probleem was niet zo belangrijk wanneer gespeeld met het toetsenbord, maar toen haar Lees seriële data van de com-poort, de gegevenssnelheid zo snel was dat er wordt gegenereerd bonussen meer dan één keer voor elke pijl. Ik zou blij zijn als iemand met de codes van de verwerking helpen wil. Ik dacht aan het maken van een array om te controleren de bonussen, maar dat werkte niet goed. Dus, ik een of andere manier half dat probleem opgelost met behulp van vertraging in de code van de Arduino. Dit leidt natuurlijk andere problemen zoals; Als beide zijden van de pijl bereikt op hetzelfde moment, kon slechts één pijl bonus worden geclaimd. De video toont het voorbeeld van de interactie en dat als er een nieuwe highscore, de score zou worden geplaatst als een tweet op uw pagina. Ik ben bereid te accepteren upgrade suggesties.
Hier is de code!!! Zonder de twitter toets natuurlijk...
groep van pijlen
aanwijzer [] aanwijzers;
Boolean reset = true;
int num;
openbare statische float yPos, yPos2;
Twitter initialisatie
Tweet twitter;
Seriële communicatie
importeren van processing.serial.*;
Seriële poort;
String portname = "COM1";
int baudrate = 9600;
int lezing = 0;
PImage figuur, blueButton, rode toets;
initialiseren van spelen voor mp3
importeren van ddf.minim.*;
Minim minim;
AudioPlayer Ja;
initialiseren van variabelen
PFont lettertype;
int doel;
int niveau = 1;
int score = 0;
int ingeschreven;
int prestatie;
Booleaanse win = false;
Boolean verliezen = false;
PrintWriter output;
Tekenreeks [] bestand;
Tekenreeks [] waarden;
int [] waarde;
VOID Setup {}
grootte (600, 600);
initialiseren van de poort
poort = nieuwe Serial (deze, portname, baudrate);
println(Port);
afbeelding laden
afbeelding = loadImage("view.jpg");
blueButton = loadImage("bluebutton.png");
rode toets = loadImage("redbutton.png");
muziek
Minim = nieuwe Minim(this);
Ja = minim.loadFile("yes.mp3");
Yes.Play();
lettertype
lettertype = loadFont("BerlinSansFB-Bold-48.vlw");
textFont(font);
waarden = loadStrings("Values.txt"); belastingswaarden
waarde = nieuwe int[values.length];
for (int i = 0; ik < values.length; i ++) {}
println(values);
waarde [i] = Integer.valueOf(values[i]).intValue(); tekenreeks converteren naar getal
}
bestand = loadStrings("Highscore.txt"); laden van de vorige record
for (int i = 0; ik < file.length; i ++) {}
opgenomen = Integer.valueOf(file[i]).intValue(); tekenreeks converteren naar getal
}
frameRate(value[0]);
}
VOID draw() {}
yPos = 0; Reset pijl locatie
yPos2 = 0;
View(); achtergrondontwerp tekenen
niveau 1
Als (niveau == 1) {}
Als (reset) {}
make();
doelstelling = waarde [1];
}
Als ((millis() > = value[4]) & & (score > = doel)) {}
niveau = 2;
reset = true;
redraw();
}
anders als (millis() > = {value[4])}
verliezen = true;
}
}
niveau 2
anders als (niveau == 2) {}
Als (reset) {}
make();
doelstelling = waarde [2];
}
Als ((millis() > = value[5]) & & (score > = doel)) {}
niveau = 3;
reset = true;
redraw();
}
anders als (millis() > = {value[5])}
verliezen = true;
}
}
niveau 3
anders als (niveau == 3) {}
Als (reset) {}
make();
doelstelling = waarde [3];
}
Als ((millis() > = value[6]) & & (score > = doel)) {}
winnen = true;
}
anders als (millis() > = {value[6])}
verliezen = true;
}
}
instructies
textSize(40);
tekst ("Controls", 410, 50);
textSize(20);
tekst ("'a' te raken van de linker \n'l' te raken recht", 410, 100);
Tekenreeks beat = ("doelscore:" + doel);
tekst (beat, 405, 200);
tekst ("verstreken tijd:", 410, 250);
tekst (millis () / 1000, 410, 280);
String beatH = ("Vorige Highscore:\n" + opgenomen);
Text(beatH,410,320);
niveau en score
Fill(0);
Score = score + verwezenlijking;
textSize(40);
tekst ("Score", 420, 450);
tekst (score, 420, 480);
String lev = "niveau" + niveau;
tekst (lev, 420, 410);
prestatie = 0; prestatie resetten
pijl weergeven
for (int i = 0; ik < num; i ++) {}
aanwijzers [i] .arr (); //make de pijl
pointers[i].Motion();
}
Uitvoer van besturingselementen en acties als speler is alle rondes voltooid
Als (win) {}
vulling (255, 73 73, 190);
textSize(80);
tekst ("YOU WIN!!! \nPress ESC", 80, 300);
opslaan ("Tap score" partituur + ".jpg"); kan worden gebruikt als u wilt weergeven op de winnende opslaan
vergelijken van opgeslagen highscore en hoogste score opslaan
Als (score > = opgenomen) {}
Fill(0);
tekst ("\tNEW\nHIGHSCORE!", 20, 100);
uitvoer = createWriter("Highscore.txt");
output.println(Score);
output.Flush();
output.Close();
Stuur resultaat op twitter
Twitter = nieuwe tweet(score);
twitter.sendHighscore();
}
noLoop(); weergave stopzetten
}
anders als (verliezen) {}
vulling (255, 73 73, 190);
textSize(80);
tekst ("je verliest!!! \nTRY weer: P ", 50, 350);
noLoop();
}
lezen van de seriële poort
terwijl (port.available () > 0) {}
portRead();
}
}
VOID stop() //stop muziek
{
Minim audio klassen altijd sluiten als u klaar met hen bent
Yes.Close();
Minim altijd te stoppen voordat u afsluit
Minim.stop();
Super.stop();
}
VOID view() {//background ontwerp
Smooth();
noStroke();
Background(0); witte achtergrond instellen
Image(Picture,0,0);
vulling (151 16, 201, 90); //purple bar
Quad (15 450, 385, 450, 385, 490, 15, 490);
vulling (2,56,242,30), //side balken
Quad (400, 10, 590, 10, 590, 590, 400, 590);
Fill(242,2,79,30);
Quad (405, 15, 585, 15, 585, 585, 405, 585);
afbeelding (blueButton, 0,450);
afbeelding (rode toets, 200,450);
Fill(30);
}
VOID make() {//create pijlen
num = waarde [7]; aantal pijlen
Reset = false;
wijzers = nieuwe pointer [num];
pijlen maken
for (int i = 0; ik < num; i ++) {}
aanwijzers [i] = nieuwe aanwijzer (niveau); //make een nieuwe pijl
}
achtergrond (0); //show vernieuwen
delay(2000);
}
VOID portRead() {//acts bijna als een interrupt wanneer toetsen worden ingedrukt
Fill(255);
lezen = port.read();
Als (lezen == 'A') {}
ellips (100, 550, 80, 80);
for (int i = 0; ik < pointers.length; i ++) {}
Als ((yPos > = 450)) {}
prestatie = 100;
}
}
}
anders als (lezen == 'B') {}
ellips (300 550, 80, 80);
for (int i = 0; ik < pointers.length; i ++) {}
Als ((yPos2 > = 450)) {}
prestatie = 100;
}
}
}
Fill(30);
}
VOID keyPressed() {//acts in de buurt van een interrupt wanneer toetsen worden ingedrukt
Als (sleutel == 'a') {}
ellips (100, 550, 80, 80);
Als ((yPos > = 450)) {}
delay(5);
prestatie = 100;
}
}
anders als (sleutel == 'l') {}
ellips (300 550, 80, 80);
Als ((yPos2 > = 450)) {}
delay(5);
prestatie = 100;
}
}
}
klasse aanwijzer
{
float links, rechts;
PVector pos, pos2;
PVector vel;
aanwijzer (int v) {}
POS = nieuwe PVector (100, int (willekeurige (-12000, 0)));
pos2 = nieuwe PVector (300, int (willekeurige (-12000, 0)));
vel nieuwe PVector = (0, (v * 2) + 3); alleen in de y-richting te bewegen
}
ongeldig arr() {}
Fill(255);
strokeWeight(9);
beroerte (54,83,234, 160); //vary kleuren
pijl-links
Als (pos.y < = 490) {}
Als (pos.y > = yPos) {}
yPos = pos.y;
}
beginShape();
hoekpunt (pos.x-20, pos.y);
hoekpunt (pos.x, pos.y-20);
hoekpunt (pos.x, pos.y-10);
hoekpunt (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);
}
beroerte (13,242,2, 160); //vary kleuren
pijl-rechts
Als (pos2.y < = 490) {}
Als (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);
hoekpunt (pos2.x-10, pos2.y+10);
hoekpunt (pos2.x-10, pos2.y-10);
hoekpunt (pos2.x, pos2.y-10);
hoekpunt (pos2.x, pos2.y-20);
endShape(CLOSE);
}
}
VOID motion() {//move pijlen
POS.Add (vel); //add de snelheid vector naar uw positie
pos2.Add(vel);
}
}
klasse tweet {}
importeren van twitter4j.conf.*;
importeren van twitter4j.internal.async.*;
importeren van twitter4j.internal.org.json.*;
importeren van twitter4j.internal.logging.*;
importeren van twitter4j.json.*;
importeren van twitter4j.internal.util.*;
importeren van twitter4j.management.*;
importeren van twitter4j.auth.*;
importeren van twitter4j.api.*;
importeren van twitter4j.util.*;
importeren van twitter4j.internal.http.*;
importeren van twitter4j.*;
importeren van twitter4j.internal.json.*;
Koord msg = "tik tik spel nieuwe Highscore!!!:";
Boolean gezonden;
int de highscore;
TwitterFactory tf;
Tweet (int hscore) {}
highscore = hscore;
ConsumerKey koord = "***";
ConsumerSecret koord = "***";
Oauth_token koord = "***";
Oauth_token_secret koord = "***";
verzonden = false;
ConfigurationBuilder cb = nieuwe ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey(ConsumerKey)
.setOAuthConsumerSecret(ConsumerSecret)
.setOAuthAccessToken(oauth_token)
.setOAuthAccessTokenSecret(oauth_token_secret);
tf = new TwitterFactory(cb.build());
}
ongeldig sendHighscore() {}
Twitter twitter = tf.getInstance();
Probeer {}
Status st = twitter.updateStatus (msg + highscore + "op" + getDateTime());
println ("met succes bijgewerkte: [" + st.getText() + "].");
verzonden = true;
}
vangst (TwitterException e) {}
println(e.getStatusCode());
}
}
String getDateTime() {}
DateFormat dateFormat = nieuwe SimpleDateFormat ("JJJJ-MM-dd uu");
Datum datum = nieuwe Date();
Return dateFormat.format(date);
}
}
_____________________________________________________________________
Arduino Code
int ledPin = 13;
int waarde1; waarde2;
VOID Setup {}
Serial.begin(9600);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(ledPin,OUTPUT);
}
void loop {}
waarde1 = analogRead(A0);
waarde2 = analogRead(A1);
waarde1 = constrain(value1,0,1023);
waarde2 = constrain(value2,0,1023);
waarde1 = map(value1,0,1023,0,1);
waarde2 = map(value2,0,1023,0,1);
Als (waarde1 < = 10) {}
Serial.Print ("waarde1 =");
Serial.println(Value1);
Serial.println("A");
}
Als (waarde2 < = 10) {}
Serial.Print ("waarde2 =");
Serial.println(Value2);
Serial.println("B");
}
delay(200);
}
U moet twee txt-bestanden met de naam 'waarde' en highscore maken ' en als je de codes leest, moet u weten hoeveel velden er zijn. Succes!