2024年10月21日 星期一

小賴week07

 

☺HOMEWORK (1) 

//week07_1_arras01_background_fill_stroke_ellipse_rect_line
void setup(){
  size(500,400);
}
float x = 250, y = 200;
void draw(){
  background(215,184,200);
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);
  rect(240,160,20,20); //砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(x,y,55,55); //圓形的身體
  
  line(x,y,mouseX,mouseY);
}




☺HOMEWORK (2) 
//week07_2_arras02_atan_cos_sin
void setup(){
  size(500,400);
}
float x = 250, y = 200;
void draw(){
  background(215,184,200);
  float dx = mouseX - x, dy = mouseY - y;
  float a = atan2(dy,dx); //atan2()算出角度
  strokeWeight(20);//很粗的一條線,長度是40
  line(x,y,x+cos(a)*40,y+sin(a)*40);//cos()算出x方向,sin()算出y方向
  
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);
  rect(240,160,20,20); //砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(x,y,55,55); //圓形的身體
}



☺HOMEWORK (3) 
//week07_3_arras03_atan_angle_rotate_translate_myTank
void setup(){
  size(500,400);
}
float x = 250, y = 200;
void draw(){
  background(215,184,200);
  float dx = mouseX - x, dy = mouseY - y;
  float a = atan2(dy,dx); //atan2()算出角度
  myTank(x,y,a);
}
void myTank(float x,float y,float a){
  translate(x,y);
  rotate(a);//旋轉
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);//很粗的一條線,長度是40
  rect(20,-10,20,20);//砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(0,0,55,55); //圓形的身體
}




☺HOMEWORK (4)
 //week07_4_arras04_background_for_line_line_void_keyPressed_keyCode
void setup(){
  size(500,400);
}
void keyPressed(){
  if(keyCode==RIGHT) x += 1;
  if(keyCode==LEFT) x -= 1;
  if(keyCode==UP) y -= 1;
  if(keyCode==DOWN) y += 1;
}
float x = 250, y = 200;
void draw(){
  background(219);//灰底
  stroke(210);//灰色的線
  strokeWeight(1);
  for(int i=0;i<30;i++){
    line(0,i*30,500,i*30);
    line(i*30,0,i*30,500);
  }
  float dx = mouseX - x, dy = mouseY - y;
  float a = atan2(dy,dx); //atan2()算出角度
  line(x,y,mouseX,mouseY);
  myTank(x,y,a);
}
void myTank(float x,float y,float a){
  translate(x,y);
  rotate(a);//旋轉
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);//很粗的一條線,長度是40
  rect(20,-10,20,20);//砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(0,0,55,55); //圓形的身體
}





☺HOMEWORK (5)
//week07_5_arras5_correct_move_translate_translate_mx_my
void setup(){
  size(500,400);
}
void keyPressed(){
  if(keyCode==RIGHT) x += 1;
  if(keyCode==LEFT) x -= 1;
  if(keyCode==UP) y -= 1;
  if(keyCode==DOWN) y += 1;
}
float x = 250, y = 200;
void draw(){
  background(219);//灰底
  translate(-x,-y);//讓全世界,都向反方向移動
  translate(width/2,height/2);
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx,my,8,8);
  stroke(210);//灰色的線
  strokeWeight(1);
  for(int i=0;i<30;i++){
    line(0,i*30,500,i*30);
    line(i*30,0,i*30,500);
  }
  float dx = mx - x, dy = my - y;
  float a = atan2(dy,dx); //atan2()算出角度
  line(x,y,mx,my);
  myTank(x,y,a);
}
void myTank(float x,float y,float a){
  translate(x,y);
  rotate(a);//旋轉
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);//很粗的一條線,長度是40
  rect(20,-10,20,20);//砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(0,0,55,55); //圓形的身體
}




☺HOMEWORK (6)
//week07_6_arras6_vx_vy_void_keyPressed_void_keyPressed_void_draw
void setup(){
  size(500,400);
}
void keyPressed(){
  if(keyCode==RIGHT) vx = 1;
  if(keyCode==LEFT) vx = -1;
  if(keyCode==UP) vy = -1;
  if(keyCode==DOWN) vy = 1;
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
  if(keyCode==UP || keyCode==DOWN) vy = 0;
}
float x = 250, y = 200, vx = 0, vy = 0;//代表移動速度
void draw(){
  x += vx;
  y += vy;
  background(219);//灰底
  translate(-x,-y);//讓全世界,都向反方向移動
  translate(width/2,height/2);
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx,my,8,8);
  stroke(210);//灰色的線
  strokeWeight(1);
  for(int i=0;i<30;i++){
    line(0,i*30,500,i*30);
    line(i*30,0,i*30,500);
  }
  float dx = mx - x, dy = my - y;
  float a = atan2(dy,dx); //atan2()算出角度
  line(x,y,mx,my);
  myTank(x,y,a);
}
void myTank(float x,float y,float a){
  translate(x,y);
  rotate(a);//旋轉
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);//很粗的一條線,長度是40
  rect(20,-10,20,20);//砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(0,0,55,55); //圓形的身體
}


