2023年11月2日 星期四

WEEK08

 WEEK08

1.//碰撞偵測: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;

}

2.

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;

}

3.






void setup()

  size(400,400);

}

float x=50, y=250, vx=2, vy=-20;

void draw(){

  x += vx;

  y += vy;

  vy += 0.98;

  if(y>350){

    y=350;

    vy= -vy*0.5;

  }

  ellipse(x,y,10,10);

}


4.只能左右滾動










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,20);

  fill(229,119,42); rect(0,260,400,150);

}

void keyPressed(){

  if(keyCode==RIGHT) vx=2;

  if(keyCode==LEFT) vx=-2;

  }


5.


//牛頓力學 (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;
}

6.


















//牛頓力學 (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.














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;
}

8.














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;
  }
  
}

9.改善掉落的點 可以在道邊邊的時候就掉下去


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;
}

10.



















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(200,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;
}
















20行的地方多複製即可多增加兩個跳台!!!!!!!
  drawAndTestBox(100,150,20,20);
  drawAndTestBox(200,150,20,20);
  drawAndTestBox(300,150,20,20);


沒有留言:

張貼留言