2024年10月21日 星期一

周家契約7號

 有同學問祖馬和arras.io要怎麼做

首先先做arras.io
























首先做大砲和砲管


//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(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);
}


讓砲管能旋轉
運用cos sin atan旋轉
















   //week07_02_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);
  strokeWeight(20);
  line(x, y, x+cos(a)*40, y+sin(a)*40);
  
  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);
  
  
}



加入myTank(){}
用translate和rotate















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

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























加入keycode和重畫背景
就可以用上下左右移動了
//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);
  }
  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_corret_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);
  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);
  rect(20, -10, 20, 20);

  fill(204, 102, 156);
  stroke(125, 84, 105);
  strokeWeight(3);
  ellipse(0, 0, 55, 55);
}



\



















加入vx vy讓上下左右更順
//week07_06_arras06_vx_vy_void_keyPressed_void_keyReleased_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);
  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);
  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_void_keyPressed_void_keyReleased_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);
  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=-1, 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);
}

加入矩陣增加子彈
但最多只能100發






















//week08_08_arras08_array
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);
  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;
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);
}





















解決100會當機的問題
讓他回到50
//week08_09_arras09_recycle_bullet_move_right_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);
  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;
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[i] = bulletX[k+50];
      bulletY[i] = bulletY[k+50];
      bulletVX[i] = bulletVX[k+50];
      bulletVY[i] =  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);
}























讓子彈慢慢消失
//week08_09_arras09_recycle_bullet_move_right_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);
  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;
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[i] = bulletX[k+50];
      bulletY[i] = bulletY[k+50];
      bulletVX[i] = bulletVX[k+50];
      bulletVY[i] =  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);
}

沒有留言:

張貼留言