2024年12月16日 星期一

HSY-week15

 //week15-1

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

void setup(){

  size(640,360);

}

Ball ball = new Ball(100,200,20);

void draw(){

  ball.update();

  ball.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);

  }

  void update(){

  if(x+vx > 640 || x+vx < 0) vx = -vx;

  if(y+vy <0 || y+vy > 360 ) 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(300,200,60);

void draw(){

  background(51);

  if(ball.checkCollision(ball2) ) fill(#FFAAAA);

  else fill(255);

  ball.update();

  ball.display();

  ball2.update();

  ball.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 <0 || y+vy > 360 ) vy = -vy;

  x += vx;

  y += vy;

}

  void display(){

    ellipse(x, y, r+r, r+r);

  }

}


----------------------------------------------------------


//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();

}


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();

      print(len);

      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 <0 || y+vy > 360 ) vy = -vy;

    x += vx;

    y += vy;

  }

  void display() {

    ellipse(x, y, r+r, r+r);

  }

}



-------------------------------------------------------


//week15-5&6
int [][] maze = {
  {1,1,1,1,1,1,1,1,1,1},
  {1,0,0,1,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);
}
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);
}


-----------------------------------------------


//week15-7
int [][] maze = {
  {1,1,1,1,1,1,1,1,1,1},
  {1,0,0,1,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);
      }
    }
  }
}
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;
  }
}


-----------------------------------------------------------------------

//week15-8
int [][] maze = {
  {1,1,1,1,1,1,1,1,1,1},
  {1,0,0,1,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){
  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[1][1] = 0;
  DFS(1, 1, 1);
  
}

沒有留言:

張貼留言