001.
void setup() {
size(640, 360);
}
Ball ball = new Ball(100, 200, 50);
Ball ball2 = new Ball(300, 200, 50);
void draw() {
background(51);
if( ball.checkCollision(ball2)) fill(#FFAAAA);
else fill(255);
ball.update();
ball.display();
ball2.update();
ball2.display();
}
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) return true;
else return false;
}
void update()
{
if (x+vx > 640 || x+vx < 0) vx = -vx;
if (y+vy > 360 || y+vy < 0) vy = -vy;
x += vx;
y += vy;
}
void display() {
ellipse(x, y, r+r, r+r);
}
}
-----------------------------------------------------------------------------------
002.
void setup() {
size(640, 360);
}
Ball ball = new Ball(100, 200, 50);
Ball ball2 = new Ball(300, 200, 50);
void draw() {
background(51);
if ( ball.checkCollision(ball2)) fill(#FFAAAA);
else fill(255);
ball.update();
ball.display();
ball2.update();
ball2.display();
}
--
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 newV1 =PVector.add(M, N2);
PVector newV2 =PVector.add(N, M2);
vx= newV1.x;
vy= newV1.y;
other.vx=newV2.x;
other.vy=newV2.y;
return true;
} else return false;
}
void update()
{
if (x+vx > 640 || x+vx < 0) vx = -vx;
if (y+vy > 360 || y+vy < 0) vy = -vy;
x += vx;
y += vy;
}
void display() {
ellipse(x, y, r+r, r+r);
}
}
---------------------------------------------------------
003.
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, 0, 1, 0, 1, 0, 1, 1},
{1, 1, 1, 0, 0, 0, 1, 0, 1, 1},
{1, 0, 1, 1, 0, 1, 1, 0, 1, 1},
{1, 0, 0, 0, 0, 1, 1, 0, 1, 1},
{1, 0, 1, 1, 1, 1, 1, 0, 1, 1},
{1, 0, 0, 0, 0, 0, 1, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
};
int [][] visited = new int [10][10];
int startI =1, startJ = 1, I = 1, J = 1, step=1;
void setup() {
size(400, 400);
visited[I][J]=step;
}
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);
}
}
}
}
boolean DFS (int i, int j, int s) {
println(i, j, s);
if (i==8 && j== 8) return true;
if (maze[i][j]==1) return false;
if (visited[i][j]>0) return false;
visited[i][j] = s;
if (DFS(i+1, j, s+1)) return true;
if (DFS(i-1, j, s+1)) return true;
if (DFS(i, j+1, s+1)) return true;
if (DFS(i, j-1, s+1)) return true;
visited[i][j] = 0;
return false;
}
void mousePressed() {
visited[I][J] = 0;
DFS(1, 1, 1);
}
沒有留言:
張貼留言