2022年9月26日 星期一

晚安

 Week 04 動態島、圍棋、象棋

1.Iphone 14 動態島
在座標位置上重複繪製橢圓(球)
```
void setup(){
  size(500, 500);

}
int x=250, y=250;
void draw(){
  ellipse(x, y, 10, 10);//橢圓(座標, 大小)
  x+=1; y+=1;
}
```










用float宣告變數作為加速度以控制方向
加上if函式,遇到邊界時往反向運動
```
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+=vx; y+=vy; ///不同向量
  if(x>500) vx=-vx;///遇到邊界反彈
  if(x<0) vx=-vx;
  if(y>500) vy=-vy;
  if(y<0) vy=-vy;
}
```










把最下方改為板子,改寫為碰到板子時反彈
並去除多餘的殘影
```
void setup(){
  size(500, 500);

}
float x=250, y=250;
float vx=1.0, vy=-0.5;
void draw(){
  background(#FFFF99);//背景,去除殘影
  int boardX = mouseX;///板子X座標=滑鼠X座標位置
  rect(boardX, 480, 80, 15);//控制的板子
  ellipse(x, y, 10, 10);//橢圓
  x+=vx; y+=vy; ///不同向量
  if(x>500) vx=-vx;///遇到邊界反彈
  if(x<0) vx=-vx;
  if(y<0) vy=-vy;
  if(y>480 && x>boardX && x<boardX+80) vy=-vy;
//板子的y高度, 板子x座標, 板子的寬度
}
```











改寫板子的程式碼,使其可以變大或變小
並讓滑鼠控制的位置置中
```
void setup(){
  size(500, 500);

}
float x=250, y=250;
float vx=2.0, vy=-1.5;
float boardX, boardY=470, boardW=80, boardH=15;
void draw(){
  boardX=mouseX-boardW/2;
  background(#FFFF99);//背景,去除殘影
  rect(boardX, boardY, boardW, boardH);//控制的板子
  ellipse(x, y, 10, 10);//橢圓
  x+=vx; y+=vy; ///不同向量
  if(x>500) vx=-vx;///遇到邊界反彈
  if(x<0) vx=-vx;
  if(y<0) vy=-vy;
  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;//按滑鼠左鍵板子會變寬,右鍵會變小
}  
```











2.圍棋


先利用for迴圈畫出許多棋子(for回圈內參數預設為任意數字)
```
void setup(){
  size(500,500);
}
void draw(){
  for(int x=100; x<400; x+=20){
    for(int y=100; y<=400; y+=20){
      ellipse(x, y, 20, 20);
    }
  }
}
```









利用陣列繪製出9*9圍棋
並劃出9*9方格
```
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,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,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}
};
void draw(){
  for(int i=0; i<9; i++){
    for(int j=0; j<9; j++){
      if(go[i][j]==1)fill(0);
      else fill(255);///0代表白子,1代表黑子

      ellipse(50+i*50, 50+j*50, 50, 50);
    }
  }
}
```








畫出棋盤,在每個點上畫上棋子
```
void setup(){
  size(500,500);
}
int [][]go={
  {0,0,0,0,0,2,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,1,0,0,2,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,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}
};
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+i*50, 50+j*50, 40, 40);  ///改為1是黑子  2是白子  0則不畫出棋子
      }
    }
  }
}
```









利用滑鼠事件,在點擊處放下棋子
```
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}
};
int N=0;  ///計算目前子數
void mousePressed(){
  int j=(mouseX-25)/50;//j對應X座標
  int i=(mouseY-25)/50;//i對應Y座標
  go[i][j]=(N%2==0)?1:2;//if(N%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+i*50, 50+j*50, 40, 40);
      }
    }
  }
}
```





沒有留言:

張貼留言