2021年10月25日 星期一

天文社社員招募中week05

  


陣列及迴圈


1.開始畫線(直線)









程式如下:

void setup()
{
  size(500,500);
}
void draw(){
  background(253,236,180);
  line(50,50,50,450);
  line(100,50,100,450);
  line(150,50,150,450);
  line(200,50,200,450);
}


2.用for迴圈畫線(直線)








程式如下:

void setup()
{
  size(500,500);
}
void draw(){
  background(253,236,180);
  for(int i=0;i<9;i++)
  {
    line(50+50*i,50,50+50*i,450);
  }
}



3.用for迴圈畫線(橫線)










程式如下:

void setup()
{
  size(500,500);
}
void draw(){
  background(253,236,180);
  for(int i=0;i<9;i++)
  {
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
}





4.用陣列畫棋子






程式如下:


//有兩種寫法
//int [][]go=new int [9][9];  第一種
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},};   //第二種
void setup()
{
  size(500,500);
}
void draw(){
  background(253,236,180);
  for(int i=0;i<9;i++)
  {
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
}




5.用陣列畫出紅色方格(練習)




程式如下:


int [][]c={
  {1,0,0},
  {1,0,0},
  {1,0,0}};
void setup()
{
  size(300,300);
}
void draw(){
  for(int i=0;i<3;i++)
  {
    for(int j=0;j<3;j++)
    {
      if(c[i][j]==0)fill(128);  //j是x方向,i是y方向
      else fill(255,0,0);
      rect(j*100,i*100,100,100);
    }
  }
}


6.用陣列畫出圓





程式如下:


int [][]go={
  {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,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,1,0,0,0,0,0,0,0},};
void setup(){
  size(500,500);
}
void draw(){
  background(253,236,180);
  for(int i=0;i<9;i++){
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
  for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
      if(go[i][j]==1){
        int x=50+50*j,y=50+50*i;
        fill(255);ellipse(x,y,40,40);
      }
      
    }
  }
}


7.用陣列畫棋子part 3 - 用滑鼠畫圓


x,y 與 i,j利用移項變號
❗ 小心,無條件捨去 ❗







程式如下:


int [][]go={
  {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,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,1,0,0,0,0,0,0,0},};
void setup(){
  size(500,500);
}
void draw(){
  background(253,236,180);
  for(int i=0;i<9;i++){
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
  for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
      if(go[i][j]==1){
        int x=50+50*j,y=50+50*i;
        fill(255);ellipse(x,y,40,40);
      }
    }
  }
}
void mousePressed(){
  int j=(mouseX-50)/50; 
  int i=(mouseY-50)/50; 
  go[i][j]=1;
}
  



8.讓他變準確





程式如下:


int [][]go={
  {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,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,1,0,0,0,0,0,0,0},};
void setup(){
  size(500,500);
}
void draw(){
  background(253,236,180);
  for(int i=0;i<9;i++){
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
  for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
      if(go[i][j]==1){
        int x=50+50*j,y=50+50*i;
        fill(255);ellipse(x,y,40,40);
      }
    }
  }
}
void mousePressed(){
  int j=(mouseX-25)/50; //升一半會變得準確
  int i=(mouseY-25)/50; 
  go[i][j]=1;
}
  


9.加入黑棋及消除棋子功能






程式如下:


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},};
void setup(){
  size(500,500);
}
void draw(){
  background(253,236,180);
  for(int i=0;i<9;i++){
    line(50+50*i,50,50+50*i,450);
    line(50,50+50*i,450,50+50*i);
  }
  for(int i=0;i<9;i++){
    for(int j=0;j<9;j++){
      if(go[i][j]==1){
        int x=50+50*j,y=50+50*i;
        fill(255);ellipse(x,y,40,40);
      }else if(go[i][j]==2){
        int x=50+50*j,y=50+50*i;
        fill(0);ellipse(x,y,40,40);
      }
    }
  }
}
void mousePressed(){  //左:白棋  右:黑棋  中:消除
  int j=(mouseX-25)/50; 
  int i=(mouseY-25)/50; 
  if(mouseButton==LEFT) go[i][j]=1;
  if(mouseButton==RIGHT) go[i][j]=2;
  if(mouseButton==CENTER) go[i][j]=0;
  
}



完成!!!



10.畫個藝術圓









程式如下:


void setup(){
  size(500,500);
}
void draw(){
  for(float a=0;a<360;a++)
  {
    float x=250+250*cos(radians(a));  //用三角函數
    float y=250+250*sin(radians(a));
    ellipse(x,y,4,4);
  }
}


11.看看別人的作品


https://openprocessing.org/


這是Che-Yu Wu的主頁



有些作品甚至會互動





12.改變數讓他利用滑鼠變形狀






程式如下:


void setup(){
  size(500,500);
}
void draw(){
  background(125);
  for(float a=0;a<360;a+=1)
  {
    float x=250+mouseX*cos(radians(a));
    float y=250+mouseY*sin(radians(a));
    ellipse(x,y,mouseX,mouseY);
  }
}


13.滑鼠移動顏色跟著改變








程式如下:

void setup(){
  size(500,500);
}
void draw(){
  background(255);
  noFill();
  stroke(mouseX,mouseY,255);
  for(float a=0;a<360;a+=1)
  {
    float x=250+mouseX*cos(radians(a));
    float y=250+mouseY*sin(radians(a));
    ellipse(x,y,mouseX,mouseY);
  }
}

14.圓可以放大縮小,顏色隨機








程式如下:


void setup(){
  size(500,500);
}
float w=30;
float r=0,g=255,b=0;
void draw(){
  stroke(r,g,b); noFill();
  r+=random(3);if(r>255)r=0;  //顏色到255變回0
  g+=random(3);if(g>255)g=0;
  b+=random(3);if(b>255)b=0;
  ellipse(mouseX,mouseY,w,w);
  
  w+=0.5;
  if(w>100) w=30;  //放大到100變回30
}


沒有留言:

張貼留言