2023年11月23日 星期四

week11 互動技術

week11-1
畫格子
void setup(){
  size(600,400);
}
void draw(){
   background(255);
   for(int i=0;i<4;i++){//y
      for(int j=0;j<6;j++){//x
         rect(j*100,i*100,100,100); 
      }
   }
}

week11-2
void setup(){
  size(600,400);
}
void draw(){
   background(255);
   for(int i=0;i<4;i++){//y
      for(int j=0;j<6;j++){//x
      fill(#F5B4B4);rect(j*100,i*100,100,100); 
      fill(0);text("Hello",j*100+25,i*100+50);
      }
   }
}

week11-3 亂數產生
void setup(){
  size(600,500);
  for(int i=0;i<4;i++){
    for(int j=0;j<6;j++){
       value[i][j]= int(random(40));
    }//亂數產生
  }
}
int [][] value = new int[4][6];
void draw(){
   background(255);
   for(int i=0;i<4;i++){//y
      for(int j=0;j<6;j++){//x
      fill(#F5B4B4);rect(j*100,i*100,100,100); 
      fill(0);text(value[i][j],j*100+25,i*100+50);
      }
   }
}

week11-4 亂數交換位置

void setup(){
  size(600,500);
  for(int i=0;i<4;i++){
    for(int j=0;j<6;j++){
       value[i][j]= i*6+j+10;//從10開始,數字不重複
    }
  }
  for(int k=0;k<2;k++){//每次挑2個做交換
    int i=int(random(4)),j=int(random(6));
    int i2=int(random(4)),j2=int(random(6));
    int temp=value[i][j];
    value[i][j]=value[i2][j2];
    value[i2][j2]=temp;
  }
}
int [][] value = new int[4][6];
void draw(){
   background(255);
   for(int i=0;i<4;i++){//y
      for(int j=0;j<6;j++){//x
      fill(#F5B4B4);rect(j*100,i*100,100,100); 
      fill(0);text(value[i][j],j*100+25,i*100+50);
      }
   }
}


week11-5 按滑鼠變紅色
int state=0;//0:white,1:red,2:blue
void setup(){
   size(400,400); 
}
void draw(){
   if(state==0){
     background(255); 
     fill(0);text("Click to Start",80,200);
   }else if(state==1){
      background(255,0,0); 
   }else if(state==2){
    background(0,0,255); 
   }
}
void mousePressed(){
   if(state==0)state=1; 
}



week11-5-2 設定第1,2關

int state=0;//0:white,1:red,2:blue
void setup(){
   size(400,400); 
   textSize(50);
}
int x=50,y=50;
void draw(){
   if(state==0){//第0關 白色
     background(255); 
     fill(0);text("Click to Start",80,200);
   }else if(state==1){//第1關 紅色
      background(255,0,0); 
      fill(255);rect(300,50,50,50);
      fill(128);rect(x,y,50,50);
   }else if(state==2){//第2關 藍色
    background(0,0,255); 
   }
}
void mousePressed(){
   if(state==0)state=1; 
}
void keyPressed(){
   if(state==1 && keyCode==RIGHT){
      x+=10;
      if(x==300)state=2;
   }
}


week11-6 設定時間,時間到後從頭來

int state=0;//0:white,1:red,2:blue
void setup(){
   size(400,400); 
   textSize(50);
}
int x=50,y=50,t=100;
void draw(){
   if(state==0){//第0關 白色
     background(255); 
     fill(0);text("Click to Start",80,200);
     x=50;
   }else if(state==1){//第1關 紅色
      background(255,0,0); 
      fill(255);rect(300,50,50,50);
      fill(128);rect(x,y,50,50);
      t=100;
   }else if(state==2){//第2關 藍色
    background(0,0,255); 
    fill(255,255,0);text("Wait" + t,80,200);
    t--;
    if(t==0)state=0;
   }
}
void mousePressed(){
   if(state==0)state=1; 
}
void keyPressed(){
   if(state==1 && keyCode==RIGHT){
      x+=10;
      if(x==300)state=2;
   }
}



week11-7 投籃

PImage imgRack;
int state = 0;
void setup(){
  size(500,500);
  imgRack = loadImage("rack.png");
}
void draw(){
  background(255);
  image(imgRack,0,0);
  if(mousePressed){
    fill(255);ellipse(posX,posY,20,20);
    line(posX,posY,mouseX,mouseY);
  }
  fill(#FFA625);ellipse(mouseX,mouseY,20,20);
}
float posX=-100, posY=-100;
void mousePressed(){
  posX = mouseX;
  posY = mouseY;
}


week11-8

PImage imgRack;
int state = 0;
void setup(){
  size(500,500);
  imgRack = loadImage("rack.png");
}
void draw(){
  background(255);
  image(imgRack,0,0);
  if(flying){
    x += vx;
    y += vy;
    vy+= 0.98;
  }else{
    x = mouseX;
    y = mouseY;
    if(mousePressed){
      fill(255);ellipse(posX,posY,20,20);
      line( posX, posY, x, y);
    }
  }
  fill(#FFA652);ellipse(x,y,20,20);
}
boolean flying = false;
float x,y,vx,vy;
float posX=-100, posY=-100;
void mousePressed(){
  posX = mouseX;
  posY = mouseY;
  flying = false;
}
void mouseReleased(){
  vx = posX-mouseX;
  vy = posY-mouseY;
  flying = true;
}
week11-9

PImage imgRack;
int state = 0;
void setup(){
  size(500,500);
  imgRack = loadImage("rack.png");
}
boolean gameOver=false;
void keyPressed(){
  gameOver = true;///在某個狀態下,game over
}
void draw(){
  background(255);
  image(imgRack,0,0);
  if(flying){
    if(!gameOver){
      x += vx;
      y += vy;
      vy+= 0.98;
    }
  }else{
    x = mouseX;
    y = mouseY;
    if(mousePressed){
      fill(255);ellipse(posX,posY,20,20);
      line( posX, posY, x, y);
    }
  }
  fill(#FFA652);ellipse(x,y,20,20);
}
boolean flying = false;
float x,y,vx,vy;
float posX=-100, posY=-100;
void mousePressed(){
  posX = mouseX;
  posY = mouseY;
  flying = false;
}
void mouseReleased(){
  vx = posX-mouseX;
  vy = posY-mouseY;
  flying = true;
}
week11-10 踩地雷

int [][]mine = new int[9][9];
void setup(){
  size(450, 450);
  for (int i=0; i<9; i++) mine[i][0]=9;
  for (int k=0; k<1000; k++){
    int i = int(random(9)), j = int(random(9));
    int i2 = int(random(9)), j2 = int(random(9));
    int tmp = mine[i][j];
    mine[i][j] = mine[i2][j2];
    mine[i2][j2] = tmp;
  }
  for (int i=0; i<9; i++){
    for (int j=0; j<9; j++){ // 遇到紅色的地雷附近要+1
      if (mine[i][j]==9){
        addNumber(i-1, j-1);
        addNumber(i-1, j);
        addNumber(i-1, j+1);
        addNumber(i, j-1);
        addNumber(i, j); // 自己本身
        addNumber(i, j+1);
        addNumber(i+1, j-1);
        addNumber(i+1, j);
        addNumber(i+1, j+1);
      }
    }
  }
}
void addNumber(int i, int j){
  if (i<0 || j<0 || i>=9 || j>=9) return; // 超過範圍不做事
  if (mine[i][j]!=9) mine[i][j]++; // 不是地雷就可以+1
}
void draw(){
  for (int i=0; i<9; i++){
    for (int j=0; j<9; j++){
      if (mine[i][j]==9) fill(255, 128, 128);
      else fill(255);
      rect(j*50, i*50, 45, 45);
      
      if (mine[i][j]!=0){
        fill(0); text(" "+mine[i][j], j*50+23, i*50+23, 45, 45);
      }
    }
  }
}


沒有留言:

張貼留言