☺HOMEWORK (7)
//week07_7_arras07_angle_bulletX_bulletY_bulletVX_bulletVY
void setup(){
  size(500,400);
}
void keyPressed(){
  if(keyCode==RIGHT) vx = 1;
  if(keyCode==LEFT) vx = -1;
  if(keyCode==UP) vy = -1;
  if(keyCode==DOWN) vy = 1;
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
  if(keyCode==UP || keyCode==DOWN) vy = 0;
}
float x = 250, y = 200, vx = 0, vy = 0;//代表移動速度
void draw(){
  x += vx;
  y += vy;
  background(219);//灰底
  translate(-x,-y);//讓全世界,都向反方向移動
  translate(width/2,height/2);
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx,my,8,8);
  stroke(210);//灰色的線
  strokeWeight(1);
  for(int i=0;i<30;i++){
    line(0,i*30,500,i*30);
    line(i*30,0,i*30,500);
  }
  float dx = mx - x, dy = my - y;
  float a = atan2(dy,dx); //atan2()算出角度
  angle = a;
  line(x,y,mx,my);
  pushMatrix();
  myTank(x,y,a);
  popMatrix();
  if(bulletVX!=0 && bulletVY!=0){
    bulletX += bulletVX;
    bulletY += bulletVY;
    ellipse(bulletX,bulletY,20,20);
  }
}
float angle, bulletX = 0, bulletY = 0, bulletVX = 0, bulletVY = 0;
void mousePressed(){
  bulletX = x;
  bulletY = y;
  bulletVX = cos(angle);
  bulletVY = sin(angle);
}
void myTank(float x,float y,float a){
  translate(x,y);
  rotate(a);//旋轉
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);//很粗的一條線,長度是40
  rect(20,-10,20,20);//砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(0,0,55,55); //圓形的身體
}


☺HOMEWORK (8)
//week07_8_arras08_array_many_bullets
void setup(){
  size(500,400);
}
void keyPressed(){
  if(keyCode==RIGHT) vx = 1;
  if(keyCode==LEFT) vx = -1;
  if(keyCode==UP) vy = -1;
  if(keyCode==DOWN) vy = 1;
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
  if(keyCode==UP || keyCode==DOWN) vy = 0;
}
float x = 250, y = 200, vx = 0, vy = 0;//代表移動速度
void draw(){
  x += vx;
  y += vy;
  background(219);//灰底
  translate(-x,-y);//讓全世界,都向反方向移動
  translate(width/2,height/2);
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx,my,8,8);
  stroke(210);//灰色的線
  strokeWeight(1);
  for(int i=0;i<30;i++){
    line(0,i*30,500,i*30);
    line(i*30,0,i*30,500);
  }
  float dx = mx - x, dy = my - y;
  float a = atan2(dy,dx); //atan2()算出角度
  angle = a;
  line(x,y,mx,my);
  pushMatrix();
  myTank(x,y,a);
  popMatrix();
  for(int i=0; i<bulletN; i++){
    bulletX[i] += bulletVX[i];
    bulletY[i] += bulletVY[i];
    ellipse(bulletX[i],bulletY[i],20,20);
  }
}
float angle;
int bulletN = 0;//一開始有0個子彈,之後會慢慢增加
float []bulletX = new float[100];
float []bulletY = new float[100];
float []bulletVX = new float[100];
float []bulletVY = new float[100];//子彈的x,y位置和速度
void mousePressed(){
  int i = bulletN;
  bulletX[i] = x;
  bulletY[i] = y;
  bulletVX[i] = cos(angle);
  bulletVY[i] = sin(angle);
  bulletN++;
}
void myTank(float x,float y,float a){
  translate(x,y);
  rotate(a);//旋轉
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);//很粗的一條線,長度是40
  rect(20,-10,20,20);//砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(0,0,55,55); //圓形的身體
}


