week4
(一)
1.為了要畫出橢圓,我們先寫一個能往右上方畫出直線的程式
```cvoid setup(){
size(500,500);
}
int x=250,y=250; ///變數
void draw(){
ellipse(x,y,10,10); ///橢圓
x=x+1;
y=y-1;
}
```
2.修改程式碼,把位置的部分改成float,並使直線畫到一半碰到牆時會轉彎
```c
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;
}
```
```c
void setup(){
size(500,500);
}
float x=250,y=250; ///變數(位置)
float vx=2.0 , vy=-1.5; ///球的移動速度
void draw(){
background(#FFFFF2); ///背景,去除殘影
int boardX = mouseX;
rect(boardX,470,200,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+200) vy=-vy;
}
```
```c
void setup(){
size(500,500);
}
float x=250,y=250; ///變數(位置)
float vx=3.0 , vy=-3.5;
float boardX,boardY=470,boardW=100,boardH=20;
void draw(){
boardX=mouseX-boardW/2;
background(#000000); ///背景,去除殘影
rect(boardX,boardY,boardW,boardH,20); ///控制的板子
ellipse(x,y,15,15); ///橢圓
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.首先,先印出一堆棋子出來吧
```c
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);
}
}
}
```
```c
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},
}; ///陣列 array 9x9
void draw(){
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);
else fill(255);
ellipse(50+j*50,50+i*50,50,50);
}
}
}
```
```c
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,2,0,0,0,1},
{0,0,0,0,0,0,1,0,1},
{0,0,2,0,0,0,0,0,1},
{0,0,0,0,0,2,0,0,0},
{0,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},
}; ///陣列 array 9x9
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){ ///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);
}
}
}
}
```
```c
void setup(){
size(500,500);
}
int [][]go={ //0:沒有旗子、1:黑棋、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,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
}; ///陣列 array 9x9
int N=0; //目前有幾個旗子
void mousePressed(){
int j=(mouseX-25)/50;
int i=(mouseY-25)/50;
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++){ ///左手i 對應y座標
for(int j=0;j<9;j++){ ///右手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);
}
}
}
}
```
沒有留言:
張貼留言