2024年10月21日 星期一

WEEK07 風很大很煩

 // week07_01_arras01_background_fill_stroke_ellipse_rect_line

void setup(){

    size(500,400);

}


float x= 250,y=200;

void draw(){

  background(215,184,200);

  fill(204,102,156);

  stroke(125,84,105);

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


// week07_02_arras02_atan_cos_sin

void setup(){

    size(500,400);

}


float x= 250,y=200;

void draw(){

  background(215,184,200);

  

  

 fill(204,102,156);

 stroke(125,84,105);

 strokeWeight(3);

  ellipse(x,y,55,55);//圓形的身體

  //line(x,y, mouseX,mouseY);

  float dx =mouseX - x,dy = mouseY-y;

  float a = atan2(dy,dx);//算出角度

  line(x,y,x+cos(a)*50, y+sin(a)*50);//cos()算出x方向,sin()算出y方向

  

  fill(167,167,175);

  stroke(110,10,113);

  strokeWeight(4);

  rect(240,160,20,20); //砲管

}

// week07_03_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);//算出角度
  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);
  rect(20, -10, 20, 20); //砲管

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

// week07_04_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);
  }
  //background(215, 184, 200);//紅底
  //stroke(211,180,196);//紅底的線
  float dx =mouseX - x, dy = mouseY-y;
  float a = atan2(dy, dx);//算出角度
  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);
  rect(20, -10, 20, 20); //砲管

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



// week07_05_arras05_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);//灰底
  stroke(210);//灰底的線
  translate(-x, -y);//讓全世界都反方向移動
  translate(width/2, height/2);//把0,0移畫面中心
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx, my, 8, 8);
  strokeWeight(1);
  for(int i=0; i<30; i++){
    line(0,i*30,500,i*30);
    line(i*30,0, i*30,500);
  }
  //background(215, 184, 200);//紅底
  //stroke(211,180,196);//紅底的線
  float dx =mx - x, dy = my-y;//改用 mx,my
  float a = atan2(dy, dx);//算出角度
  line(x, y, mx, my);//改用 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);
  rect(20, -10, 20, 20); //砲管

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


// week07_06_arras06_vx_vy_keyPressed_void_keyReleased_void_draw
//希望能移動得很順 因為keyPressed 每秒的次數不夠快。要在void draw()裡移動他
void setup() {
  size(500, 400);
}
void keyPressed()
{
  if(keyCode==RIGHT) vx =1; // x+=1;
  if(keyCode==LEFT) vx=-1; //x-=1;
  if(keyCode==UP) vy=-1; //y-=1;
  if(keyCode==DOWN) vy = 1; //y+=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);//灰底
  stroke(210);//灰底的線
  translate(-x, -y);//讓全世界都反方向移動
  translate(width/2, height/2);//把0,0移畫面中心
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx, my, 8, 8);
  strokeWeight(1);
  for(int i=0; i<30; i++){
    line(0,i*30,500,i*30);
    line(i*30,0, i*30,500);
  }
  //background(215, 184, 200);//紅底
  //stroke(211,180,196);//紅底的線
  float dx =mx - x, dy = my-y;//改用 mx,my
  float a = atan2(dy, dx);//算出角度
  line(x, y, mx, my);//改用 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);
  rect(20, -10, 20, 20); //砲管

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



// week07_07_arras07_angle_bulletX_bulletY_bulletVX_bulletVY
//要有武器跑出來
void setup() {
  size(500, 400);
}
void keyPressed()
{
  if (keyCode==RIGHT) vx =1; // x+=1;
  if (keyCode==LEFT) vx=-1; //x-=1;
  if (keyCode==UP) vy=-1; //y-=1;
  if (keyCode==DOWN) vy = 1; //y+=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);//灰底
  stroke(210);//灰底的線
  translate(-x, -y);//讓全世界都反方向移動
  translate(width/2, height/2);//把0,0移畫面中心
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx, my, 8, 8);
  strokeWeight(1);
  for (int i=0; i<30; i++) {
    line(0, i*30, 500, i*30);
    line(i*30, 0, i*30, 500);
  }
  //background(215, 184, 200);//紅底
  //stroke(211,180,196);//紅底的線
  float dx =mx - x, dy = my-y;//改用 mx,my
  float a = atan2(dy, dx);//算出角度
  angle = a;
  line(x, y, mx, my);//改用 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);
  rect(20, -10, 20, 20); //砲管

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




