2023年11月23日 星期四

WW-Week11_隨機點名_關卡切換

 第一節課

1. 有一個老師能不能寫一個程式隨機點名,但隨機可能會重複,所以用亂數排序的就不會

2. 有同學想要學怎麼轉場和切換關卡等等,那我們這周就來學看看!!

第一個小程式week11_1_random_seat

先做一個陣列,把學生座位畫出來,並在每個框的中間印上

void setup(){
  size(600,500);
}
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_2_random_seat_array_value

加入陣列,在座位上的文字標上亂數

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_3_random_seat_array_value_swap

上面亂數決定有可能會重複出現,所以我們先把數值都準備好,然後再做隨機排序(交換)

從10開始照順序坐
做隨機交換

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<20;k++){///做20次交互換
    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_4_many_states

接下來,處理同學的問題,想要切換關卡,我們先準備很多關卡狀態state

int state = 0;
void setup(){
  size(400,400);
  textSize(50);
}
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_mousePreessed

按下滑鼠的時候,跳到第一關

int state = 0;
void setup(){
  size(400,400);
  textSize(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);
  }else if(state ==2){//第2關,藍色
    background(0,0,255);
  }
}
void mousePressed(){
  if(state==0)state=1;
  else if(state==1)state=2;
}

第六個小程式week11_6_many_states_mousePreessed_keyPreesed

當第一關灰色方塊走到白色方塊疊在一起,過關跳到第二關

int state = 0;
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);//灰色的方塊移動X,Y當座標
  }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_7_many_states_mousePreessed_keyPreesed_millis

第三關是設定時間倒數,時間到跳回第一關

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",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;//把時間設定回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_8_basketball_shoot_curve

按下滑鼠拉出弓箭

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_9_basketball_shoot_curve_2
滑鼠放開,球就飛出去了,還加上了拋物線(我沒調圖片大小)
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_A_basketball_shoot_curve_keyPressed_pause
暫停
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_A_basketball_shoot_curve_keyPressed_pause
week11_C_snake_360_direction
貪吃蛇
void setup(){
  size(600,400);
}
float x=300,y=200,dir=0;
void draw(){
  //background(0);
  joker(x,y,dir);
  x+=cos(dir);
  y+=sin(dir);
}
void joker(float x,float y,float dir){
  ellipse (x,y,50,50);
  line (x,y,x+25*cos(dir),y+25*sin(dir));
}
void keyPressed(){
  if(keyCode==RIGHT) dir+=0.1;
  if(keyCode==LEFT)dir -= 0.1;
  
}


沒有留言:

張貼留言