2023年11月2日 星期四

學校滑鼠有夠爛 - Week08 - 互動技術🦆

 Week08

//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動
void setup(){
 size(400,400); 
}
float x=200,y=200,vx=1,vy=1;
void draw(){
  ellipse(x,y,10,10);
  x += vx;
  y += vy;
}






//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float x=50,y=250,vx=2,vy=-20;
void draw(){
  ellipse(x,y,10,10);
  x += vx;
  y += vy;
  vy += 0.98;//重力加速度
}


-2




//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float x=50,y=250,vx=2,vy=-20;
void draw(){
  ellipse(x,y,10,10);
  x += vx;
  y += vy;
  vy += 0.98;//重力加速度
  if(y>350){
    y=350;
  }
  ellipse(x,y,10,10);
}




//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float x=50,y=250,vx=2,vy=-20;
void draw(){
  ellipse(x,y,10,10);
  x += vx;
  y += vy;
  vy += 0.98;//重力加速度
  if(y>350){
    y=350;
    vy = -vy*0.5;//能量耗損、速度變慢
  }
  ellipse(x,y,10,10);
}




//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float x=50,y=250,vx=2,vy=-20;
void draw(){
  ellipse(x,y,10,10);
  x += vx;
  y += vy;
  vy += 0.98;//重力加速度
  if(y>350){
    y=350;
    vy = -vy*0.5;//能量耗損、速度變慢
    vx = vx*0.8;
  }
  ellipse(x,y,10,10);
}




//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float marioX=50,marioY=250,vx=0,vy=0;
void draw(){
  background(108,137,255);
  marioX += vx;
  fill(255,0,0);ellipse(marioX,marioY,15,25);
  fill(229,119,42);rect(0,250,400,150);
}
void keyPressed(){ 
  if(keyCode==RIGHT) vx=2;
  if(keyCode==LEFT) vx=-2;
}

配合鍵盤,控制人物左右移動

-4




//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float marioX=50,marioY=250,vx=0,vy=0;
void draw(){
  background(108,137,255);
  marioX += vx;
  marioY += vy;
  fill(255,0,0);ellipse(marioX,marioY,15,20);
  fill(229,119,42);rect(0,260,400,150);
}
void keyPressed(){ 
  if(keyCode==RIGHT) vx=2;
  if(keyCode==LEFT) vx=-2;
  if(keyCode==UP) vx=-20;
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx=0; 
}

可以二段跳

-5


//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float marioX=50,marioY=250,vx=0,vy=0;
void draw(){
  background(108,137,255);
  marioX += vx;
  if(flying){//如果在飛行中
    marioY += vy;//上下的位置會改變
    vy += 0.98;//重力速度往下
    if(marioY >= 250){//碰到地板
      marioY = 250;
      flying = false;//不再飛行
    }
  }
  fill(255,0,0);ellipse(marioX,marioY,15,20);
  fill(229,119,42);rect(0,260,400,150);
}
boolean flying = false;//一開始沒有在飛
void keyPressed(){ 
  if(keyCode==RIGHT) vx=2;
  if(keyCode==LEFT) vx=-2;
  if(keyCode==UP && flying==false){
    vy=-20;
    flying = true;//開始飛行
  }
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx=0; 
}
碰到地板才能跳

-6




//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float marioX=50,marioY=250,vx=0,vy=0;
void draw(){
  background(108,137,255);
  marioX += vx;
  if(flying){//如果在飛行中
    marioY += vy;//上下的位置會改變
    vy += 0.98;//重力速度往下
    if(marioY >= 250){//碰到地板
      marioY = 250;
      flying = false;//不再飛行
    }
  }
  fill(255,0,0);ellipse(marioX,marioY,15,20);
  fill(229,119,42);rect(0,260,400,150);
}
boolean flying = false;//一開始沒有在飛
void keyPressed(){ 
  if(keyCode==RIGHT) vx=2;
  if(keyCode==LEFT) vx=-2;
  if(keyCode==UP){
    vy=-20;
    flying = true;//開始飛行
  }
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx=0; 
}

碰撞偵測

-7




//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float marioX=50,marioY=250,vx=0,vy=0;
void draw(){
  background(108,137,255);
  marioX += vx;
  if(flying){//如果在飛行中
    marioY += vy;//上下的位置會改變
    vy += 0.98;//重力速度往下
    if(marioY >= 250){//碰到地板
      marioY = 250;
      flying = false;//不再飛行
    }
  }
  fill(255,0,0);ellipse(marioX,marioY,15,20);
  fill(229,119,42);rect(0,260,400,150);
  fill(229,119,42);rect(200,150,20,20);
  if(hitBox(200,150,20,20)){
    if(vy>0){
      marioY = 150-10;
      flying = false;
    }else{
       vy=0;
       marioY = 150+20+10;
    }
  }
}
boolean hitBox(int x,int y,int w,int h){
  if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true;
  else return false;
}
boolean flying = false;//一開始沒有在飛
void keyPressed(){ 
  if(keyCode==RIGHT) vx=2;
  if(keyCode==LEFT) vx=-2;
  if(keyCode==UP && flying==false){
    vy=-20;
    flying = true;//開始飛行
  }
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx=0; 
}

