今天一上課老師就利用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;
}





沒有留言:
張貼留言