1. 上方球隨機顏色,用滑鼠點擊讓附近一樣顏色一起消失
程式碼:
//PImage forest;
color []c = {#FFFFF2, #FF39A6, #80E849, #FFF30A, #A5CDFF};
void setup() {
size(600, 500);
//forest=loadImage("forest.jpg");
for (int k=0; k<15; k++) {
hole[0][k]=int(random(1,5));
hole[1][k]=int(random(1,5));
hole[2][k]=int(random(1,5));
/* hole[3][k]=1;
hole[4][k]=1;
hole[5][k]=1;
hole[6][k]=1;
hole[7][k]=1;
hole[8][k]=1;
hole[9][k]=1;
hole[10][k]=1;
hole[11][k]=1;*/
}
PFont font = createFont("標楷體",30);
}
int x=300, y=500;
float angle1=0, angle2=0;
boolean bulletFlying=false;
float bulletX, bulletY;//發射球的x,y座標
float bulletVX, bulletVY;//發射球的x,y方向座標
int [][] hole = new int[13][15];
int r=40;//球的直徑
int B=0;//上方球的總數
void mousePressed() {
for (int i=0; i<13; i++) {
for (int j=0; j<15; j++) {
float now = dist( r+j*r, r/2+i*sqrt(3)*r/2, mouseX, mouseY);
if(i%2==0) now = dist( r/2+j*r, r/2+i*sqrt(3)*r/2, mouseX, mouseY);
if (now<r/2) {
println(i,j);
killNow(i,j,hole[i][j]);
}
}
}
}
void killNow(int i,int j,int now){
if(i<0 || j<0 ||i>=13 ||j>=15) return;
if(hole[i][j]==now){
hole[i][j]=0;
if(i%2==1){
killNow(i-1,j,now);
killNow(i-1,j+1,now);
killNow(i,j-1,now);
killNow(i,j+1,now);
killNow(i+1,j,now);
killNow(i+1,j+1,now);
}else{
killNow(i-1,j-1,now);
killNow(i-1,j,now);
killNow(i,j-1,now);
killNow(i,j+1,now);
killNow(i+1,j-1,now);
killNow(i+1,j,now);
}
}
}
// hole[i-1][j] hole[i][j+1]
//hole[i][j] 鄰居: hole[i][j-1] hole[i][j+1] i奇數排
// hole[i+1][j] hole[i+1][j+1]
//
// hole[i-1][j-1] hole[i+1][j+1]
//hole[i][j] 鄰居: hole[i][j-1] hole[i][j+1] i偶數排
// hole[i+1][j-1] hole[i+1][j]
void draw() {
background(#FFFFF2);
//background(forest);
//image(forest,500,400);
fill(0, 0, 0);
ellipse(x, y, 80, 80);
strokeWeight(40);
strokeCap(SQUARE);
line(x, y, x+80*cos(angle1), y+80*sin(angle1));
strokeWeight(1);
for (int i=0; i<13; i++) {
for (int j=0; j<15; j++) {
if (hole[i][j]==0) continue;//noFill();
else fill( c[hole[i][j]] );
if (i%2==0) ellipse(r/2+j*r, r/2+i*sqrt(3)*r/2, r, r);
else ellipse(r+j*r, r/2+i*sqrt(3)*r/2, r, r);
}
}
if (bulletFlying) {
bulletX+= bulletVX;
bulletY+= bulletVY;
fill(255, 255, 0);
ellipse(bulletX, bulletY, r, r);
if (bulletX > 585) bulletVX=-bulletVX;
if (bulletX < 15) bulletVX=-bulletVX;
if (bulletY < 15 || touch_yellow_ball() ) {
//bulletVY=0;bulletVX=0;
put_ball_in_hole();
bulletFlying=false;
}
}
}
boolean touch_yellow_ball() {
for (int i=0; i<13; i++) {
for (int j=0; j<15; j++) {
if ( hole[i][j]==1 && dist(bulletX, bulletY, r/2+j*r, r/2+i*sqrt(3)*r/2)<r/1.3) return true;
}
}
return false;
}
void put_ball_in_hole() {
float nearest = 99999;
int nowI=0, nowJ=0;
for (int i=0; i<13; i++) {
for (int j=0; j<15; j++) {
float now = dist( r+j*r, r/2+i*sqrt(3)*r/2, bulletX, bulletY);
if(i%2==0) now = dist( r/2+j*r, r/2+i*sqrt(3)*r/2, bulletX, bulletY);
if (now<nearest && hole[i][j]==0) {
nearest = now;
nowI=i;
nowJ=j;
}
}
}
hole[nowI][nowJ]=1;
}
void keyPressed() {
if (keyCode==UP) angle1-=0.05;
if (keyCode==DOWN) angle1+=0.05;
if (key==' ') {
bulletFlying=true;
bulletX=x;
bulletY=y;
bulletVX=cos(angle1)*5;
bulletVY=sin(angle1)*5;
}
}
沒有留言:
張貼留言