2014年4月28日 星期一

第十週上課內容

展示期中作品

利用Leap Motion 抓取手指位置去進行簡易翻牌遊戲。
遇到困難為1. 翻牌時需要時間控制(停留多久時間翻面),但會因電腦設備問題造成leg問題。
                    2. 要怎樣讓牌兩個兩個配對翻面(用陣列解決)。

*程式碼

import de.voidplus.leapmotion.*;
LeapMotion leap;

import ddf.minim.*;
Minim minim;
AudioPlayer song;

PImage img, img2, img3, img4, img5, img6, img7;
int a[]=new int[12];
int n=0;
int b=0;
int d[]= new int[12];
boolean c=true;
int num[]=new int[2];
int time[]=new int[12];
int fingerX=-1, fingerY=-1;
int Stime=30;

void setup() {
  size(900, 900);
  leap = new LeapMotion(this);
  background(255);
  img = loadImage("1.jpg");
  img2 = loadImage("2.jpg");
  img3 = loadImage("3.jpg");
  img4 = loadImage("4.jpg");
  img5 = loadImage("5.jpg");
  img6 = loadImage("6.jpg");
  img7 = loadImage("back.jpg");

  d[0]=1;
  d[1]=2;
  d[2]=3;
  d[3]=4;
  d[4]=5;
  d[5]=6;
  d[6]=5;
  d[7]=1;
  d[8]=4;
  d[9]=2;
  d[10]=6;
  d[11]=3;
  timeCount(-1);

  minim = new Minim(this);
  song = minim.loadFile("music.mp3");
  song.play();

}
void draw() {
  background(0);

  image(img, 0, 0);
  image(img2, 220, 0);
  image(img3, 440, 0);
  image(img4, 660, 0);
  image(img5, 0, 300);
  image(img6, 220, 300);
  image(img5, 440, 300);
  image(img, 660, 300);
  image(img4, 0, 600);
  image(img2, 220, 600);
  image(img6, 440, 600);
  image(img3, 660, 600);


  if (a[0]==0)image(img7, 0, 0); //back of card
  if (a[1]==0)image(img7, 220, 0);
  if (a[2]==0)image(img7, 440, 0);
  if (a[3]==0)image(img7, 660, 0);
  if (a[4]==0)image(img7, 0, 300);
  if (a[5]==0)image(img7, 220, 300);
  if (a[6]==0)image(img7, 440, 300);
  if (a[7]==0)image(img7, 660, 300);
  if (a[8]==0)image(img7, 0, 600);
  if (a[9]==0)image(img7, 220, 600);
  if (a[10]==0)image(img7, 440, 600);
  if (a[11]==0)image(img7, 660, 600);

  for (Hand hand : leap.getHands()) {
    for (Finger finger : hand.getFingers()) {
      stroke(#FF0303);
      strokeWeight(50);
      finger.draw();
      fingerX=(int)finger.getPosition().x;
      fingerY=(int)finger.getPosition().y;
      //println(fingerX+" "+fingerY);
    }
  }


  if (c==false) {
    if (Stime--==0) {
      Stime=30;
      if (d[num[0]]==d[num[1]]) {
        a[num[0]]=1;
        a[num[1]]=1;
        time[num[1]]=60;
      }
      else {
        a[num[0]]=0;
        a[num[1]]=0;
        time[num[1]]=60;
      }
      b=0;
      c=true;
    }
  }
  else {

    if (fingerX>=0 && fingerX<=200 && fingerY>=0 && fingerY <=270) {
      if (time[0]==0 && a[0]!=1) {
        a[0]=1;
        num[b]=0;
        b++;
      }
      timeCount(0);
      time[0]--;
    }
    else if (fingerX>=220 && fingerX<=420 && fingerY>=0 && fingerY <=270) {
      if (time[1]==0 && a[1]!=1) {
        a[1]=1;
        num[b]=1;
        b++;
      }
      timeCount(1);
      time[1]--;
    }
    else if (fingerX>=440 && fingerX<=640 && fingerY>=0 && fingerY <=270) {
      if (time[2]==0 && a[2]!=1) {
        a[2]=1;
        num[b]=2;
        b++;
      }
      timeCount(2);
      time[2]--;
    }
    else if (fingerX>=660 && fingerX<=860 && fingerY>=0 && fingerY <=270) {
      if (time[3]==0 && a[3]!=1) {
        a[3]=1;
        num[b]=3;
        b++;
      }
      timeCount(3);
      time[3]--;
    }
    else if (fingerX>=0 && fingerX<=200 && fingerY>=300 && fingerY <=570) {
      if (time[4]==0 && a[4]!=1) {
        a[4]=1;
        num[b]=4;
        b++;
      }
      timeCount(4);
      time[4]--;
    }
    else if (fingerX>=220 && fingerX<=420 && fingerY>=300 && fingerY <=570) {
      if (time[5]==0 && a[5]!=1) {
        a[5]=1;
        num[b]=5;
        b++;
      }
      timeCount(5);
      time[5]--;
    }
    else if (fingerX>=440 && fingerX<=640 && fingerY>=300 && fingerY <=570) {
      if (time[6]==0 && a[6]!=1) {
        a[6]=1;
        num[b]=6;
        b++;
      }
      timeCount(6);
      time[6]--;
    }
    else if (fingerX>=660 && fingerX<=860 && fingerY>=300 && fingerY <=570) {
      if (time[7]==0 && a[7]!=1) {
        a[7]=1;
        num[b]=7;
        b++;
      }
      timeCount(7);
      time[7]--;
    }
    else if (fingerX>=0 && fingerX<=200 && fingerY>=600 && fingerY <=870) {
      if (time[8]==0 && a[8]!=1) {
        a[8]=1;
        num[b]=8;
        b++;
      }
      timeCount(8);
      time[8]--;
    }
    else if (fingerX>=220 && fingerX<=420 && fingerY>=600 && fingerY <=870) {
      if (time[9]==0 && a[9]!=1) {
        a[9]=1;
        num[b]=9;
        b++;
      }
      timeCount(9);
      time[9]--;
    }
    else if (fingerX>=440 && fingerX<=640 && fingerY>=600 && fingerY <=870) {
      if (time[10]==0 && a[10]!=1) {
        a[10]=1;
        num[b]=10;
        b++;
      }
      timeCount(10);
      time[10]--;
    }
    else if (fingerX>=660 && fingerX<=860 && fingerY>=600 && fingerY <=870) {
      if (time[11]==0 && a[11]!=1) {
        a[11]=1;
        num[b]=11;
        b++;
      }
      timeCount(11);
      time[11]--;
    }
    if (b==2)c=false;
  }
}
void timeCount(int I) {
  for (int i=0;i<12;i++) {
    if (i!=I)time[i]=30;
  }
}

*影片Demo


沒有留言:

張貼留言