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);
}
}
碰撞
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);
}
void update() {
if (x+vx>640 || x+vx<0)vx=-vx;
if (y+vy>640 || y+vy<0)vy=-vy;
x+=vx;
y+=vy;
}
void display() {
ellipse(x, y, r+r, r+r);
}
}
分頁
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,20);
void draw(){
ball.update();//加這行
ball.display();
}
//week15_3
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,20);
Ball ball2 = new Ball(100,200,20);
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>640 || y+vy<0)vy=-vy;
x+=vx;
y+=vy;
}
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+vx, y+vy, other.x+other.vx, other.y+other.vy)<=r+other.r) {
PVector diff = new PVector(other.x-x, other.y-y);
float len = diff.mag();//maganitude 量值長度的意思
print(len);
float a= diff.heading();//向量的方向
//cos(a),sin(a)
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);
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>640 || y+vy<0)vy=-vy;
x+=vx;
y+=vy;
}
void display() {
ellipse(x, y, r+r, r+r);
}
}
//week15_3
void setup(){
size(640,360);
}
Ball ball = new Ball(100,200,20);
Ball ball2 = new Ball(100,200,20);
void draw(){
background(51);
if(ball.checkCollision(ball2))fill(#FFAAAA);//有碰撞偵測就變色
else fill(255);
ball.update();//加這行
ball.display();
ball2.update();//加這行
ball2.display();
}
迷宮
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},
};
void setup(){
size(400,400);
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);
}
}
}
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;
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);
}
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;
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(){
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;
}
}
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);
}
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) {
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() {//按下mouse會往右or往下走
visited[1][1]=0;
DFS(1, 1, 1);
}







沒有留言:
張貼留言