彈力球&圍棋
先來學習彈力球如何製作吧
第一個程式:week04_1_moving_ball_x_y
用xy控制座標,圓球就會一直跑
ellipse( x , y , 寬 , 長); //畫出橢圓,讓x,y慢慢增加
void setup()
{
size(500,500);
}
int x=250,y=250;//變數(位置)
void draw()
{
ellipse(x,y,10,10);//橢圓
x = x + 1;
y = y + 1;
}
{
size(500,500);
}
int x=250,y=250;//變數(位置)
void draw()
{
ellipse(x,y,10,10);//橢圓
x = x + 1;
y = y + 1;
}
第二個程式:week04_2_moving_ball_x_y_by_vx_vy
用float新設兩個變數 vx ,vy ,並且 x,y也要改用float,因為使用float可以更精細
設定if-else ,當x超過畫面就換方向且y超過上面就會反彈(圓球碰到邊邊會進行反彈)
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;
}
{
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;
}
第三個程式:week04_3_board_if_collision
背景上色去除殘影後,製作出一個板子,讓球碰到板子可以進行反彈
void draw 設定 background 使每次執行都會蓋過上一個球
rect 設定板子,設定int boardx= mouseX;
rect( mouseX , 470 , 寬 , 長 , 弧度); 使方塊能跟滑鼠一起動
設定球碰到板子反彈,到板子的y位置和 x~x+100的位置就會反彈
void setup()
{
size(500,500);
}
float x=250,y=250;//變數(位置)
float vx=1.0,vy=-1.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;//x>500時回彈
if( y < 0 ) vy=-vy;
if( x < 0 ) vx=-vx;
if(y>470 && x>boardX && x<boardX+100) vy=-vy;//470是板子的高度,這樣碰到板子就會回彈
}
第四個程式:week04_4_boardX_boardY_boardW_boardH
使用board設定變數,當長壓滑鼠左鍵時,底下的白色板子就會向左右兩邊拉長
boardx改為 mouseX- boardW/2 板子會在中間控制
(mouseX - pmouseX)/2 算出滑鼠的移動量加到vx
運用mousePressed 和 mouseButton,設定按下左鍵或右鍵板子會放大縮小
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- boardW/2;
background(#FFFFF2);//背景,去除殘影
rect( boardx ,boardy,boardW,boardH);//控制的板子(設定板子高度,寬度,厚度)
ellipse(x ,y ,10, 10); //橢圓
x=x+vx;
y=y+vy;
if(x
>500 || x<0 ) vx=-vx;//x>500時回彈
if(y
< 0 ) vy=-vy;
if( ( y>boardy && y<boardy+30 ) && (
x>boardx && x<boardx+boardW))
{
///470是板子的高度(要在邊框內),這樣球碰到板子才會回彈
vy=-vy;
vx += (mouseX- pmouseX)/2; //mouse滑鼠地移動速度
}
if(mousePressed && mouseButton==LEFT) boardW *= 1.01;
///按並是左鍵
if(mousePressed && mouseButton==RIGHT)
boardW *= 0.99;///按並是右鍵
}
接下來我們來學習如何製作圍棋
第五個程式:week04_5_simple_go
畫出所有圍棋,建立9*9陣列 (裡面暫時都放0,表示為白色)
在draw函式裡頭進行雙迴圈,偵測陣列裡面的值
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);
}
}
}
第六個程式:week04_6_simple_go_array
將圍棋上色,並使用if -else判斷,如果值為1就填充黑色,如果值為0就是填充白色
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);
}
}
}
第七個程式:week04_7_background_line_white_black_go
使用雙層迴圈畫線條, line( x1 , y1, x2, y2); 若x 或 y 分別乘 i ,會有好幾條線
偵測棋子的if-else指令修改,當為1時就下黑棋,為2時就下白旗,兩個都不是就不下棋
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,2,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(){//用迴圈畫出很多棋
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);//1:黑棋
ellipse(50+j*50,50+i*50,40,40);
}else if(go[i][j]==2){
fill(255);//2:白棋
ellipse(50+j*50,50+i*50,40,40);
}
}
}
}
第八個程式:week04_8_mousePRESSED_PUT_GO_BY_25_50
切換黑白棋,一個下完換另一個顏色下棋
我們先將陣列清零,再來設定int N=0
使用go[i][j]=(N%2==0) ? 1: 2;
意思是如果(N%2==0) 用1,否則就用2,並放進陣列相應位置
再去判別現在要下的是黑棋還是白棋,最後N++
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}
};//陣列 array 9x9
int N=0;//目前有幾個棋子
void mousePressed(){
int j= (mouseX-25)/50;//右手j,對應y座標
int i= (mouseY-25)/50;//左手i,對應y座標
go[i][j] = (N%2==0) ? 1 : 2 ;//if(N%2==)用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){
fill(0);//1:黑棋
ellipse(50+j*50,50+i*50,40,40);
}else if(go[i][j]==2){
fill(255);//2:白棋
ellipse(50+j*50,50+i*50,40,40);
}
}
}
}








沒有留言:
張貼留言