void setup() {
size(640, 360);
}
Ball ball = new Ball(100, 200, 20);
void draw() {
ball.display();
}
class Ball {
float x, y, r;
Ball(int x0, int y0, int r0) {
x = x0;
y = y0;
r = r0;
}
void display() {
ellipse(x, y, r+r, r+r);
}
}
week15-2
week15-3
week15-4
void setup() {
size(640, 360);
}
Ball ball = new Ball(100, 200, 20);
Ball ball2 = new Ball(300,200,60);
void draw() {
background(51);
if(ball.checkCollision(ball2)) fill(#FFAAAA);
else fill(255);
ball.update();
ball.display();
ball2.update();
ball2.display();
}
開新分頁Ball
class Ball {
float x, y, r;
float vx, vy;
Ball(int x0, int y0, int r0) {
x = x0;
y = y0;
r = r0;
vx = random(-10, +10);
vy = random(-10, +10);
}
boolean checkCollision(Ball other){
if(dist(x,y,other.x,other.y)<r+other.r)
PVector diff = new PVector(other.x-x,other.y-y);
float len = diff.mag();
float a = diff.heading();
PVector N = diff.copy().normalize();
N.mult(N.dot(new PVector(vx,vy)));
PVector N2 = new PVector(-N.y,N.x).normalize();
N2.mult(N2.dot(new PVector(vx,vy)));
PVector M = diff.copy().normalize();
M.mult( M.dot(new PVector(other.vx, other.vy)) );
PVector M2 = new PVector(-M.y, M.x).normalize();
M2.mult( M2.dot(new PVector(other.vx, other.vy)) );
PVector newW1 = PVector.add(M, N2);
PVector newW2 = PVector.add(N, M2);
vx = newW1.x;
vy = newW1.y;
other.vx = newW2.x;
other.vy = newW2.y;
return true;
} else return false;
}
void update() {
if(x+vx > 640-4 || x+vx < 0+r) vx = -vx;
if(y+vy < 0+r || y+vy >360-r) vy = -vy;
x += vx;
y += vy;
}
void display() {
ellipse(x, y, r+r, r+r);
}
}
week15-5
int [][] maze = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,0,1,1},
{1,1,0,1,1,0,1,0,1,1},
{1,1,0,1,0,0,1,0,1,1},
{1,1,0,1,0,1,0,1,1,1},
{1,0,0,0,1,0,0,0,1,1},
{1,0,1,1,0,1,1,0,1,1},
{1,0,0,0,0,1,1,0,1,1},
{1,1,1,1,1,1,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1},
};
void setup() {
size(400, 400);
}
void draw() {
for(int i=0; i<maze.length; i++) {
for(int j=0; j<maze[0].length; j++) {
if(maze[i][j] == 1) fill(0);
else fill(255);
rect(j*40, i*40, 40, 40);
}
}
}
week15-6
int [][] maze = {
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,1,0,0,0,1,1},
{1,1,0,1,1,0,1,0,1,1},
{1,1,0,1,0,0,1,0,1,1},
{1,1,0,1,0,1,0,1,1,1},
{1,0,0,0,1,0,0,0,1,1},
{1,0,1,1,0,1,1,0,1,1},
{1,0,0,0,0,1,1,0,1,1},
{1,1,1,1,1,1,0,0,1,1},
{1,1,1,1,1,1,1,1,1,1},
};
void setup() {
size(400, 400);
}
void draw() {
for(int i=0; i<maze.length; i++) {
for(int j=0; j<maze[0].length; j++) {
if(maze[i][j] == 1) fill(0);
else fill(255);
rect(j*40, i*40, 40, 40);
}
}
}
void draw() {
for(int i=0; i<maze.length; i++) {
for(int j=0; j<maze[0].length; j++) {
if(maze[i][j] == 1) fill(0);
else fill(255);
rect(j*40, i*40, 40, 40);
}
}
fill(255, 0, 0);
rect(startJ*40, startI*40, 40, 40);
for(int i=0; i<maze.length; i++) {
for(int j=0; j<maze[0].length; j++) {
if(visited[i][j] > 0) {
fill(0, 0, 255);
text(""+visited[i][j], j*40+20, i*40+20);
}
}
}
}
void mousePressed() { // 按下 mouse 會往右 or 往下走
if(maze[I+1][J] == 0) { // 下面這格是空格,可以走
I = I+1;
visited[I][J] = ++step;
} else if(maze[I][J+1] == 0) {
J = J+1;
visited[I][J] = ++step;
}
}






沒有留言:
張貼留言