2020年3月27日 星期五

week05 08160360 陳彥瑜


今天一上課老師就利用p語言幫我們複習陣列,並且接續上周沒有交到的發射子彈的進度
程式碼
PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
void setup(){
  size(348,580);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  circle( x[0], y[0], 40);
}
void mousePressed(){
  x[0] = mouseX;
  y[0] = mouseY;
}
我希望一次可以發射很多個子彈,所以我們用陣列搭配for迴圈,讓它可以同時讓多個子彈存在在銀幕上。
可是如果做超過陣列設定的數值的次數的話,程式會壞掉,所以用return來當保護程式碼。
程式碼
PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0;
void setup(){
  size(348,580);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  for(int i=0;i<5;i++){
    circle( x[i], y[i], 40);
  }
}
void mousePressed(){
  if(n>=5) return;
  x[n] = mouseX;
  y[n] = mouseY;
  n++;
}
但是只要修改一下其中一行的程式碼就能讓子彈不斷發射。
把return拿掉,再誠心設定n的值,讓他不斷回收再利用就行了

程式碼
PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int n=0;
void setup(){
  size(348,580);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  for(int i=0;i<5;i++){
    circle( x[i], y[i], 40);
  }
}
void mousePressed(){
  x[n] = mouseX;
  y[n] = mouseY;
  n = (n+1)%5;
}
為了更好理解陣列,老師打了這個程式碼
程式碼
int []a={1,1,1,0};
size(400,100);
for(int i=0;i<4;i++){
  if(a[i]==1)fill(255,0,0);
  else fill(128);
  rect(i*100,0,100,100);
}
2D的陣列會長成這個樣子
程式碼
int [][]a={
  {1,0,1,0,1},
  {0,1,0,1,1},
  {1,0,0,1,0},
  {0,1,1,0,1},
  {1,1,0,0,1} };
size(500,500);
for(int i=0;i<5;i++){
  for(int j=0;j<5;j++){
    if(a[i][j] == 1 )fill(255,0,0);
    else fill(128);
    rect(j*100,i*100,100,100);
  }
}
然後我想讓求能夠放大縮小,所以我們新增了一個r的陣列,r就是球的半徑。
因為每次都會拿舊的球來用,所以每一次都要讓球的大小恢復原狀
程式碼
PImage imgBG;
int []x={0,0,0,0,0};
int []y={0,0,0,0,0};
int []r={5,5,5,5,5};
int n=0;
void setup(){
  size(348,580);
  imgBG=loadImage("background.jpg");
}
void draw(){
  background(imgBG);
  for(int i=0;i<5;i++){
    circle( x[i], y[i],r[i]);
  }
  if(mousePressed)r[now]++;
}
int now=0;
void mousePressed(){
  x[n] = mouseX;
  y[n] = mouseY;
  r[n]=5;
  now=n;
  n = (n+1)%5;
}

沒有留言:

張貼留言