顯示具有 05163012_楊芩瑜 標籤的文章。 顯示所有文章
顯示具有 05163012_楊芩瑜 標籤的文章。 顯示所有文章

2019年1月3日 星期四

week17 矮矮的筆記

期末作品呈現
.
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();
 }*/
}

作品解釋
第一關是正常關卡 用滑鼠玩也很難過關,所以用搖桿更是一大挑戰
第二關其實算放水關卡,用滑鼠玩很好過關,但搖桿就沒那麼容易了
第三關混淆視聽,兩種晚發都只要接到最慢的那顆球就能過關了


2018年12月27日 星期四

week16矮矮的筆記

由於程式碼有過多的迴圈導致程式碼看起來很亂
也使的自己找不的bug的所在
所以經老師的建議下重新寫一次
材料來了可是大小不如預期

2018年12月20日 星期四

week15 矮矮的筆記

期中作品裡有bug
bug修復精進遊戲的內容
討論如何呈現作品並訂購材料

2018年12月6日 星期四

week13矮矮的筆記

測試processing 跟 Arduino 可以連接
step1.
step2.
step3.


step4.

step5.


上傳之後用processing執行



亮燈









螢光筆的部分要改


用processing執行後應該會變色 
用線連接短的上面屬下來第三個洞 短的下面屬上來第四個洞





期末作品 打磚塊










2018年11月29日 星期四

week12矮矮的筆記

校外教學  做光劍


因為想做彩色的光劍
所以把各種顏色的LED燈泡區隔開來排放整齊
把燈泡焊接在一起測試成功之後很開心
但想要將不同顏色的燈泡接在一起卻因電阻不夠強失敗了
經由學長的幫忙重新焊接綠色的燈泡
成功完成屬於我們小組的光劍了~~~
校外教學很好玩
也學到很多東西
謝謝老師的贊助和學長的幫忙
讓我們可以去校外教學

2018年11月22日 星期四

week11矮矮的筆記

Maker uno

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年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()
{
  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;