☺HOMEWORK (9)
//week07_9_arras9_recycle_bullet_move_rught_to_left
void setup(){
  size(500,400);
}
void keyPressed(){
  if(keyCode==RIGHT) vx = 1;
  if(keyCode==LEFT) vx = -1;
  if(keyCode==UP) vy = -1;
  if(keyCode==DOWN) vy = 1;
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
  if(keyCode==UP || keyCode==DOWN) vy = 0;
}
float x = 250, y = 200, vx = 0, vy = 0;//代表移動速度
void draw(){
  x += vx;
  y += vy;
  background(219);//灰底
  translate(-x,-y);//讓全世界,都向反方向移動
  translate(width/2,height/2);
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx,my,8,8);
  stroke(210);//灰色的線
  strokeWeight(1);
  for(int i=0;i<30;i++){
    line(0,i*30,500,i*30);
    line(i*30,0,i*30,500);
  }
  float dx = mx - x, dy = my - y;
  float a = atan2(dy,dx); //atan2()算出角度
  angle = a;
  line(x,y,mx,my);
  pushMatrix();
  myTank(x,y,a);
  popMatrix();
  for(int i=0; i<bulletN; i++){
    bulletX[i] += bulletVX[i];
    bulletY[i] += bulletVY[i];
    ellipse(bulletX[i],bulletY[i],20,20);
  }
}
float angle;
int bulletN = 0;//一開始有0個子彈,之後會慢慢增加
float []bulletX = new float[100];
float []bulletY = new float[100];
float []bulletVX = new float[100];
float []bulletVY = new float[100];//子彈的x,y位置和速度
void mousePressed(){
  int i = bulletN;
  bulletX[i] = x;
  bulletY[i] = y;
  bulletVX[i] = cos(angle);
  bulletVY[i] = sin(angle);
  bulletN++;
  if(bulletN==100){
    for(int k=0;k<50;k++){
      bulletX[k] = bulletX[k+50];
      bulletY[k] = bulletX[k+50];
      bulletVX[k] = bulletVX[k+50];
      bulletVY[k] = bulletVY[k+50];
    }
    bulletN = 50;
  }
  println(bulletN);//印看看現在有幾個子彈
}
void myTank(float x,float y,float a){
  translate(x,y);
  rotate(a);//旋轉
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);//很粗的一條線,長度是40
  rect(20,-10,20,20);//砲管
  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(0,0,55,55); //圓形的身體
}


☺HOMEWORK (10)
//week07_10_arras10_bulletT_for_timeout
void setup(){
  size(500,400);
}
void keyPressed(){
  if(keyCode==RIGHT) vx = 1;
  if(keyCode==LEFT) vx = -1;
  if(keyCode==UP) vy = -1;
  if(keyCode==DOWN) vy = 1;
}
void keyReleased(){
  if(keyCode==LEFT || keyCode==RIGHT) vx = 0;
  if(keyCode==UP || keyCode==DOWN) vy = 0;
}
float x = 250, y = 200, vx = 0, vy = 0;//代表移動速度
void draw(){
  x += vx;
  y += vy;
  background(219);//灰底
  translate(-x,-y);//讓全世界,都向反方向移動
  translate(width/2,height/2);
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx,my,8,8);
  stroke(210);//灰色的線
  strokeWeight(1);
  for(int i=0;i<30;i++){
    line(0,i*30,500,i*30);
    line(i*30,0,i*30,500);
  }
  float dx = mx - x, dy = my - y;
  float a = atan2(dy,dx); //atan2()算出角度
  angle = a;
  line(x,y,mx,my);
  pushMatrix();
  myTank(x,y,a);
  popMatrix();
  for(int i=0; i<bulletN; i++){
    bulletX[i] += bulletVX[i];
    bulletY[i] += bulletVY[i];
    ellipse(bulletX[i],bulletY[i],20,20);
    bulletT[i]--;
    if(bulletT[i]==0){
     for(int k=i+1; k<bulletN; k++){
       bulletX[k-1] = bulletX[k];
       bulletY[k-1] = bulletY[k];
       bulletVX[k-1] = bulletVX[k];
       bulletVY[k-1] = bulletVY[k];
       bulletT[k-1] = bulletT[k];
     }
     bulletN--;//少了一顆子彈
   }
  }
  println(bulletN);
}
float angle;
int bulletN = 0;//一開始有0個子彈,之後會慢慢增加
float []bulletX = new float[100];
float []bulletY = new float[100];
float []bulletVX = new float[100];
float []bulletVY = new float[100];//子彈的x,y位置和速度
int []bulletT= new int[100];
void mousePressed(){
  int i = bulletN;
  bulletX[i] = x;
  bulletY[i] = y;
  bulletVX[i] = cos(angle);
  bulletVY[i] = sin(angle);
  bulletT[i] = 600;//每個子彈只有10秒的壽命
  bulletN++;
  if(bulletN==100){
    for(int k=0;k<50;k++){
      bulletX[k] = bulletX[k+50];
      bulletY[k] = bulletX[k+50];
      bulletVX[k] = bulletVX[k+50];
      bulletVY[k] = bulletVY[k+50];
    }
    bulletN = 50;
  }
  println(bulletN);//印看看現在有幾個子彈
}
void myTank(float x,float y,float a){
  translate(x,y);
  rotate(a);//旋轉
  fill(167,167,175);
  stroke(110,110,113);
  strokeWeight(4);//很粗的一條線,長度是40
  rect(20,-10,20,20);//砲管

  
  fill(204,102,156);
  stroke(125,84,105);
  strokeWeight(3);
  ellipse(0,0,55,55); //圓形的身體
}



















沒有留言:

張貼留言