落在磚塊上後,往左右移動無法落至地面

-8




//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float marioX=50,marioY=250,vx=0,vy=0;
void draw(){
  background(108,137,255);
  marioX += vx;
  if(flying){//如果在飛行中
    marioY += vy;//上下的位置會改變
    vy += 0.98;//重力速度往下
    if(marioY >= 250){//碰到地板
      marioY = 250;
      flying = false;//不再飛行
    }
  }
  fill(255,0,0);ellipse(marioX,marioY,15,20);
  fill(229,119,42);rect(0,260,400,150);
  fill(229,119,42);rect(200,150,20,20);
  if(hitBox(200,150,20,20)){
    if(vy>0){
      marioY = 150-10;
      flying = false;
      stand_box = true;
    }else{
       vy=0;
       marioY = 150+20+10;
    }
  }
  if(stand_box==true && flying== false && leaveBox(200,150,20,20)){
    stand_box=false;
    flying = true;
    vy=0;
  }
}
boolean leaveBox(int x,int y,int w,int h){
  if(x-7>marioX || marioX>x+w+7) return true;
  else return false;
}
boolean hitBox(int x,int y,int w,int h){
  if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true;
  else return false;
}
boolean flying = false,stand_box=false;//一開始沒有在飛
void keyPressed(){ 
  if(keyCode==RIGHT) vx=2;
  if(keyCode==LEFT) vx=-2;
  if(keyCode==UP && flying==false){
    vy=-20;
    flying = true;//開始飛行
  }
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx=0; 
}

能成功落地

-9


//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float marioX=50,marioY=250,vx=0,vy=0;
void draw(){
  background(108,137,255);
  marioX += vx;
  if(flying){//如果在飛行中
    marioY += vy;//上下的位置會改變
    vy += 0.98;//重力速度往下
    if(marioY >= 250){//碰到地板
      marioY = 250;
      flying = false;//不再飛行
    }
  }
  fill(255,0,0);ellipse(marioX,marioY,15,20);
  fill(229,119,42);rect(0,260,400,150);
  drawAndTestBox(100,150,20,20);
  drawAndTestBox(200,150,20,20);
  drawAndTestBox(300,150,20,20);
}
void drawAndTestBox(int x,int y,int w,int h){
  fill(229,119,42); rect(x,y,w,h);
  if(hitBox(x,y,w,h)){
    if(vy>0){
      marioY = y-10;
      flying = false;
      stand_box = true;
    }else{
       vy=0;
       marioY = y+h+10;
    }
  }
  if(stand_box==true && flying== false && leaveBox(x,y,w,h)){
    stand_box=false;
    flying = true;
    vy=0;
  }
}
boolean leaveBox(int x,int y,int w,int h){
  if(x-7>marioX || marioX>x+w+7) return true;
  else return false;
}
boolean hitBox(int x,int y,int w,int h){
  if(x-7<marioX && marioX<x+w+7 && y-10<marioY && marioY<y+h+10) return true;
  else return false;
}
boolean flying = false,stand_box=false;//一開始沒有在飛
void keyPressed(){ 
  if(keyCode==RIGHT) vx=2;
  if(keyCode==LEFT) vx=-2;
  if(keyCode==UP && flying==false){
    vy=-20;
    flying = true;//開始飛行
  }
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx=0; 
}


-10












//碰撞偵測Mario vs. Pikachu
//牛頓力學(1)靜者恆靜、動者恆動(2)f=m*a 位置、速度、加速度
void setup(){
 size(400,400); 
}
float marioX=50,marioY=250,vx=0,vy=0;
void draw(){
  background(108,137,255);
  marioX += vx;
  if(flying){//如果在飛行中
    marioY += vy;//上下的位置會改變
    vy += 0.98;//重力速度往下
    if(marioY >= 250){//碰到地板
      marioY = 250;
      flying = false;//不再飛行
    }
  }
  fill(255,0,0);ellipse(marioX,marioY,15,20);
  fill(229,119,42);rect(0,260,400,150);
  fill(229,119,42);rect(200,150,20,20);
  if(hitBox(200,150,20,20)){
    vy=0;
    marioY = 150+20;
  }
}
boolean hitBox(int x,int y,int w,int h){
  if(x<marioX && marioX<x+w && y<marioY && marioY<y+h) return true;
  else return false;
}
boolean flying = false;//一開始沒有在飛
void keyPressed(){ 
  if(keyCode==RIGHT) vx=2;
  if(keyCode==LEFT) vx=-2;
  if(keyCode==UP && flying==false){
    vy=-20;
    flying = true;//開始飛行
  }
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx=0; 
}

沒有留言:

張貼留言