2022年9月26日 星期一

Week04_Yiting

 彈珠檯

(1)彈珠製作

先製作出彈珠

程式碼:

void setup(){
  size(500,500);
}
int x=250,y=250;///位置
void draw(){
  ellipse(x,y,10,10);///橢圓
  x=x+1;
  y=y-1;///往斜跑
}

(2)碰到邊框反彈

設定將彈珠若碰到邊框就會反彈

程式碼:
void setup(){
  size(500,500);
}
float x=250,y=250;
float vx=1.0,vy=-0.5;
void draw(){
  ellipse(x,y,10,10);
  x=x+vx;
  y=y-vy;
  if(x>500)vx=-vx;///碰到右邊框反彈
  if(y<0) vy=-vy;///碰到上邊框反彈
if(x<0)vx=-vx;///碰到左邊框反彈
}

(3)增加板子

增加板子,且讓彈珠碰到板子後反彈

程式碼:
void setup(){
  size(500,500);
}
float x=250,y=250;
float vx=2.0,vy=-1.5;///x數字越大,y的數字越小,速度越快
void draw(){
  background(#FFFFF2);///增加背景色,消除殘影
  int boardX= mouseX;///設定板子為boardX且boardX會跟著滑鼠
  rect(boardX,470,100,20);///板子
  ellipse(x,y,10,10);
  x=x+vx;
  y=y-vy;
  if(x>500)vx=-vx;
  if(y<0) vy=-vy;
  if(x<0)vx=-vx;
  if(y>470 && x>boardX && X<boardX+100)vy=-vy;///彈珠碰到板子後會反彈
}

(4)完成品
若長按滑鼠,板子會變寬

程式碼:
void setup(){
  size(500,500);
}
float x=250,y=250;
float vx=2.0,vy=-1.5;
float boardX,boardY=470,boardW=100,boardH=20;
void draw(){
  boardX=mouseX-boardW/2;
  background(#FFFFF2);
  rect(boardX,boardY,boardW,boardH);///控制的板子
  ellipse(x,y,10,10);
  x=x+vx;
  y=y-vy;
  if(x>500)vx=-vx;
  if(y<0) vy=-vy;
  if(x<0)vx=-vx;
  if((y>boardY && y<boardY+boardH)
  &&(x>boardX && x<boardX+boardW)){
    vy=-vy;
    vx += (mouseX-pmouseX)/2;///滑鼠移動速度
  }
  if(mousePressed && mouseButton==LEFT)boardW*=1.01;///若按下滑鼠,左邊增加
}
  if(mousePressed && mouseButton==RIGHT)boardW*=0.99;///若按下滑鼠,右邊增加
}


圍棋/象棋
(1)先做出旗子

程式碼:
void setup(){
  background(#DDC4F2);
  size(500,500);
}
void draw(){
  for(int x=50;x<450;x+=50){///X位置
    for(int y=50;y<=450;y+=50){///Y的位置
      ellipse(x,y,50,50);///橢圓
    }
  }
}

(2)顏色

程式碼:
void setup(){
  background(#DDC4F2);
  size(500,500);
}
int [][]go={
  {0,0,0,0,0,0,0,0,1},///第幾個是黑色
  {0,0,0,0,0,0,0,0,1},
  {0,1,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,1,0,1},
  {0,0,0,0,0,0,0,0,1},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
};///陣列
void draw(){
  for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
      if(go[i][j]==1)fill(0);///如果陣列的i,j是1的話,就填充黑色
      else fill(255);
      ellipse(50+j*50,50+i*50,50,50);
    }
  }
}
(3)背景&白旗

增加棋盤&白旗

程式碼:
void setup(){
  size(500,500);
}
int [][]go={
  {0,0,0,0,0,0,0,0,1},
  {0,0,0,0,0,0,2,0,1},
  {0,1,0,0,0,0,0,0,2},
  {0,0,0,0,0,0,1,0,1},
  {0,0,0,0,0,0,0,0,1},
  {0,0,0,0,2,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,2,0,0},
  {0,0,0,0,0,0,0,0,0},
};
void draw(){
  background(246,194,108);
  for(int i=1;i<=9;i++){
    line(50,50*i,450,50*i);
    line(50*i,50,50*i,450);
  }///背景
  for(int i=0;i<9;i++){///y座標
    for(int j=0;j<9;j++){///x座標
      if(go[i][j]==1){///1=黑棋
       fill(0);
       ellipse(50+j*50,50+i*50,40,40);
      }
      else if(go[i][j]==2){///2=白棋
        fill(255);
        ellipse(50+j*50,50+i*50,40,40);
      }
    }
  }
}

(4)完成品
按下滑鼠會下棋且改變黑/白色

程式碼:
void setup(){
  size(500,500);
}
int [][]go={
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
};///要歸0
int N=0;///目前有幾個棋子
void mousePressed(){
  int j=(mouseX-25)/50;///y座標
  int i=(mouseX-25)/50;///x座標
  go[i][j]=(N%2==0)?1:2;///ifN%2==0用1,否則用2
  N++;///多一個棋子
}
void draw(){
  background(246,194,108);
  for(int i=1;i<=9;i++){
    line(50,50*i,450,50*i);
    line(50*i,50,50*i,450);
  }
  for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
      if(go[i][j]==1){
       fill(0);
       ellipse(50+j*50,50+i*50,40,40);
      }
      else if(go[i][j]==2){
        fill(255);
        ellipse(50+j*50,50+i*50,40,40);
      }
    }
  }
}





沒有留言:

張貼留言