2019年10月30日 星期三

Week08_

//PImage BG;
int sop=0;
int block[][]=new int [20][16];
PVector boom, bV;
float vX=0, blockX=100;
int t=0;
//float boom=blockX;
void setup() {
  size(800, 600);
  //BG=loadImage("BG.png");
  //BG.loadPixels();
  frameRate(60);
  boom= new PVector(blockX+40, 545);
  bV= new PVector(-3, -3);
}
void Random() {
  int x=0;
  x=(int)random(12)+3;
  for (int j=0; j<x; j++) {
    int c=(int)random(15);
    if (block[0][c]==1)continue;
    else block[0][c]=1;
  }
}
void drawTable() {
  Random();
  for (int i=0; i<19; i++) {
    for (int j=0; j<15; j++) {
      if (block[i][j]==1) {
        fill(#F55134);
        rect(10+j*40, 20+i*30, 40, 30);
      } else {
        fill(255);
        rect(10+j*40, 20+i*30, 40, 30);
      }
    }
  }
  fill(255);
  rect(10+0*40, 20+0*30, 600, 30);
  block();
}
void draw() {
  if(sop==0){
    background(125);
    textSize(80);fill(255);
    rect(340, 245, 150, 60);
    fill(0);text("star",340,300);
    if(mousePressed)sop=1;
    return;
  }
  background(#F5C17E);

  drawTable();
  blockX();
  boom();
  textSize(50);fill(0);text(t,650,80);
  text(bV.x,650,120);
  text(bV.y,650,160);
  int a,b;
  for ( a=0; a<19; a++) {
    for ( b=0; b<15; b++) {
      if (block[a][b]==1) {
     
        if (
          (20+a*30)+10<boom.y && boom.y<(20+a*30)+30+10
          &&
          (10+b*40)+10<boom.x && boom.x<(10+b*40)+40+10
          ){
          block[a][b]=0;
          t++;
          if(boom.y<=20+a*30+15){bV.y=-3;}
          if(boom.y>=20+a*30+15){bV.y=3;}
          if(boom.x<=10+b*40+20){bV.x=-3;}
          if(boom.x>=10+b*40+20
        ){bV.x=3;}
        }
     
      }
    }
  }

}
void boom() {
  fill(255, 0, 255);
  ellipse(boom.x, boom.y, 20, 20);
  if (mouseCode==0)boom.x=blockX+40;
  if (mouseCode==1)boom.add(bV);
  if (boom.x>600) bV.x=-3;
  if (boom.y>=535&&boom.y<=545&&boom.x>=blockX&&boom.x<=blockX+80)bV.y=-3;
  if (boom.y>600) {
    boom.x=blockX+40;
    boom.y=545;
    mouseCode=0;
    bV.x=-3;
    bV.y=-3;
  }
  if (boom.x<20) bV.x=+3;
  if (boom.y<60) bV.y=+3;
}

void block() {
  for (int j=19; j>0; j--) {
    for (int i=0; i<15; i++) {
      if (frameCount%100==0) {
        block[j][i]=block[j-1][i];
      }
    }
  }
  for (int j=0; j<15; j++) {
    block[0][j]=0;
  }
  println(frameCount);
}
void blockX() {

  fill(#0053F5);
  rect(blockX, 535, 80, 20);
  if (code==1)blockX+=vX;
  if (blockX>=525)blockX=525;
  if (blockX<=15)blockX=15;
}
int code=0;
void keyPressed() {
  if (keyCode==RIGHT) {
    vX=4;
    code=1;
  } else if (keyCode==LEFT) {
    vX=-4;
    code=1;
  }
}
int mouseCode=0;
void mousePressed() {
 bV.x=(mouseX-blockX+40)/10;
  bV.y=(mouseY-535)/10;
  mouseCode=1;
}
void mouseReleased() {
}
void keyReleased() {
  code=0;
}

沒有留言:

張貼留言

alanhc 互動技術-week17 [final]

回顧這學期的作品:  期中作業:LANDING:PLANET 賣點&特點: 炫麗的特效 物理(星球重力及降落)及粒子系統(噴射) 世界地圖可根據視角縮放 困難點: 重寫3次最終改寫成物件導向的CLASS寫法...