2023年11月23日 星期四

chotwo_week11

 

Week11 如何換關卡

week11_1_random_seat


視窗600*500裡面,做一個6*4的表格 

填充顏色和Hello 

week11_2_random_seat_array_value


宣告 value array,0~40隨機給值,會有重複▼
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++){
    for(int j=0; j<6; j++){
      fill(#F5B4B4);rect(j*100, i*100, 100, 100);
      fill(0); text(value[i][j], j*100+25, i*100+50);
    }
  }
}

week11_3_random_seat_array_value_swap



k = 4 交換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<4; k++){
    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++){
    for(int j=0; j<6; j++){
      fill(#F5B4B4);rect(j*100, i*100, 100, 100);
      fill(0); text(value[i][j], j*100+25, i*100+50);
    }
  }
}


week11_4_many_states


關卡設置 

int state = 0;
void setup(){
  size(400,400);
}
void draw(){
  if(state==0){ //第0關
    background(255);
  }else if(state==1){ //第1關
    background(255,0,0);
  }else if(state==2){ //第2關
    background(0,0,255);
  }
}

week11_5_many_states_mousePressed


關卡切換,按滑鼠一下進入第1關(紅色) 

int state = 0;
void setup(){
  size(400,400);
  textSize(50);
}
void draw(){
  if(state==0){ //第0關
    background(255);
    fill(0);text("Click to Start ! ", 70, 200);
  }else if(state==1){ //第1關
    background(255,0,0);
  }else if(state==2){ //第2關
    background(0,0,255);
    
  }
}
void mousePressed(){
  if(state==0) state = 1;
}

week11_6_many_states_keyPressed



灰色方塊右鍵移動到跟白色方塊重和,換成第2關 

week11_7_many_states_mousePressed_keyPressed_mills_t60




int state = 0;
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 ! ", 70, 200);
    x = 50; //進入state0 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, 70,200);
    t--;
    if(t==0)state = 0; //倒數結束,回到state0
  }
}
void mousePressed(){
  if(state==0) state = 1;
}
void keyPressed(){
  if(state==1 && keyCode==RIGHT){
    x+=10;
    if(x==300)state=2;
  }
}


week11_8_basketball_shoot_curve


 ▼

PImage imgRack;
void setup(){
  size(300,300);
  imgRack = loadImage("rack.jpg");
}
void draw(){
  background(255);
  image(imgRack, 0, 0, 300, 300);
  if(mousePressed){
    fill(255); ellipse(posX, posY, 20,20);
    line(posX,posY, mouseX, mouseY);
  }

  fill(#FFA652); ellipse(mouseX, mouseY, 20, 20);
}
float posX = -100, posY = -100;
void mousePressed(){
  posX = mouseX;
  posY = mouseY;
}

week11_9_basketball_shoot_curve_2


用boolean、mousePressed和mouseReleased
做出有重力加速度的籃球 


PImage imgRack;
void setup(){
  size(300,300);
  imgRack = loadImage("rack.jpg");
}
void draw(){
  background(255);
  image(imgRack, 0, 0, 300, 300);
  if(flying){
    x += vx;
    y += vy;
    vy += 0.98; // gravity
  }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);
}
float posX = -100, posY = -100;
float x, y, vx, vy;
boolean flying = false;
void mousePressed(){
  x = posX = mouseX;
  y = posY = mouseY;
  flying = false;
}
void mouseReleased(){
  vx = posX - mouseX;
  vy = posY - mouseY;
  flying = true;
}


 week11_A_basketball_shoot_curve_pause


PImage imgRack;
void setup(){
  size(300,300);
  imgRack = loadImage("rack.jpg");
}
boolean gameOver = false;
void keyPressed(){
  gameOver = true; 
}
void draw(){
  background(255);
  image(imgRack, 0, 0, 300, 300);
  if(flying){
    if(!gameOver){//if(!keyPressed)// 遊戲結束暫停動作
      x += vx; //沒有gameOver才能動
      y += vy;
      vy += 0.98; // gravity
    }
  }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);
}
float posX = -100, posY = -100;
float x, y, vx, vy;
boolean flying = false;
void mousePressed(){
  x = posX = mouseX;
  y = posY = mouseY;
  flying = false;
}
void mouseReleased(){
  vx = posX - mouseX;
  vy = posY - mouseY;
  flying = true;
}

week11_B_mine_sweep


 

//踩地雷
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 temp = mine[i][j];
    mine[i][j] = mine[i2][j2];
    mine[i2][j2] = temp;
  }
  for(int i=0; i<9; i++){
    for(int j=0; j<9; j++){
      if(mine[i][j]==9){ //遇到紅色地雷,附近格子數字要+1
        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);
      }
    }
  }
}



week11_C_snake_360_direction 三角函數  下禮拜繼續


沒有留言:

張貼留言