// week07_08_arras08_array_many_bullets
//要有武器跑出來
void setup() {
  size(500, 400);
}
void keyPressed()
{
  if (keyCode==RIGHT) vx =1; // x+=1;
  if (keyCode==LEFT) vx=-1; //x-=1;
  if (keyCode==UP) vy=-1; //y-=1;
  if (keyCode==DOWN) vy = 1; //y+=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);//灰底
  stroke(210);//灰底的線
  translate(-x, -y);//讓全世界都反方向移動
  translate(width/2, height/2);//把0,0移畫面中心
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx, my, 8, 8);
  strokeWeight(1);
  for (int i=0; i<30; i++) {
    line(0, i*30, 500, i*30);
    line(i*30, 0, i*30, 500);
  }
  //background(215, 184, 200);//紅底
  //stroke(211,180,196);//紅底的線
  float dx =mx - x, dy = my-y;//改用 mx,my
  float a = atan2(dy, dx);//算出角度
  angle = a;
  line(x, y, mx, my);//改用 mx,my
  pushMatrix();
  myTank(x, y, a);
  popMatrix();
  //if(bulletVX!=0 && bulletVY!=0) {
    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];
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);
  rect(20, -10, 20, 20); //砲管

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







// week07_09_arras09_recycle_bullet_move_right_to_left
//要有武器跑出來
void setup() {
  size(500, 400);
}
void keyPressed()
{
  if (keyCode==RIGHT) vx =1; // x+=1;
  if (keyCode==LEFT) vx=-1; //x-=1;
  if (keyCode==UP) vy=-1; //y-=1;
  if (keyCode==DOWN) vy = 1; //y+=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);//灰底
  stroke(210);//灰底的線
  translate(-x, -y);//讓全世界都反方向移動
  translate(width/2, height/2);//把0,0移畫面中心
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx, my, 8, 8);
  strokeWeight(1);
  for (int i=0; i<30; i++) {
    line(0, i*30, 500, i*30);
    line(i*30, 0, i*30, 500);
  }
  //background(215, 184, 200);//紅底
  //stroke(211,180,196);//紅底的線
  float dx =mx - x, dy = my-y;//改用 mx,my
  float a = atan2(dy, dx);//算出角度
  angle = a;
  line(x, y, mx, my);//改用 mx,my
  pushMatrix();
  myTank(x, y, a);
  popMatrix();
  //if(bulletVX!=0 && bulletVY!=0) {
  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];
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] = bulletY[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);
  rect(20, -10, 20, 20); //砲管

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


// week07_10_arras10_buletT_for_timeout
//要有武器跑出來
void setup() {
  size(500, 400);
}
void keyPressed()
{
  if (keyCode==RIGHT) vx =1; // x+=1;
  if (keyCode==LEFT) vx=-1; //x-=1;
  if (keyCode==UP) vy=-1; //y-=1;
  if (keyCode==DOWN) vy = 1; //y+=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);//灰底
  stroke(210);//灰底的線
  translate(-x, -y);//讓全世界都反方向移動
  translate(width/2, height/2);//把0,0移畫面中心
  float mx = mouseX+x-width/2, my = mouseY+y-height/2;
  ellipse(mx, my, 8, 8);
  strokeWeight(1);
  for (int i=0; i<30; i++) {
    line(0, i*30, 500, i*30);
    line(i*30, 0, i*30, 500);
  }
  //background(215, 184, 200);//紅底
  //stroke(211,180,196);//紅底的線
  float dx =mx - x, dy = my-y;//改用 mx,my
  float a = atan2(dy, dx);//算出角度
  angle = a;
  line(x, y, mx, my);//改用 mx,my
  pushMatrix();
  myTank(x, y, a);
  popMatrix();
  //if(bulletVX!=0 && bulletVY!=0) {
  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];
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] = bulletY[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);
  rect(20, -10, 20, 20); //砲管

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






沒有留言:

張貼留言