2022年10月17日 星期一

Week4_栗子的程式日記_Google搞事害我要重上傳 :)

 Week04

多災多難的一個禮拜,報告趕不完,又要推甄,又要專研,最可悲的是電腦不聽話螢幕花了我6500嗚嗚,又要上課,好累

1.1今天第一項作業畫出一直跑的斜線,往右上方一直延續下去~~

程式碼:
void setup(){
 size(500,500); 
}
int x=250,y=250;
void draw(){
  ellipse(x,y,10,10);  
  x=x+1;
  y=y-1;
}

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;
  if(y>500) vy=-vy;
}

1.3再來做出彈珠台的雛型吧

程式碼:
void setup(){
 size(500,500); 
}
float x=250,y=250;  ///
float vx=1.0,vy=-0.5;
void draw(){
  background(#FFFFF2);
  int boardX =mouseX;
  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;
}

2.1 完整版的彈珠台~~
程式碼:
void setup(){
 size(500,500); 
}
float x=250,y=250;  /// 變數位置精細
float vx=2.0,vy=-2.5;
float boardX,boardY=470,boardW=100,boardH=20;
void draw(){
  boardX =mouseX-boardX/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;  ///mouse的移動速度
    }
    if(mousePressed && mouseButton ==LEFT) boardW*=1.01;  //每天多努力一點
    if(mousePressed && mouseButton == RIGHT)boardW*=0.99;  ///每天多混1%
}
2.2 因為做完了彈珠台,來畫個象棋吧!!首先畫很多個圈圈
程式碼:
void setup(){
 size(500,500); 
}
void draw(){
 for(int x=50;x<=450;x+=50){
  for(int y=50;y<=450;y+=50){
   ellipse(x,y,50,50); 
  }
 }
}
2.3 填充黑子
程式碼:
void setup(){
 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,1},
 {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);
    else fill(255);
    ellipse(50+j*50, 50+i*50, 50, 50); 
  }
 }
}
3.1 做出仿真棋盤,並分出黑子白子
程式碼:
void setup(){
 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,1},
 {0,0,0,0,0,0,1,0,1},
 {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,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++){    ///左手i,對應y座標
  for(int j=0;j<9;j++){   ///右手j,對應x座標
    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);
    }
  }
 }
}
3.2那因為下棋是互動的,所以更改為互動版本
程式碼:
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+j*50,50+i*50,40,40);
    }
  }
 }
}











沒有留言:

張貼留言