遊戲名稱:節奏音感
遊戲玩法:在放音樂的過程中,會有音階隨機掉下來,操作的方法就是將Processing與Arduino的程式碼互相連接,再利用Arduino硬體組成的5個按鍵來操作,當音階到達指定的位置時按下,程式碼就會依照所設定的預設值範圍來判斷有無按到,在按到的過程中會出現閃光的特效,每按成功一次就加分數100分,直到音樂放完為止,遊戲結束後,在最後的畫面會出現總分。
Processing程式碼:
PImage bg,blue,orange,green,blue1,orange1;
PImage imgPub;
PImage imgMusic;
PImage imgPop;
import processing.serial.*;
Serial myPort;
int N=6;
int count = 9700;
float []thingX=new float[6], thingY=new float[6],thingType = new float[6];
int grade=0;
int val;
import ddf.minim.*;
Minim m;
AudioPlayer player;
void setup(){
myPort = new Serial(this, "COM4", 9600);
imgPub=loadImage("Pub.jpg");
imgMusic=loadImage("Music.jpg");
imgPop=loadImage("Pop.jpg");
image(imgPop,400,600);
image(imgMusic,400,600);
image(imgPub,400,600);
bg = loadImage("background.jpg");
blue = loadImage("blue.jpg");
orange = loadImage("orange.gif");
green = loadImage("green.jpg");
blue1 = loadImage("blue1.gif");
orange1 = loadImage("orange1.jpg");
m = new Minim(this);
player = m.loadFile("DNA.mp3");
size(400,600);
for(int i=0;i<N;i++){
newThing(i);
}
}
int countDown=10*30;
void draw(){
player.play();
val = myPort.read();
image(imgPop,0,0,400,600);
if(keyPressed)
textSize(40);
text("Start!!", 250, 300);
if(key=='s')
image(imgMusic,0,0,400,600);
if(countDown>0){
//background(255,0,255);
countDown--;
text("Time: "+countDown/50,170,300);
return;
}
image(bg,0,0, 400,600);
image(blue,0,575,80,40);
image(orange,80,575,80,40);
image(green,160,575,80,40);
image(blue1,240,575,80,40);
image(orange1,320,575,80,40);
for(int i=0;i<N;i++){
if(thingType[i]==1)
{
drawblue(i);
//if (keyPressed)
//if(key=='d'|| key=='D')
println(val);
if(525<thingY[i] && thingY[i]<700 && val==50)
{
thingY[i] = 650; grade+=100; //println(grade);
fill(#0046FF,90);
rect(0,575,80,-600);
}
}
else if(thingType[i]==2)
{
draworange(i);
//if (keyPressed)
{
//if(key=='f'|| key=='F')
//println(val);
if(525<thingY[i] && thingY[i]<600 && val==51)
{
thingY[i] = 650; grade+=100; println(grade);
fill(#FF7D00,90);
rect(80,575,80,-600);
}
}
}
else if(thingType[i]==3)
{
drawgreen(i);
//if (keyPressed)
{
//if(key=='b'|| key=='B')
//println(val);
if(525<thingY[i] && thingY[i]<600 && val==52)
{
thingY[i] = 650; grade+=100; println(grade);
fill(#10FF00,90);
rect(160,575,80,-600);
}
}
}
else if(thingType[i]==4)
{
drawblue1(i);
//if (keyPressed)
{
//if(key=='k'|| key=='K')
//println(val);
if(525<thingY[i] && thingY[i]<600 && val==49)
{
thingY[i] = 650; grade+=100; println(grade);
fill(#0046FF,90);
rect(240,575,80,-600);
}
}
}
else if(thingType[i]==5)
{
draworange1(i);
//if (keyPressed)
{
//if(key=='j'|| key=='J')
println(val);
if (525<thingY[i] && thingY[i]<600 && val==53)
{
thingY[i] = 650; grade+=100; println(grade);
fill(#FF7D00,90);
rect(320,575,80,-600);
}
}
}
thingY[i]+=3;
if(thingY[i]>600) newThing(i);
}
if(count>0){
count--;
text("Time: "+count/50,170,300);
}
if(count==0){
//background(#FF0015);
//background(imgMusic,400,600);
image(imgMusic,0,0,400,600);
fill(255,0,0);
text("Score: "+grade,122,300);
}
}
void newThing(int i){
thingY[i] = -random(200);
thingX[i] = random(400);
thingType[i] = int(random(5))+1;
}
void drawblue(int i){
thingX[i]=int(random(0,0));
image(blue,thingX[i],thingY[i],80,22);
}
void draworange(int i){
thingX[i]=int(random(80,80));
image(orange,thingX[i],thingY[i],80,22);
}
void drawgreen(int i){
thingX[i]=int(random(160,160));
image(green,thingX[i],thingY[i],80,22);
}
void drawblue1(int i){
thingX[i]=int(random(240,240));
image(blue1,thingX[i],thingY[i],80,22);
}
void draworange1(int i){
thingX[i]=int(random(320,320));
image(orange1,thingX[i],thingY[i],80,22);
}
Arduino硬體程式碼:
int buttonPin5 = 5;
int buttonPin2 = 2;
int buttonPin3 = 3;
int buttonPin4 = 4;
int buttonPin6 = 6;
int buttonState5 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
int buttonState6 = 0;
void setup() {
pinMode(buttonPin5, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(buttonPin3, INPUT);
pinMode(buttonPin4, INPUT);
pinMode(buttonPin6, INPUT);
Serial.begin(9600);
}
void loop() {
buttonState5 = digitalRead(buttonPin5);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
buttonState6 = digitalRead(buttonPin6);
if (buttonState5 == HIGH) {
Serial.write('1');
}
if (buttonState2== HIGH) {
Serial.print('2');
}
if (buttonState3 == HIGH) {
Serial.print('3');
}
if (buttonState4 == HIGH) {
Serial.print('4');
}
if (buttonState6 == HIGH) {
Serial.print('5');
}
else if(buttonState2 == LOW&&buttonState3 == LOW&&buttonState4 == LOW&&buttonState5 == LOW&&buttonState6 == LOW){
Serial.write('0');
}
delay(100);
}
Arduino硬體電路連接:
圖片結果截圖:
影片DEMO:
遊戲執行結果:
電腦側錄結果:
沒有留言:
張貼留言