2023年11月17日 星期五

week08賴奕廷

*Step01

 解決牛頓力學,有殘影往左下角:

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; } 增加位置、重力加速度:
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判斷:
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); }
能量耗損,速度變慢:
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); } 抖動:
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); }
*Step02
mario左右移動:
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; } 增加往上鍵,mario飛起來了:
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)vy=-20; } void keyReleased(){   if(keyCode==LEFT||keyCode==RIGHT)vx=0; } 增加重力加速度往下,碰到地板,不再飛行回到地面:
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; } 如果沒有在飛,才能在跳:
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; } 增加箱子碰撞偵測:
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; } 增加站在箱子上的程式碼:
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;//10邊界
      flying=false;
    }else{
      vy=0;
      marioY=150+20+10;//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;//加7 -7mario身體  +10 -10上下邊界
  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;
}
離開box會下落:
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;//加7 -7mario身體 +10 -10上下邊界   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; } 修改簡化程式碼,增加箱子:
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);   drawAndTextBox(200,150,20,20);   drawAndTextBox(100,150,20,20);   drawAndTextBox(300,150,20,20); } void drawAndTextBox(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;//加7 -7mario身體 +10 -10上下邊界   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; }

沒有留言:

張貼留言