期末作品呈現
.
https://youtu.be/334yih0cmzA
import ddf.minim.*;
import processing.serial.*;
Serial myPort;
Minim minim;
AudioPlayer player , hit , brick , ball , die ,win ;
float[] brickY = new float[80];
float[] brickX = new float[80];
int [] bricklife = new int[80];
int old1=0,old2=0,old3=0,old4=0;
int button1=0,button2=0,button3=0,button4=0;
byte [] data=new byte[5];
int bX=400;
int a = 0 , score = 0 , state = 0 , base = 150 , brX = 80 , brY = 30 ,baX = 50 , baY = 50 ,ballX = 400 , ballY = 560 , ballVX = 0 , ballVY = 0 , ball2VX = 0 , ball2VY = 0 ,ball3VX = 0 , ball3VY = 0 ;
int ball2X = 400 , ball2Y = 560 , ball3X = 400 , ball3Y = 560 ;
boolean dieA=false,dieB=false,dieC=false;
void setup()
{
size(800,600);
myPort = new Serial(this,"COM7",9600);
minim = new Minim(this);
hit = minim.loadFile("hit.mp3");
brick = minim.loadFile("brick.mp3");
die = minim.loadFile("die.mp3");
ball = minim.loadFile("ball.mp3");
win = minim.loadFile("win.mp3");
player = minim.loadFile("Halloween.mp3");
player.play();
fill(255,60,53);
for(int i=0;i<80;i++)
{
brickX[i]=(i%10)*90;
brickY[i]=int (i/10)*35;
bricklife[i]=1;
}
}
boolean flying =false,gameover=false,d=true,e=true,f=true,g=true;//d = a = 5 , e = a = 25 , f = a = 45 , g = a = 65
void draw()
{
if(state==0) drawOP();
else if(state==1)drawfirst();
else if(state==2)drawsecond();
else if(state==3)drawthird();
else if(state==4)drawend();
else if(state==5)drawEN();
getData();
if(myPort.available()>0)
{
int val=myPort.read();
bX=val*6;
println(val);
}
}
void getData()
{
if(myPort.available()>0)
{
myPort.readBytes(data);
old1=button1;
old2=button2;
old3=button3;
old4=button4;
button1=data[4];
button2=data[1];
button3=data[2];
button4=data[3];
println(data);
int press=-1;
if(data[4]==0 && old1==0) press=1;
else if(data[1]==0 && old2==0) press=2;
else if(data[2]==0 && old3==0) press=3;
else if(data[3]==0 && old4==0) press=4;
if(press==1)
{
state=1;
die.pause();
player.rewind();
player.play();
}
else if(press==2)
{
state=2;
die.pause();
player.rewind();
player.play();
}
else if(press==3)
{
state=3;
die.pause();
player.rewind();
player.play();
}
else if(press==4) mousePressed();
}
}
void drawOP()
{
background(157,157,255);
fill(255,255,0);
textSize(72);
text("CHOSE LEVELS",140,200);
fill(232,98,247);
rect(45, 290 , 200 , 95 );
rect(295, 290 , 200 , 95 );
rect(545, 290 , 200 , 95 );
fill(17,238,200);
textSize(48);
text("LEVEL 1", 55 , 350 );
text("LEVEL 2", 305 , 350 );
text("LEVEL 3", 555 , 350 );
/*if(keyPressed && key == '1' )state = 1 ;
if(keyPressed && key == '2' )state = 2 ;
if(keyPressed && key == '3' )state = 3 ;*/
}
void mousePressed()
{
flying=true;
if(dieA==false)
{
ballVY=-20; ballVX=3;
}
if(dieB==false)
{
ball2VX=2; ball2VY=10;
}
if(dieC==false )
{
ball3VX=5; ball3VY = 15;
}
}
void drawfirst()
{
background(0);
fill(255,0,255);
rect (bX-70,580,base ,20);
fill(123,213,0);
ellipse(ballX,ballY,baX,baY);
fill(123,123,156);
for(int i=0;i<80;i++)
{
if(bricklife[i]==0) continue;//brick will disppearance
rect(brickX[i],brickY[i],brX,brY);
if(brickX[i] < ballX+25 /*left*/&& ballX-25 < brickX[i]+80/*right*/ && abs(ballY-brickY[i])<30)
{
bricklife[i]=0;
hit.rewind();
hit.play();
a++;
score+=10;
}
if(bricklife[i]==0 )
{
if(ballX>=brickX[i])ballVX=10;
if(ballX<=brickX[i]) ballVX=-10;
if(ballY>=brickY[i]) ballVY=10;
if(ballY<=brickY[i]) ballVY=-10;
}//has problem
}
if( a > 5 && d )
{
base = 120 ;
baX = 40 ;
baY = 40 ;
ball.rewind();
ball.play();
d = false;
}
if( a > 25 && e )
{
base = 100 ;
baX = 30 ;
baY = 30 ;
ball.rewind();
ball.play();
e = false;
}
if( a > 45 && f )
{
base = 80 ;
baX = 20 ;
baY = 20 ;
ball.rewind();
ball.play();
f = false;
}
if( a > 65 && g )
{
base = 60 ;
baX = 10 ;
baY = 10 ;
ball.rewind();
ball.play();
g = false;
}
if(flying &&!gameover)
{
ballX+=ballVX;
ballY+=ballVY;
if(ballX < 0 ) ballVX = abs(ballVX);
if(ballX > 780 ) ballVX = -abs(ballVX);
if(ballY < 0 ) ballVY = abs(ballVY);
if(ballY > 560 && abs(bX-ballX)<75)
{
ballVY = -abs(ballVY);
ballY=560;
}
if(ballY > 600)
{
gameover=true;
player.pause();
die.rewind();
die.play();
state = 4 ;
for(int i=0;i < 80 ; i++) bricklife[i]=1;
d = true;
e = true;
f = true;
g = true;
}
}
else ballX=bX;
fill(255,200,80);
textSize(60);
text("Score:"+score,500,100);
if(gameover)
{
}
if( a == 72 )
{
player.pause();
win.rewind();
win.play();
ballY = 560;
for( int i = 0 ; i < 80 ; i++ ) bricklife[i] = 1 ;
}
}
void drawsecond()
{
background(0,0,128);
fill(147,251,197);
rect(bX-70 , 580 , base , 20 );
fill(255,128,255);
for(int i = 0 ; i < 80 ; i+=3 )
{
if (bricklife[i] == 0 ) continue ;
rect(brickX[i],brickY[i],brX,brY);
}
fill(255,197,168);
for( int i = 1 ; i < 80 ; i+=3)
{
if (bricklife[i] == 0 ) continue ;
rect(brickX[i],brickY[i],brX,brY);
}
fill(228,249,134);
for( int i = 2 ; i < 80 ; i+=3)
{
if (bricklife[i] == 0 ) continue ;
rect(brickX[i],brickY[i],brX,brY);
}
fill(237,73,175);
ellipse(ballX+2,ballY+2,baX-10,baY-10);
for(int i = 0 ; i < 80 ; i++ )
{
if (bricklife[i] == 0 ) continue ;
if(brickX[i] < ballX+20 && ballX-20 < brickX[i]+80 && abs(ballY-brickY[i])<30)
{
bricklife[i]=0;
hit.rewind();
hit.play();
a++;
score+=10;
}
if(bricklife[i]==0 )
{
if(ballX>=brickX[i] ) ballVX=-12;
if(ballX<=brickX[i] ) ballVX=12;
if(ballY==brickY[i] ) ballVY=12;
if(ballY==brickY[i] ) ballVY=-12;
}
}
if(flying &&!gameover)
{
ballX+=ballVX;
ballY+=ballVY;
if(ballY>560 && abs(bX-ballX)<75)ballVY=-abs(ballVY);
if(ballY >600 )
{
gameover=true;
player.pause();
die.rewind();
die.play();
state = 4 ;
for(int i=0;i < 80 ; i++) bricklife[i]=1;
}
if(ballX < 0 ) ballVX = abs(ballVX);
if(ballX > 780 ) ballVX = -abs(ballVX);
if(ballY < 0 ) ballVY = abs(ballVY);
if(ballY > 560 && abs(bX-ballX)<75)
{
ballVY = -abs(ballVY);
ballY=560;
}
}
else ballX=bX;
fill(61,135,115);
textSize(60);
text("Score:"+score,500,100);
if( a == 72 )
{
player.pause();
win.rewind();
win.play();
ballY = 560;
for( int i = 0 ; i < 80 ; i++ ) bricklife[i] = 1 ;
state = 5;
}
}
void drawthird()
{
background(175,248,254);
fill(255,255,60);
rect(bX-70 , 580 , base , 20 );
fill(255);
for(int i = 1 ; i < 80 ; i+=6 )
{
if(bricklife[i] == 0 ) continue ;
rect(brickX[i],brickY[i],brX-10,brY-10);
if(brickX[i] < ballX+10 && ballX-10 < brickX[i]+60 && abs(ballY-brickY[i])<10)
{
bricklife[i]=0;
hit.rewind();
hit.play();
a++;
score+=10;
}
if(brickX[i] < ball2X+10 && ball2X-10 < brickX[i]+60 && abs(ball2Y-brickY[i])<10)
{
bricklife[i]=0;
hit.rewind();
hit.play();
a++;
score+=10;
}
if(brickX[i] < ball3X+10 && ball3X-10 < brickX[i]+60 && abs(ball3Y-brickY[i])<10)
{
bricklife[i]=0;
hit.rewind();
hit.play();
a++;
score+=10;
}
if(bricklife[i]==0)
{
if(ballX>=brickX[i]) ballVX=10;
else if(ballX<=brickX[i]) ballVX=-10;
else if(ballY>=brickY[i]) ballVY=10;
else if(ballY<=brickY[i]) ballVY=-10;
else if(ball2X>=brickX[i]) ball2VX=15;
else if(ball2X<=brickX[i]) ball2VX=-15;
else if(ball2Y>=brickY[i]) ball2VY=15;
else if(ball2Y<=brickY[i]) ball2VY=-15;
else if(ball3X>=brickX[i]) ball3VX=8;
else if(ball3X<=brickX[i]) ball3VX=-8;
else if(ball3Y>=brickY[i]) ball3VY=8;
else if(ball3Y<=brickY[i]) ball3VY=-8;
}
}
fill(72,164,255);
ellipse(ballX+5,ballY+5,baX-20,baY-20);
fill(100,150,200);
ellipse(ball2X+5,ball2Y+5,baX-20,baY-20);
fill(230,250,20);
ellipse(ball3X+5,ball3Y+5,baX-20,baY-20);
if(flying && !gameover)
{
ballX += ballVX;
ballY += ballVY;
ball2X += ball2VX;
ball2Y += ball2VY;
ball3X += ball3VX;
ball3Y += ball3VY;
if(ballY>800){ballVX=0;ballVY=0;dieA=true;}
if(ball2Y>800){ball2VX=0;ball2VY=0;dieB=true;}
if(ball3Y>800){ball3VX=0;ball3VY=0;dieC=true;}
if(dieA==false && ballY>560 && abs(bX-ballX)<75)ballVY=-abs(ballVY);
if(dieB==false && ball2Y>560 && abs(bX-ball2X)<75)ball2VY=-abs(ball2VY);
if(dieC==false && ball3Y>560 && abs(bX-ball3X)<75)ball3VY=-abs(ball3VY);
if(ballY >600 && ball2Y >600 && ball3Y >600)
{
gameover=true;
player.pause();
die.rewind();
die.play();
state = 4 ;
for(int i=0;i < 80 ; i++) bricklife[i]=1;
}
if(ballX < 0 ) ballVX = abs(ballVX);
if(ball2X < 0 ) ball2VX = abs(ball2VX);
if(ball3X < 0 ) ball3VX = abs(ball3VX);
if(ballX > 780 ) ballVX = -abs(ballVX);
if(ball2X > 780 ) ball2VX = -abs(ball2VX);
if(ball3X > 780 ) ball3VX = -abs(ball3VX);
if(ballY < 0 ) ballVY = abs(ballVY);
if(ball2Y < 0 ) ball2VY = abs(ball2VY);
if(ball3Y < 0 ) ball3VY = abs(ball3VY);
}
else
{
ballX = bX ;
ball2X = bX ;
ball3X = bX ;
}
fill(61,135,115);
textSize(60);
text("Score:"+score,500,100);
if( a == 11 )
{
player.pause();
win.rewind();
win.play();
ballY = 560;
for( int i = 0 ; i < 80 ; i++ ) bricklife[i] = 1 ;
state = 5;
}
}
void drawend()
{
background(53,18,194);
fill(255,255,0);
textSize(120);
text("Game Over",80,200);
fill(232,98,247);
rect(45, 290 , 200 , 95 );
rect(295, 290 , 200 , 95 );
rect(545, 290 , 200 , 95 );
fill(17,238,200);
textSize(48);
text("LEVEL 1", 55 , 350 );
text("LEVEL 2", 305 , 350 );
text("LEVEL 3", 555 , 350 );
gameover = false;
flying = false;
dieA=false;dieB=false;dieC=false;
a = 0;
score = 0 ;
baX = 50;
baY = 50;
base = 150;
ballY = 560 ;ballX = bX;
ball2Y = 560 ;ball2X = bX;
ball3Y = 560 ;ball3X = bX;
/*if(state==1 )
{
die.pause();
player.rewind();
player.play();
}
if(state==2)
{
die.pause();
player.rewind();
player.play();
}
if(state==3)
{
die.pause();
player.rewind();
player.play();
}*/
}
void drawEN()
{
background(252,107,205);
fill(255,255,0);
textSize(72);
text("You Win!!!!!",200,200);
fill(232,98,247);
rect(45, 290 , 200 , 95 );
rect(295, 290 , 200 , 95 );
rect(545, 290 , 200 , 95 );
fill(17,238,200);
textSize(48);
text("LEVEL 1", 55 , 350 );
text("LEVEL 2", 305 , 350 );
text("LEVEL 3", 555 , 350 );
score = 0 ;
a = 0 ;
flying=false;
ballY = 560 ;ballX = bX;
ball2Y = 560 ;ball2X = bX;
ball3Y = 560 ;ball3X = bX;
dieA=false;dieB=false;dieC=false;
/*if(state == 1 )
{
win.pause();
player.rewind();
player.play();
}
if(state == 2 )
{
win.pause();
player.rewind();
player.play();
}
if(state == 3 )
{
win.pause();
player.rewind();
player.play();
}*/
}
作品解釋
第一關是正常關卡 用滑鼠玩也很難過關,所以用搖桿更是一大挑戰
第二關其實算放水關卡,用滑鼠玩很好過關,但搖桿就沒那麼容易了
第三關混淆視聽,兩種晚發都只要接到最慢的那顆球就能過關了
2019年1月3日 星期四
2018年12月27日 星期四
2018年12月20日 星期四
2018年12月13日 星期四
2018年12月6日 星期四
week13矮矮的筆記
測試processing 跟 Arduino 可以連接
step1.
step1.
step2.
step3.
step4.
step5.
上傳之後用processing執行
亮燈
螢光筆的部分要改
用processing執行後應該會變色
用線連接短的上面屬下來第三個洞 短的下面屬上來第四個洞
期末作品 打磚塊
2018年11月29日 星期四
week12矮矮的筆記
校外教學 做光劍
因為想做彩色的光劍
所以把各種顏色的LED燈泡區隔開來排放整齊
把燈泡焊接在一起測試成功之後很開心
但想要將不同顏色的燈泡接在一起卻因電阻不夠強失敗了
經由學長的幫忙重新焊接綠色的燈泡
成功完成屬於我們小組的光劍了~~~
校外教學很好玩
也學到很多東西
謝謝老師的贊助和學長的幫忙
讓我們可以去校外教學
因為想做彩色的光劍
所以把各種顏色的LED燈泡區隔開來排放整齊
把燈泡焊接在一起測試成功之後很開心
但想要將不同顏色的燈泡接在一起卻因電阻不夠強失敗了
經由學長的幫忙重新焊接綠色的燈泡
成功完成屬於我們小組的光劍了~~~
校外教學很好玩
也學到很多東西
謝謝老師的贊助和學長的幫忙
讓我們可以去校外教學
2018年11月22日 星期四
week11矮矮的筆記
Maker uno
https://makeruno.com.my/getting-started/?fbclid=IwAR3A5TOOG9xozqsZ7mmGO-PnCgOhOk2v8ts8xrvxF8jwkdlsGnE7jRYvAFY
至網站下載執行檔
https://makeruno.com.my/getting-started/?fbclid=IwAR3A5TOOG9xozqsZ7mmGO-PnCgOhOk2v8ts8xrvxF8jwkdlsGnE7jRYvAFY
至網站下載執行檔
若下在成功 UNO會發出聲音
讓LED一個一個亮
程式碼
void setup() {
// put your setup code here, to run once:
for(int i = 2 ; i <= 13 ; i++)
{
pinMode(i,OUTPUT);
}
}
void loop() {
// put your main code here, to run repeatedly:
for(int i = 2 ; i <= 13 ; i++)
{
digitalWrite(i,HIGH);
delay(300);
}
for(int i = 2 ; i <= 13 ; i++)
{
digitalWrite(i,LOW);
}
}
播音樂
複製程式碼
/*
This example shows how to play melody using only a Maker UNO.
Tutorial page:
http://makeruno.com.my/playing-melody-using-only-maker-uno/
Original written by:
26/01/18 Asyraf (Intern), Cytron Technologies
*/
int piezoPin = 8;
int length = 15;
char notes[] = "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;
void playTone(int tone, int duration)
{
for (long i = 0; i < duration * 1000L; i += tone * 2)
{
digitalWrite(piezoPin, HIGH);
delayMicroseconds(tone);
digitalWrite(piezoPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration)
{
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
for (int i = 0; i < 8; i++)
{
if (names[i] == note)
{
playTone(tones[i], duration);
}
}
}
void setup()
{
pinMode(piezoPin, OUTPUT);
}
void loop()
{
for (int i = 0; i < length; i++)
{
if (notes[i] == ' ')
{
delay(beats[i] * tempo);
} else
playNote(notes[i], beats[i] * tempo);
delay(tempo / 2);
}
}
(成功執行之後就會一直響(好吵!!!!!!!!!!!!!!!!!!!!!!!!!!!
邊響還會邊亮燈
程式碼
/*
This example shows how to play melody using only a Maker UNO.
Tutorial page:
http://makeruno.com.my/playing-melody-using-only-maker-uno/
Original written by:
26/01/18 Asyraf (Intern), Cytron Technologies
*/
int piezoPin = 8;
int length = 15;
char notes[] = "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;
void playTone(int tone, int duration)
{
for (long i = 0; i < duration * 1000L; i += tone * 2)
{
digitalWrite(piezoPin, HIGH);
delayMicroseconds(tone);
digitalWrite(piezoPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration)
{
int LED[]={3,4,5,6,7,9,10,11};
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
for (int i = 0; i < 8; i++)
{
if (names[i] == note)
{
digitalWrite(LED[i],HIGH);
playTone(tones[i], duration);
digitalWrite(LED[i],LOW);
}
}
}
void setup()
{
//pinMode(piezoPin, OUTPUT);
for(int i = 2 ; i <= 13 ; i++)pinMode(i,OUTPUT);
pinMode(2,INPUT_PULLUP);
}
void loop()
{
for (int i = 0; i < length; i++)
{
if (notes[i] == ' ')
{
delay(beats[i] * tempo);
} else
playNote(notes[i], beats[i] * tempo);
delay(tempo / 2);
}
}
可以切換歌
程式碼
/*
This example shows how to change melody with push button using only a Maker UNO.
Tutorial page:
http://makeruno.com.my/changing-melody-with-push-button-using-only-maker-uno/
Original written by:
26/01/18 Asyraf (Intern), Cytron Technologies
*/
int piezoPin = 8;
int button = 2;
int lengths = 26;
char jbnotes[] = "eeeeeeegcde fffffeeeeddedg";
int jbbeats[] = { 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2};
int length = 15;
char ttlsnotes[] = "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc ";
int ttlsbeats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;
void playTone(int tone, int duration)
{
for (long i = 0; i < duration * 1000L; i += tone * 2)
{
digitalWrite(piezoPin, HIGH);
delayMicroseconds(tone);
digitalWrite(piezoPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration)
{
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
for (int i = 0; i < 8; i++)
{
if (names[i] == note)
{
playTone(tones[i], duration);
}
}
}
void setup()
{
pinMode(piezoPin, OUTPUT);
pinMode(button, INPUT_PULLUP);
}
void loop()
{
int sensorVal = digitalRead(button);
if (sensorVal == HIGH)
{
for (int i = 0; i < length; i++)
{
if (ttlsnotes[i] == ' ')
{
delay(ttlsbeats[i] * tempo);
}
else
playNote(ttlsnotes[i], ttlsbeats[i] * tempo);
if(digitalRead(button)==LOW)break;//可以切歌
delay(tempo / 2);
}
}
else
{
for (int i = 0; i < lengths; i++)
{
if (jbnotes[i] == ' ')
{
delay(jbbeats[i] * tempo);
}
else
playNote(jbnotes[i], jbbeats[i] * tempo);
delay(tempo / 2);
}
}
}
可以自由換歌
/*
This example shows how to change melody with push button using only a Maker UNO.
Tutorial page:
http://makeruno.com.my/changing-melody-with-push-button-using-only-maker-uno/
Original written by:
26/01/18 Asyraf (Intern), Cytron Technologies
*/
int piezoPin = 8;
int button = 2;
int lengths = 26;
char jbnotes[] = "eeeeeeegcde fffffeeeeddedg";
int jbbeats[] = { 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2};
int length = 15;
char ttlsnotes[] = "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc ";
int ttlsbeats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;
void playTone(int tone, int duration)
{
for (long i = 0; i < duration * 1000L; i += tone * 2)
{
digitalWrite(piezoPin, HIGH);
delayMicroseconds(tone);
digitalWrite(piezoPin, LOW);
delayMicroseconds(tone);
}
}
void playNote(char note, int duration)
{
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
for (int i = 0; i < 8; i++)
{
if (names[i] == note)
{
playTone(tones[i], duration);
}
}
}
void setup()
{
pinMode(piezoPin, OUTPUT);
pinMode(button, INPUT_PULLUP);
}
int now=0;//小星星
void loop()
{
delay(tempo/2);
//int sensorVal = digitalRead(button);
if(now==0)//if (sensorVal == HIGH)
{
for (int i = 0; i < length; i++)
{
if (ttlsnotes[i] == ' ')
{
delay(ttlsbeats[i] * tempo);
}
else
playNote(ttlsnotes[i], ttlsbeats[i] * tempo);
if(digitalRead(button)==LOW){now=1;break;}//聖誕節
delay(tempo / 2);
}
}
else
{
for (int i = 0; i < lengths; i++)
{
if (jbnotes[i] == ' ')
{
delay(jbbeats[i] * tempo);
}
else
playNote(jbnotes[i], jbbeats[i] * tempo);
if(digitalRead(button)==LOW){now=0;break;}
delay(tempo / 2);
}
}
}
2018年11月15日 星期四
2018年11月1日 星期四
2018年10月25日 星期四
week07矮矮的筆記
其中進度
float[] brickY=new float[80];
float[] brickX=new float[80];
int [] bricklife=new int[80];
float ballX=400, ballY=560, ballVX=0, ballVY=0;
void setup()
{
size(800,600);
fill(255,60,53);
for(int i = 0 ; i < 80 ; i++ )
{
brickX[i] = (i%10)*90 ;
brickY[i] =int (i/10)*35;
bricklife[i]=1;
}
}
boolean flying =false,gameover=false;
void draw()
{
background(0);
fill(255,0,255);
rect (mouseX-50,580, 150,20);
fill(123,123,156);
for(int i=0;i<80;i++)
{
if(bricklife[i]==0) continue;
rect (brickX[i],brickY[i], 80,30);
if(brickX[i] < ballX && ballX < brickX[i]+75 && abs(ballY-brickY[i])<20)
bricklife[i]=0;
if(bricklife[i]==0)
{
if(ballX>=brickX[i]) ballVX=10;
if(ballX<=brickX[i]) ballVX=-10;
if(ballY>=brickY[i]) ballVY=10;
if(ballY<=brickY[i]) ballVY=-10;
}
}
fill(123,213,0);
ellipse(ballX,ballY,50,50);
if(flying &&!gameover)
{
ballX+=ballVX;
ballY+=ballVY;
if(ballY>560 && abs(mouseX-ballX)<75)
{
ballVY=-abs(ballVY);
ballY=500;
}
if(ballY>580) gameover=true;
if(ballY<0)
{
ballVY=-ballVY;
ballY=0;
}
if(ballX>780)
{
ballX=780-(ballX-780);
ballVX=-abs(ballVX);
}
if(ballX<0)
{
ballX=abs(ballX);
ballVX=abs(ballVX);
}
}
else ballX=mouseX;
}
void mousePressed()
{
flying=true; ballVY=-20; ballVX=3;
}
2018年10月18日 星期四
week06 矮矮的筆記
水果忍者2
只有一顆馬上不見
程式碼float fruitX, fruitY, fruitVX, fruitVY;
void setup()
{
size(800,600);
fruitX=30;
fruitY=700;
fruitVX=3;
fruitVY=-35;
}
void draw()
{
background(0);
ellipse(fruitX, fruitY, 100,100);
fruitX+=fruitVX;
fruitY+=fruitVY;
fruitVY+=0.98;
}
很多球球藝起跳出來
程式碼
//float fruitX, fruitY, fruitVX, fruitVY;
float [] fruitX=new float[20];
float [] fruitY=new float[20];
float [] fruitVX=new float[20];
float [] fruitVY=new float[20];
void setup()
{
size(800,600);
for(int i = 0 ; i < 20 ; i++ )
{
fruitX[i]=random(800);
fruitY[i]=700;
fruitVX[i]=3;
fruitVY[i]=-35;
}
}
void draw()
{
background(0);
for (int i = 0 ; i < 20 ; i++ )
{
ellipse(fruitX[i], fruitY[i], 100,100);
fruitX[i]+=fruitVX[i];
fruitY[i]+=fruitVY[i];
fruitVY[i]+=0.98;
}
}
會亂七八糟跳了~~~
程式碼
//float fruitX, fruitY, fruitVX, fruitVY;
float [] fruitX=new float[20];
float [] fruitY=new float[20];
float [] fruitVX=new float[20];
float [] fruitVY=new float[20];
void reborn(int i)
{
fruitX[i]=random(800);
fruitY[i]=700;
fruitVX[i]=3;
fruitVY[i]=-35;
}
void setup()
{
size(800,600);
for(int i = 0 ; i < 20 ; i++ )
{
reborn(i);
}
}
void draw()
{
background(0);
for (int i = 0 ; i < 20 ; i++ )
{
if(dist(mouseX, mouseY, fruitX[i], fruitY[i])<=50)
{
reborn(i);
continue;
}
ellipse(fruitX[i], fruitY[i], 100,100);
fruitX[i]+=fruitVX[i];
fruitY[i]+=fruitVY[i];
fruitVY[i]+=0.98;
if(fruitY[i]>700) reborn(i);
}
}
2018年10月11日 星期四
week05矮矮的筆記
期中作品:打磚塊
複習之前所有上課內容
複習之前所有上課內容
接雞蛋
雞蛋落下(一直掉好噁心
程式碼
float[] eggX =new float[100];
float[] eggY =new float[100];
void setup()
{
size(800,600);
for(int i = 0 ; i < 100 ; i++ )
{
eggX[i]=random(100, 700);
eggY[i]=-random(2000);
}
}
void draw()
{
background(255);
for (int i = 0 ; i < 100 ; i++ )
{
ellipse(eggX[i], eggY[i], 80 , 100 );
eggY[i]+=5;
if(eggY[i]>700) eggY[i]=-2000;
}
}
真的開始接(雞蛋還是一直掉
程式碼
float[] eggX =new float[100];
float[] eggY =new float[100];
boolean[]eggDie=new boolean[100];
void setup()
{
size(800,600);
for(int i = 0 ; i < 100 ; i++ )
{
eggX[i]=random(100, 700);
eggY[i]=-random(2000);
eggDie[i]=false;
}
}
void draw()
{
background(255);
rect(mouseX-50, mouseY-25 , 100, 50);
for (int i = 0 ; i < 100 ; i++ )
{
if(eggDie[i])continue;
ellipse(eggX[i], eggY[i], 80 , 100 );
eggY[i]+=5;
if(eggY[i]>700) eggY[i]=-2000+600;
if(dist(mouseX-50, mouseY-25, eggX[i], eggY[i])<50)
{
eggDie[i]=true;
}
}
}
計分數囉(有BUG只有蛋蛋的屁屁才會記分
程式碼
float[] eggX =new float[100];
float[] eggY =new float[100];
boolean[]eggDie=new boolean[100];
void setup()
{
size(800,600);
for(int i = 0 ; i < 100 ; i++ )
{
eggX[i]=random(100, 700);
eggY[i]=-random(2000);
eggDie[i]=false;
}
}
int score = 0 ;
void draw()
{
background(255);
fill(255);rect(mouseX-50, mouseY-25 , 100, 50);
for (int i = 0 ; i < 100 ; i++ )
{
if(eggDie[i])continue;
ellipse(eggX[i], eggY[i], 80 , 100 );
eggY[i]+=5;
if(eggY[i]>700) eggY[i]=-2000+600;
if(dist(mouseX-50, mouseY-25, eggX[i], eggY[i])<50)
{
eggDie[i]=true;
score+=10;
}
}
fill(255,0,0);textSize(72); text("Score:"+score,100,100);
}
忍者水果
程式碼
PImage img ;
float stX=0 , stY = 700 ;
float stVX=6 , stVY=-40;
void setup()
{
size(800,600);
img=loadImage("st.png");
for( int i = 0 ; i < 10 ; i++ ) sword[i] = new PVector();
}
PVector[] sword = new PVector[10];
void draw()
{
background(255);
image(img , stX,stY,100,150);
stX+= stVX;
stY +=stVY;
stVY+= 0.98;
for(int i = 9 ; i > 0 ; i--)
{
sword[i].x=sword[i-1].x; sword[i].y=sword[i-1].y;
}
sword[0].x=mouseX; sword[0].y=mouseY;
for(int i = 1 ; i < 10 ; i++)
{
line( sword[i].x, sword[i].y,sword[i-1].x,sword[i-1].y);
}
}
2018年10月4日 星期四
week04 矮矮的筆記
開始想期中作品
如何打字上去:
程式碼
void setup()
{
size( 800,600);
}
void draw()
{
fill(255,255,60);
rect( 100,100,100,100);
textSize(72);字體大小
fill(0,0,0);
text("Start!", 100,100);要打什麼字 跟位置
}
發射子彈
如何打字上去:
程式碼
void setup()
{
size( 800,600);
}
void draw()
{
fill(255,255,60);
rect( 100,100,100,100);
textSize(72);字體大小
fill(0,0,0);
text("Start!", 100,100);要打什麼字 跟位置
}
發射子彈
程式碼
void setup()
{
size( 800,600);
}
void draw()
{
background(255);清背景
fill(255,255,60);
rect( 100,100,100,100);
if(bulletFlying)
{
ellipse(bulletX, bulletY , 50 ,50);
bulletX+=3;
}
}
float bulletX = 100 , bulletY = 100 ;
boolean bulletFlying = false ;
void keyPressed()
{
bulletFlying = true ;
}
可以一直發子彈(可是會當機
程式碼
void setup()
{
size( 800,600);
}
void draw()
{
background(255);
fill(255,255,60);
rect( 100,100,100,100);
for(int i = 0 ; i < bulletN ; i++ )
{
if(bulletFlying[i])
{
ellipse(bulletX[i], bulletY[i] , 50 ,50);
bulletX[i]+=3;
}
}
}
float []bulletX = new float[100] ;
float []bulletY = new float[100] ;
int bulletN =0 ;
boolean []bulletFlying = new boolean[100] ;
void keyPressed()
{
bulletFlying[ bulletN ] = true ;
bulletX[ bulletN ] = 100 ;
bulletY[ bulletN ] = 100 ;
bulletN++;
}
真正的子彈(我的子彈的檔明明就是png卻有背景存在啦啦啦啦啦
程式碼
PImage imgBullet, imgBG;
void setup()
{
size( 800,600);
imgBG = loadImage("BG.JPG");
imgBullet = loadImage("bullet1.png");
imageMode(CENTER);
}
void draw()
{
image(imgBG , width/2, height/2, width, height);
image(imgBullet, mouseX, mouseY, 100,100);
for(int i = 0 ; i < bulletN ; i++ )
{
if(bulletFlying[i])
{
image(imgBullet, bulletX[i], bulletY[i] , 100 ,100);
bulletX[i]+=3;
}
}
}
float []bulletX = new float[100] ;
float []bulletY = new float[100] ;
int bulletN =0 ;
boolean []bulletFlying = new boolean[100] ;
void mousePressed()
{
bulletFlying[ bulletN ] = true ;
bulletX[ bulletN ] = mouseX ;
bulletY[ bulletN ] = mouseY ;
bulletN++;
}
彈跳的球球
程式碼
PImage imgBullet, imgBG;
void setup()
{
size( 800,600);
imgBG = loadImage("BG.JPG");
imgBullet = loadImage("bullet.png");
imageMode(CENTER);
}
void draw()
{
image(imgBG , width/2, height/2, width, height);
ellipse(mouseX,mouseY,100,100);
//image(imgBullet, mouseX, mouseY, 100,100);
for(int i = 0 ; i < bulletN ; i++ )
{
if(bulletFlying[i])
{
//image(imgBullet, bulletX[i], bulletY[i] , 100 ,100);
ellipse(bulletX[i],bulletY[i], 100,100);
//bulletX[i]+=3;
bulletY[i]+=bulletVY[i];
bulletVY[i] += 0.98;
}
}
}
float []bulletX = new float[100] ;
float []bulletY = new float[100] ;
float []bulletVY = new float[100];
int bulletN =0 ;
boolean []bulletFlying = new boolean[100] ;
void mousePressed()
{
bulletFlying[ bulletN ] = true ;
bulletX[ bulletN ] = mouseX ;
bulletY[ bulletN ] = mouseY ;
bulletVY[bulletN] =- 10;
bulletN++;
}
2018年9月27日 星期四
week03 矮矮的筆記
實作:
畫出美美的圖(討厭的sin cos
程式碼
void setup()
{
size(500,500);
}
void draw()
{
ellipse(250,250, 480,480);
for (float angle = 0 ; angle<PI*2 ; angle+=PI/3)
{
triangle(250,250,
250+240*cos(angle),250+240*sin(angle),
250+240*cos(angle+PI/3),250+240*sin(angle+PI/3));
}
}
變多一點線
程式碼
void setup()
{
size(500,500);
}
void draw()
{
ellipse(250,250, 480,480);
for (float angle = 0 ; angle<PI*2 ; angle+=PI/3)
{
for (int R=0; R<=240;R+=20)
{
noFill();
triangle(250,250,
250+R*cos(angle),250+R*sin(angle),
250+R*cos(angle+PI/3),250+R*sin(angle+PI/3));
}
}
}
整齊的三角形(有密集恐懼症的人別看
程式碼
void setup()
{
size(800,400);
}
void myTriangle(int cx, int cy)
{
float a = -PI/2;
for (int R=15 ; R > 0 ; R-=5)
{
triangle( cx + R*cos(a), cy+R/sin(a),
cx + R*cos(a+2*PI/3), cy+R*sin(a+2*PI/3),
cx + R*cos(a-2*PI/3), cy+R*sin(a-2*PI/3) );
}
}
void draw()
{
background(255);
for (int cx=20;cx<800;cx+=40)
{
for(int cy=20;cy<400;cy+=40)
{
myTriangle(cx,cy);
}
}
}
小遊戲
馬力歐(上下左右移動(要自己按
程式碼
PImage imgMario;
float marioX=0, marioY=0;
void setup()
{
size(400,600);
imgMario = loadImage("mario.png");///只能讀一次
}
void draw()
{
background(255);
image(imgMario, marioX, marioY, 100,150);
}
void keyPressed()
{
if(keyCode==UP) {marioY-=5;}
if(keyCode==DOWN) {marioY+=5;}
if(keyCode==LEFT) {marioX-=5;}
if(keyCode==RIGHT) {marioX+=5;}
}
馬力歐拋物線掉下去
程式碼
PImage imgMario;
float marioX=0, marioY=0, marioVX=2, marioVY=0, marioAX=0, marioAY=0.1;
void setup()
{
size(400,600);
imgMario = loadImage("mario.png");
}
void draw()
{
background(255);
image(imgMario, marioX, marioY, 100,150);
marioX += marioVX; marioY += marioVY;
marioVX += marioAX; marioVY += marioAY;
}
void keyPressed()
{
if(keyCode==UP) {marioY-=5;}
if(keyCode==DOWN) {marioY+=5;}
if(keyCode==LEFT) {marioX-=5;}
if(keyCode==RIGHT) {marioX+=5;}
}
馬力歐自己跳
程式碼
PImage imgMario;
float marioX=0, marioY=0, marioVX=2, marioVY=0, marioAX=0, marioAY=0.1;
void setup()
{
size(400,600);
imgMario = loadImage("mario.png");
}
void draw()
{
background(255);
image(imgMario, marioX, marioY, 100,150);
marioX += marioVX; marioY += marioVY;
marioVX += marioAX; marioVY += 0.98;
if(marioY>600-150) marioVY*=-0.9;
if(marioX>400-100) marioVX*=-1;
if(marioY<0) marioVY*=-0.9;
if(marioX<0) marioVX*=-1;
}
馬力歐自己跳(有軌跡有邊界
程式碼
PImage imgMario;
float marioX=0, marioY=0, marioVX=1, marioVY=0, marioAX=0, marioAY=0.1;
void setup()
{
size(400,600);
imgMario = loadImage("mario.png");
}
void draw()
{
//background(255);
image(imgMario, marioX, marioY, 100,150);
marioX += marioVX; marioVX +=0;
marioY += marioVY; marioVY += 0.98;
if(marioY>500)
{
marioVY = - marioVY *0.8;
marioY=500;
}
if(marioX>300) marioVX = - marioVX;///邊界
if(marioX<0) marioVX = -marioVX;
}
訂閱:
文章 (Atom)









