2014年1月12日 星期日

第10組-互動技術期末作品-節奏音感-99163116,99163186

遊戲名稱:節奏音感
遊戲玩法:在放音樂的過程中,會有音階隨機掉下來,操作的方法就是將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:
遊戲執行結果:

電腦側錄結果:

沒有留言:

張貼留言