2023年11月23日 星期四

LS._. Week11

random seat

  • 先畫出4*6的格子

  • 填色呈粉紅色

  • 將格子填上字
  • 程式碼

void setup(){
  size(600,500);
}
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("Hello",j*100+25,i*100+50);
   }
 }
}

random seat array value

  • 另存程式碼,將hello改成value
  • value[i][j]=int(random(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);
   }
 }
}

random seat array value swap

  • 另存程式碼,先做出數字不重複的檔案
  • 打上做右手交換程式碼,讓亂數交換
  • 加上for迴圈,讓兩對數值交換位子(總共有四個數位子會變)
  • 程式碼
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;
   }
 }
 for(int k=0;k<2;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);
   }
 }
}

many states mousePressed

  • 開啟新程式碼視窗,先做出三個關卡
  • 設定文字大小及增加文字
  • 增加滑鼠點擊事件,使點擊文字後會進入關卡1
  • 程式碼
int state=0;
void setup(){
  size(400,400);
  textSize(50);
}
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;
}

many states mousePressed keyPressed

  • 另存程式碼,新增程式碼,使點擊後右上角出現方塊
  • 將方塊塗成白色
  • 再做一個灰色方塊在左上角,要設 x=50,y=50;
  • 加入keyPressed程式碼,使灰色方塊可以向左移動
  • 如果灰色方塊覆蓋至白色方塊位置,即會進入第三關
  • 程式碼
int state=0;
void setup(){
  size(400,400);
  textSize(50);
}
int x=50,y=50;
void draw(){
  if(state==0){
    background(255);
    fill(0); text("Click to Start",80,200);
  }else if(state==1){
    background(255,0,0);
    fill(255); rect(300,50,50,50);
    fill(128); rect(x,y,50,50);
  }else if(state==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;
  }
}

many states mousePressed keyPressed milits t 60

  • 另存程式碼,新增一個變數 t ,以及加上文字
  • 加入程式碼,使進入第三關時可以倒數
  • 倒數完畢,即可回到第一關
  • 程式碼
int state=0;
void setup(){
  size(400,400);
  textSize(50);
}
int x=50,y=50,t=100;
void draw(){
  if(state==0){
    background(255);
    fill(0); text("Click to Start",80,200);
    x=50;
  }else if(state==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){
    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;
  }
}

投籃機

  • 新增程式碼視窗,寫出投籃的程式碼
  • 要記得下載圖片跟將圖片拖進程式碼內
  • 程式碼
PImage imgRack;
void setup(){
  size(300,300);
  imgRack = loadImage("rack.jpg");
}
void draw(){
  background(255);
  image(imgRack,0,0);
  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;
}

投籃機 正常投籃

  •  另存程式碼,加入程式碼,新增滑鼠事件,讓球可以被射出去
  • 新增程式碼,讓球不會直接飛超快
  • 加上重力加速度,讓他可以正常投籃

  • 程式碼
PImage imgRack;
void setup(){
  size(300,300);
  imgRack = loadImage("rack.jpg");
}
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(){
  x=posX=mouseX;
  y=posY=mouseY;
  flying=false;
}
void mouseReleased(){
  vx=posX-mouseX;
  vy=posY-mouseY;
  flying=true;
}

投籃機 可以暫停

  •  另存程式碼,加入暫停

  • 更改程式碼,改成gameOver
  • 加入程式碼,如果按按鍵就會暫停
  • 程式碼

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);
  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(){
  x=posX=mouseX;
  y=posY=mouseY;
  flying=false;
}
void mouseReleased(){
  vx=posX-mouseX;
  vy=posY-mouseY;
  flying=true;
}

踩地雷

  • 新增程式碼視窗,寫出踩地雷的程式碼介面
  • 新增地雷
  • 加入地雷亂數交換、插旗子程式碼
  • 如果無地雷就不標示
  • 程式碼
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){
       addNumber(i-1,j-1);
       addNumber(i-1,j);
       addNumber(i-1,j+1);
       addNumber(i,j-1);
       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]++;
}
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);
     }
   }
 }
}

貪食蛇

  • 新增程式碼視窗,寫出貪食蛇的程式碼介面
  • 蛇頭向右

  • 加入程式碼,讓他可以轉頭
  • 做出可以前進的蛇
  • 去掉背景顯示殘影
  • 程式碼

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;
}

上傳程式碼

  • 上傳至Github

沒有留言:

張貼留言