2013年11月10日 星期日

week10 鄭羽婷示範, 期中作品展示

1. 把大家的期中作品準備好, 要在老師的電腦跑展示(廣播並票選)
2. 今天要上傳影片 (自己錄好,上傳youtube, 留下連結) (仿上學期電腦圖學課的期末作品)

=====
3. 發 Arduino Starter Kit (包含各式電子零件,及Arduino UNO板) 及 Arduino Mega 2560板

介紹:
轉珠遊戲!!贏書有兩種結果!!結束後會自動跳回起始畫面!!
不過因為玩的人有點爛!!所以它分成了兩部影片!!哈哈




import ddf.minim.*;
Minim minim;
AudioPlayer star;
int a=1;

int Xmax=7, Ymax=5;
int c[][]=new int [Xmax][Ymax];//chose color index
int Color[]=new int [5];//Chose color
int test=1, t;//read mouse event in first time
int X=-1, Y=-1;//=-1 loop unMousePressed don't do that
int Cx, Cy;//change ball X &Y value
int TC;//record move ball color

int N[][]=new int [Xmax][Ymax];
boolean clear=false;
int n;
boolean MoveBall=true;

int sum[]=new int [5];
boolean attack=false;
boolean Ustop=true;
int Blood=360, MBlood=360;

PImage background, ATTACK, win, lose, P1, P2, P3, P4, P5;
PImage play1, play2;

void setup() {
  minim = new Minim(this);

  background= loadImage("0.jpg");
  ATTACK=loadImage("attack.jpg");
  win=loadImage("win.jpg");
  lose=loadImage("lose.jpg");
  P1=loadImage("a.jpg");
  P2=loadImage("b.jpg");
  P3=loadImage("c.jpg");
  P4=loadImage("d.jpg");
  P5=loadImage("e.jpg");
  play1=loadImage("play.png");
  play2=loadImage("play2.png");
  size(400, 600);
  Color[0]=#E51E1E;
  Color[1]=#201EE5;
  Color[2]=#F6FF00;
  Color[3]=#03FF00;
  Color[4]=#5D1E9D;
  for (int i=0;i<Xmax;i++) {
    for (int j=0;j<Ymax;j++) {
      c[i][j]=(int)random(5);
    }
  }
}

int AT=8;
boolean Win=false;
boolean Loss=false;
boolean stage=false;

int Time=20;

void draw() {

  if (stage) {
    if (Win||Loss) {
      if (Win){image(win, 0, 0);}
      else {image(lose, 0, 0);}
   
      if(a==3){star.close();star=minim.loadFile("c.mp3");music();}
      if(a==4){star.close();star=minim.loadFile("d.mp3");music();}
      a=1;
      if (Time<0) {
        star.close();
        Time=10;
        AT=8;
        Win=false;
        Loss=false;
        stage=false;

        for (int i=0;i<Xmax;i++) {
          for (int j=0;j<Ymax;j++) {
            c[i][j]=(int)random(5);
          }
        }

        Blood=360;
        MBlood=360;
        clear=false;
        MoveBall=true;
        attack=false;
        Ustop=true;
      }
      Time--;
    }

    else {
      if(a==2){star.close();star=minim.loadFile("b.mp3");music();}
      a=3;
      image(background, 0, 0);
      image(P1, 5, 210);
      image(P2, 85, 210);
      image(P3, 165, 210);
      image(P4, 245, 210);
      image(P5, 325, 210);

      stroke(0);
      drawBall();


      strokeCap(ROUND);
      if (attack) {

        if (AT>6) {
          noFill();
          for (int i=0;i<5;i++) {
            stroke(Color[i]);
            strokeWeight(10);
            if (sum[i]!=0)
              bezier(150+i*20, 80, i*80+20, 25, i*80+20, 100, i*80+40, 200);
          }
        }

        else {
          if (AT>4) {
            for (int i=0;i<5;i++) {
              Blood-=sum[i]*2;
              sum[i]=0;
            }

            if (Blood<0) {
              Blood=0;
              Win=true;
            }
          }
          else {
            if (AT>2) {
              image(ATTACK, 50, 5);
            }
            else if (AT>1) {
              MBlood-=(random(20)+40);
              if (MBlood<0) {
                MBlood=0;
                Loss=true;
                a=4;
              }
            }
          }
        }
        AT--;
        if (AT<=0) {
          attack=false;
        }
      }
      strokeWeight(12);
      stroke(#C10A0A);
      strokeCap(PROJECT);
      line(20, 10, 20+Blood, 10);
      line(20, 320, 20+MBlood, 320);

      strokeWeight(5);
      stroke(#52091A);
      fill(#F041B6);
      ellipse(20, 10, 25, 25);
      ellipse(20, 320, 25, 25);


      stroke(0);
      if (Ustop) {
        if (MoveBall==true&&attack==false) {
          frameRate(20);
          if (mousePressed==true) {
            fill(Color[TC]);
            ellipse(mouseX, mouseY, 40, 40);
            Cx=mouseX/10*10/50-1;
            Cy=(mouseY-300)/10*10/50-1;
            if (mouseX%50>=25&&mouseX%50<50)Cx+=1;
            if ((mouseY-300)%50>=25&&(mouseY-300)%50<50)Cy+=1;
            if (mouseX>350)Cx=6;//range
            if (mouseY>550)Cy=4;
            if (mouseX<50)Cx=0;
            if (mouseY<350)Cy=0;
            if (Cx!=X||Cy!=Y) {//not the same region
              c[X][Y]=c[Cx][Cy];
              X=Cx;
              Y=Cy;
            }
          }
        }
        else {
          frameRate(3);
          if (n%3==0)score();
          else if (n%3==1)fallBall();
          else {
            addBall();
            Ustop=false;
          }
          n++;
          test();
        }
      }
      else {
        score();
        Ustop=true;
        test();
        if (MoveBall)attack=true;
      }
    }
  }

  else {
    background(#13D5E5);
    image(play1, 150, 150);
    image(play2, 150, 280);
    if (mousePressed==true) {
      if (abs(mouseX-200)<100&&abs(mouseY-300)<100)
        stage=true;
    }

      if(a==1){star=minim.loadFile("a.mp3");music();}
      a=2;
  }
}

void music(){
  star.loop();

}

void stop() {
  star.close();
  minim.stop();
  super.stop();
}

void mousePressed() {
  if (t==0) {
    X=mouseX/10*10/50-1;
    Y=(mouseY-300)/10*10/50-1;
    if (mouseX%50>=25&&mouseX%50<50)X+=1;
    if ((mouseY-300)%50>=25&&(mouseY-300)%50<50)Y+=1;
    if (mouseX>350)X=6;//range
    if (mouseY>550)Y=4;
    if (mouseX<50)X=0;
    if (mouseY<350)Y=0;
    TC=c[X][Y];
  }
  t=test;//read mosue event on first time
  AT=8;
}
void mouseReleased() {
  c[X][Y]=TC;
  X=-1;
  Y=-1;
  t=0;
  n=0;
  MoveBall=false;
}

void test() {
  MoveBall=true;
  for (int i=0;i<Xmax;i++) {
    for (int j=0;j<Ymax;j++) {
      if (N[i][j]!=0)MoveBall=false;
    }
  }
}

void drawBall() {

  for (int i=0;i<Xmax;i++) {
    for (int j=0;j<Ymax;j++) {
      if (i==X&&j==Y)continue;//mousePressed do
      if (N[i][j]!=0)continue;
      fill(Color[c[i][j]]);
      ellipse((i+1)*50, (j+1)*50+300, 40, 40);
    }
  }
}

void addBall() {
  for (int i=0;i<Xmax;i++) {
    for (int j=0;j<Ymax;j++) {
      if (N[i][j]==6) {
        c[i][j]=(int)random(5);
        N[i][j]=0;
      }
    }
  }
}

void fallBall() {
  for (int i=0;i<Xmax;i++) {
    for (int j=0;j<Ymax;j++) {
      if (N[i][j]!=0) {
        for (int k=j;k>0;k--) {
          c[i][k]=c[i][k-1];
          N[i][k]=N[i][k-1];
        }
        N[i][0]=6;
      }
    }
  }
}

void score() {
  int count=0, count2=0;

  for (int i=0;i<Xmax;i++) {
    for (int j=0;j<Ymax;j++) {

      for (int k=i+1;k<Xmax;k++) {
        if (c[i][j]==c[k][j])count++;
        else break;
      }

      for (int k=j+1;k<Ymax;k++) {
        if (c[i][j]==c[i][k])count2++;
        else break;
      }

      if (count>1) {
        for (int k=i;k<=i+count;k++) {
          N[k][j]=c[i][j]+1;
          sum[c[i][j]]++;
        }
      }

      if (count2>1) {    
        for (int k=j;k<=j+count2;k++) {
          N[i][k]=c[i][j]+1;
          sum[c[i][j]]++;
        }
      }
      count=0;
      count2=0;
    }
  }
}

沒有留言:

張貼留言