顯示具有 05160080_黃惠嘉 標籤的文章。 顯示所有文章
顯示具有 05160080_黃惠嘉 標籤的文章。 顯示所有文章

2019年1月3日 星期四

Week17_黃惠嘉


🔺期末作品-麵包跳舞機
YOUTUBE:
https://youtu.be/ZPe9bS3HB7o
https://youtu.be/B9nLKtwHRG4







因為想用跳舞機所以不採用期中作品而另外寫了一個遊戲
跳舞機有上下左右鍵
利用小葉老師上課交的
用兩條線加鋁箔來做感應

一開始畫面上下左右都可以切換畫面
1分鐘時限
Great加5分
Good加3分
cool扣1分
bad扣2分
miss扣3分(有按但是miss)
miss扣4分(到底了都沒有按)
最後會顯示加總畫面

因為另外寫了一個遊戲
所以花的時間較多
並且可以懷念以前的小遊戲

2018年12月27日 星期四

week16_製作期末作品

🔺製作期末作品
這次結合了背景音樂,並用床墊剪成4個大小(上下左右),且兩邊都用鋁箔紙,用兩條線作感應

PImage imgleft,imgup,imgdown,imgright,imgdance;
PImage imgrightqq,imgleftqq,imgupqq,imgdownqq;
PImage []direction = new PImage[4];
float leftX=90,upX=230,downX=370,rightX=510;
float leftY=900,upY=900,downY=900,rightY=900;
float leftVY=6;
float upVY=5;
float downVY=4;
float rightVY=7;

import ddf.minim.*;
Minim minim;
AudioPlayer player1,player2,player3,player4,player5;
int score=0;
void setup(){
  size(600,900);
  background(255);
  imgdance=loadImage("dance.jpg");
  imgleft=loadImage("left.png");
  imgup=loadImage("up.png");
  imgdown=loadImage("down.png");
  imgright=loadImage("right.png");
  
  imgrightqq=loadImage("rightqq.png");
  imgleftqq=loadImage("leftqq.png");
  imgupqq=loadImage("upqq.png");
  imgdownqq=loadImage("downqq.png");
  imageMode(CENTER);
  
  direction[0]=imgleft;
  direction[1]=imgup;
  direction[2]=imgdown;
  direction[3]=imgright;
  
  minim = new Minim(this);
  player1 = minim.loadFile("BLACKPINK.mp3");
}
int choose=0;
void draw(){
  player1.play();
  image(imgdance,width/2,height/2,width,height);
  image(imgleftqq,90,150,100,100);
  image(imgupqq,230,150,100,100);
  image(imgdownqq,370,150,100,100);
  image(imgrightqq,510,150,100,100); 
  fill(#C75AF7);textSize(50);text("Score:"+score,30,80);

  if(choose==1){
    fill(#C75AF7);textSize(50);text("Great",400,80);
  }else if(choose==2){
    fill(#C75AF7);textSize(50);text("Good",400,80);
  }else if(choose==3){
    fill(#C75AF7);textSize(50);text("Cool",400,80);
  }else if(choose==4){  
    fill(#C75AF7);textSize(50);text("Bad",400,80);
  }else if(choose==5){  
    fill(#C75AF7);textSize(50);text("Miss",400,80);
  }
  if(leftY<0){  
    choose=5;
    score-=4;
    leftX=90;
    leftY=900;
    leftVY=random(4,7);
  }else if(upY<0){
    choose=5;
    score-=4;
    upX=230;
    upY=900; 
    upVY=random(4,7);
  }else if(downY<0){
    choose=5;
    score-=4;
    downX=370;
    downY=900;  
    downVY=random(4,7);
  }else if(rightY<0){
    choose=5;
    score-=4;
    rightX=510;
    rightY=900;
    rightVY=random(4,7);
  } 
  
  leftY-=leftVY;
  upY-=upVY;
  downY-=downVY;
  rightY-=rightVY;
  image(imgleft,leftX,leftY,100,100);
  image(imgup,upX,upY,100,100);
  image(imgdown,downX,downY,100,100); 
  image(imgright,rightX,rightY,100,100);
}
void killleft(){
  leftX=90;
  leftY=900;
  leftVY=random(4,7);
}
void killup(){
  upX=230;
  upY=900; 
  upVY=random(4,7);
}
void killdown(){
  downX=370;
  downY=900;  
  downVY=random(4,7);
}
void killright(){
  rightX=510;
  rightY=900;
  rightVY=random(4,7);
}
void keyPressed(){
  if(key=='1'){
    if(dist(90,150,leftX,leftY)<10){
      score+=5;
      killleft();
      choose=1;
    }
    else if(dist(90,150,leftX,leftY)<30){
      score+=3;
      killleft();
      choose=2;
    }
    else if(dist(90,150,leftX,leftY)<60){
      score-=1;
      killleft();
      choose=3;
    }
     else if(dist(90,150,leftX,leftY)<90){
      score-=2;
      killleft();
      choose=4;
     }else if(dist(90,150,leftX,leftY)<120){
      score-=3;
      killleft();
      choose=5;
     }
  }
  if(key=='2'){
    if(dist(230,150,upX,upY)<10){
      score+=5;
      killup();
      choose=1;
    }
    else if(dist(230,150,upX,upY)<30){
      score+=3;
      killup();
      choose=2;
    }
    else if(dist(230,150,upX,upY)<60){
      score-=1;
      killup();
      choose=3;
    }
     else if(dist(230,150,upX,upY)<90){
      score-=2;
      killup();
      choose=4;
     }else if(dist(230,150,upX,upY)<120){
      score-=3;
      killup();
      choose=5;
     }
  }
  if(key=='3'){
    if(dist(370,150,downX,downY)<10){
      score+=5;
      killdown();
      choose=1;
    }
    else if(dist(370,150,downX,downY)<30){
      score+=3;
      killdown();
      choose=2;
    }
    else if(dist(370,150,downX,downY)<60){
      score-=1;
      killdown();
      choose=3;
    }
     else if(dist(370,150,downX,downY)<90){
      score-=2;
      killdown();
      choose=4;
     }else if(dist(370,150,downX,downY)<120){
      score-=3;
      killdown();
      choose=5;
     }
  }
  if(key=='4'){
    if(dist(510,150,rightX,rightY)<10){
      score+=5;
      killright();
      choose=1;
    }
    else if(dist(510,150,rightX,rightY)<30){
      score+=3;
      killright();
      choose=2;
    }
    else if(dist(510,150,rightX,rightY)<60){
      score-=1;
      killright();
      choose=3;
    }
     else if(dist(510,150,rightX,rightY)<90){
      score-=2;
      killright();
      choose=4;
     }else if(dist(510,150,rightX,rightY)<120){
      score-=3;
      killright();
      choose=5;
     }
  }

}

2018年12月20日 星期四

Week15_製作期末作品

🔺製作期末作品
因為與期中不一樣,所以我們先寫了一個利用1234來操控上下左右,之後打算加音樂,每個距離的不一樣用語音才呈現

PImage imgleft,imgup,imgdown,imgright,imgdance;
PImage imgrightqq,imgleftqq,imgupqq,imgdownqq;
PImage []direction = new PImage[4];
float leftX=90,upX=230,downX=370,rightX=510;
float leftY=900,upY=900,downY=900,rightY=900;
float leftVY=6;
float upVY=5;
float downVY=4;
float rightVY=7;
int score=0;
void setup(){
  size(600,900);
  background(255);
  imgdance=loadImage("dance.jpg");
  imgleft=loadImage("left.png");
  imgup=loadImage("up.png");
  imgdown=loadImage("down.png");
  imgright=loadImage("right.png");
  
  imgrightqq=loadImage("rightqq.png");
  imgleftqq=loadImage("leftqq.png");
  imgupqq=loadImage("upqq.png");
  imgdownqq=loadImage("downqq.png");
  imageMode(CENTER);
  
  direction[0]=imgleft;
  direction[1]=imgup;
  direction[2]=imgdown;
  direction[3]=imgright;
  }
int choose=0;
void draw(){
  image(imgdance,width/2,height/2,width,height);
  image(imgleftqq,90,150,100,100);
  image(imgupqq,230,150,100,100);
  image(imgdownqq,370,150,100,100);
  image(imgrightqq,510,150,100,100); 
  fill(#C75AF7);textSize(50);text("Score:"+score,30,80);

  if(choose==1){
    fill(#C75AF7);textSize(50);text("Great",400,80);
  }else if(choose==2){
    fill(#C75AF7);textSize(50);text("Good",400,80);
  }else if(choose==3){
    fill(#C75AF7);textSize(50);text("Cool",400,80);
  }else if(choose==4){  
    fill(#C75AF7);textSize(50);text("Bad",400,80);
  }else if(choose==5){  
    fill(#C75AF7);textSize(50);text("Miss",400,80);
  }
  if(leftY<0){  
    choose=5;
    score-=4;
    leftX=90;
    leftY=900;
    leftVY=random(4,7);
  }else if(upY<0){
    choose=5;
    score-=4;
    upX=230;
    upY=900; 
    upVY=random(4,7);
  }else if(downY<0){
    choose=5;
    score-=4;
    downX=370;
    downY=900;  
    downVY=random(4,7);
  }else if(rightY<0){
    choose=5;
    score-=4;
    rightX=510;
    rightY=900;
    rightVY=random(4,7);
  } 
  
  leftY-=leftVY;
  upY-=upVY;
  downY-=downVY;
  rightY-=rightVY;
  image(imgleft,leftX,leftY,100,100);
  image(imgup,upX,upY,100,100);
  image(imgdown,downX,downY,100,100); 
  image(imgright,rightX,rightY,100,100);
}
void killleft(){
  leftX=90;
  leftY=900;
  leftVY=random(4,7);
}
void killup(){
  upX=230;
  upY=900; 
  upVY=random(4,7);
}
void killdown(){
  downX=370;
  downY=900;  
  downVY=random(4,7);
}
void killright(){
  rightX=510;
  rightY=900;
  rightVY=random(4,7);
}
void keyPressed(){
  if(key=='1'){
    if(dist(90,150,leftX,leftY)<10){
      score+=5;
      killleft();
      choose=1;
    }
    else if(dist(90,150,leftX,leftY)<30){
      score+=3;
      killleft();
      choose=2;
    }
    else if(dist(90,150,leftX,leftY)<60){
      score-=1;
      killleft();
      choose=3;
    }
     else if(dist(90,150,leftX,leftY)<90){
      score-=2;
      killleft();
      choose=4;
     }else if(dist(90,150,leftX,leftY)<120){
      score-=3;
      killleft();
      choose=5;
     }
  }
  if(key=='2'){
    if(dist(230,150,upX,upY)<10){
      score+=5;
      killup();
      choose=1;
    }
    else if(dist(230,150,upX,upY)<30){
      score+=3;
      killup();
      choose=2;
    }
    else if(dist(230,150,upX,upY)<60){
      score-=1;
      killup();
      choose=3;
    }
     else if(dist(230,150,upX,upY)<90){
      score-=2;
      killup();
      choose=4;
     }else if(dist(230,150,upX,upY)<120){
      score-=3;
      killup();
      choose=5;
     }
  }
  if(key=='3'){
    if(dist(370,150,downX,downY)<10){
      score+=5;
      killdown();
      choose=1;
    }
    else if(dist(370,150,downX,downY)<30){
      score+=3;
      killdown();
      choose=2;
    }
    else if(dist(370,150,downX,downY)<60){
      score-=1;
      killdown();
      choose=3;
    }
     else if(dist(370,150,downX,downY)<90){
      score-=2;
      killdown();
      choose=4;
     }else if(dist(370,150,downX,downY)<120){
      score-=3;
      killdown();
      choose=5;
     }
  }
  if(key=='4'){
    if(dist(510,150,rightX,rightY)<10){
      score+=5;
      killright();
      choose=1;
    }
    else if(dist(510,150,rightX,rightY)<30){
      score+=3;
      killright();
      choose=2;
    }
    else if(dist(510,150,rightX,rightY)<60){
      score-=1;
      killright();
      choose=3;
    }
     else if(dist(510,150,rightX,rightY)<90){
      score-=2;
      killright();
      choose=4;
     }else if(dist(510,150,rightX,rightY)<120){
      score-=3;
      killright();
      choose=5;
     }
  }
}

2018年12月13日 星期四

Week14_黃惠嘉

🔺範例
檔案➪範例➪0.3AnalogAnalogIntput


範例+MAKER UNO+旋鈕
接法如下
http://www.arduino.cc/en/Tutorial/AnalogInput



程式碼

int sensorPin = A0;    // select the input pin for the potentiometer
int ledPin = 13;      // select the pin for the LED
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  // declare the ledPin as an OUTPUT:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // read the value from the sensor:
  sensorValue = analogRead(sensorPin);
  // turn the ledPin on
  digitalWrite(ledPin, HIGH);
  // stop the program for <sensorValue> milliseconds:
  delay(sensorValue);
  // turn the ledPin off:
  digitalWrite(ledPin, LOW);
  // stop the program for for <sensorValue> milliseconds:
  delay(sensorValue);
}



LED燈會隨著旋鈕變大變小

2018年12月6日 星期四

Week13_黃惠嘉

🔺確認裝置➪COM7

文件➪範例程序➪Java Examples➪Libraries➪Serial➪SimpleRead🔺複製程式碼int swithPin=4;
void setup(){ 
  pinMode(2,INPUT_PULLUP); ⇒maker uno的button在pin2,所以要改成2 
  Serial.begin(9600);  
}
void loop()
{
if(digitalRead(2)==HIGH){   
   Serial.write(1);
} else{ 
   Serial.write(0);   
   
   delay(100);
}
🔺processing
import processing.serial.*;
Serial myPort;  
int val;      
void setup() 
{  
   size(200, 200);  
   String portName = Serial.list()[0];  
   myPort = new Serial(this,"COM7", 9600);
}
void draw(){  
if ( myPort.available() > 0) {     
   val = myPort.read();   
 }  
background(255);         
if (val == 0) { 
   fill(0);                   
}else{
   fill(204);                  
} 
 rect(50, 50, 100, 100);
}button沒按灰色button按了黑色


x

2018年11月22日 星期四

Week11_黃惠嘉

🔺Makeruno
確認其他裝置裡有沒有出現!的

右鍵更新驅動程式
瀏覽電腦上的驅動程式
➪下載驅動程式https://makeruno.com.my/getting-started/➪連結埠出現COM7









用網址內的程式碼播放音樂
https://makeruno.com.my/playing-melody-using-only-maker-uno/?fbclid=IwAR0UeYQwWpaQNfhiLnV_VtvUXL3KCZABp9KIEcNBT_E3kgH94zjOZMTGQV8測試看看
int piezoPin = 8;
int length = 15;
char notes[] = "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc ";
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); 
  }
}



工具➪開發板選擇Arduino/Genuino Uno➪序列埠選擇COM7



第13個會亮
const int LED=13;
void setup() 
{
  pinMode(LED, OUTPUT);
}

void loop() 
{
  digitalWrite(LED,HIGH);
  delay(300);
  digitalWrite(LED,LOW);  
  delay(300); 
}



for迴圈2~13會亮
void setup() 
{
  for(int i=2;i<=13;i++){
    pinMode(i, OUTPUT);
  } 
}

void loop() 
{
  for(int i=2;i<=13;i++){
    digitalWrite(i,HIGH);
    delay(300);
  }
  for(int i=2;i<=13;i++){
    digitalWrite(i,LOW);  
  }
}



用網址內的程式碼切換音樂
https://makeruno.com.my/changing-melody-with-push-button-using-only-maker-uno/?fbclid=IwAR1kSw9SnJV_zF69DKdbPUeEzqYOUbMKbHikLtWDMtpWRhbrfJqDv3T8EMw

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);
      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); 
    }
  }
}


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) 
{
  int LED[] =    {  2,   3,   4,   5,   6,   7,   9,   10 };
  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);撥聲音之前把對應的LED燈亮起
      playTone(tones[i], duration); 
      digitalWrite(LED[i],LOW);播聲音之後把對應的LED燈關掉
    }
  }
}

void setup() 
{
 /// pinMode(piezoPin, OUTPUT);
 for(int i=2;i<=13;i++)
  pinMode(i, OUTPUT); 執行前把每個解未設OUTPUT
}

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);
      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); 
    }
  }
}




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;0:小星星 1:聖誕節
void loop() 
{
  delay(tempo/2);
  int sensorVal = digitalRead(button);
  if (now==0)
  {
    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日 星期四

Week10_黃惠嘉

🔺認識MAKER UNO+小星星

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);
      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);
    }
  }

}

2018年11月1日 星期四

Week08_黃登煜

🔺期中作品
05160080 黃惠嘉
05160213 黃登煜
YouTube連結:
https://www.youtube.com/watch?v=zNcujIiCDS4&feature=youtu.be


說明:RiseUp是一個保護熱氣球的一個遊戲,右鍵按下開始按鈕就可以進入遊戲,利用滑鼠可以反彈敵人(石頭),為了增加難度,高度每超過70m*N敵人會越來越多,使玩家會更有挑戰性,當玩家打倒300個敵人後,會進入Goodjob畫面,如果無法打倒300個敵人,就會進入End的畫面並保留最佳成績,藉由高度越高敵人越多的小遊戲,會讓玩家想一而再的挑戰。


🔺期中作品程式碼
float balloonX=450,balloonY=700;
PImage imgbadsky,imgballoon,imgghost,imgdie;
PImage imgstartsky,imgcloud,imgstartbutton,imgdieballoon;
PImage imgfrisbee,imgriseup,imgsky,imgstone,imgback;
float []cloudX =new float[300];
float []cloudY =new float[300];
float []stoneX = new float[300];
float []stoneY = new float[300];
float []stoneVX = new float[300];
float []stoneVY = new float[300];
boolean []stoneFlying = new boolean[300];
int state=0;
import ddf.minim.*;
Minim minim;
AudioPlayer player1,player2,player3,player4,player5;
void reborn(int i){
  int direction=int(random(3));
  if(direction==0){
    stoneX[i]=0;
    stoneY[i]=random(400);
  }
  else if(direction==1){
    stoneX[i]=random(900);
    stoneY[i]=0;
  }else if(direction==2){
    stoneX[i]=900;
    stoneY[i]=random(400);
  }
  stoneVX[i]=(450-stoneX[i])/120;
  stoneVY[i]=(700-stoneY[i])/120;
  stoneFlying[i]=true;
}
void setup(){
  size(900,900);
  reborn(0);
  imgbadsky=loadImage("badsky.jpg");
  imgballoon=loadImage("balloon.png");
  imgdieballoon=loadImage("dieballoon.png");
  imgdie=loadImage("die.png");
  imgfrisbee=loadImage("frisbee.png");
  imgriseup=loadImage("riseup.png");
  imgsky=loadImage("sky.jpg");
  imgstartsky=loadImage("startsky.jpg");
  imgcloud=loadImage("cloud.png");
  imgstone=loadImage("stone.png");
  imgghost=loadImage("ghost.png");
  imgstartbutton=loadImage("startbutton.png");
  imgback=loadImage("back.png");
  imageMode(CENTER);
  for(int i=0;i<300;i++){
    cloudX[i]=random(0,900);
    cloudY[i]= i*-100;
  }
  minim = new Minim(this);
  player1 = minim.loadFile("GrandFantasia.mp3");
  player2 = minim.loadFile("hit.mp3");
  player3 = minim.loadFile("dieend.mp3");
  player4 = minim.loadFile("HappyBackground.mp3");
  player5 = minim.loadFile("WIN.mp3");
}
void draw(){
  if(state==0){
    Begin();
    player5.pause();
    player4.pause();
    player1.play();
  }else if(state==1){
    Start();
    player1.pause();
    player4.play();
  }else if(state==2){
    End();
    player4.pause();
    player3.play();
  }else if(state==3){
    player4.pause();
    player5.play();
    Goodjob();
  }
}
int i=0;
void Begin(){
  background(255);
  image(imgsky,width/2,height/2,width,height);
  if(900+i>300){
    image(imgballoon,400,900+i,500,500);
    i-=10;
  }
  else  image(imgballoon,400,300,500,500);
  image(imgriseup,450,175,500,500);
  image(imgstartbutton,450,700,200,150);
  if(abs(mouseX- 450)<100 && abs(700-mouseY)<75){
    if(mousePressed && (mouseButton == LEFT)){
      player4.rewind();
      state=1;
    }
  }
}
int z=0,a=500;
void Start(){
  background(255);
  if((a/50-10)<70){
    if(frameCount%60==0){
      for(int i=0;i<300;i++){
        if(stoneFlying[i]==false){
          reborn(i);
          println("("+i);
          break;
        }
      }
    }
  }
  else if((a/50-10)<140){
    if(frameCount%30==0){
      for(int i=0;i<300;i++){
        if(stoneFlying[i]==false){
          reborn(i);
          println("*"+i);
          break;
        }
      }
    }
  }
  else{
    if(frameCount%20==0){
      for(int i=0;i<300;i++){
        if(stoneFlying[i]==false){
          reborn(i);
          println(i);
          break;
        }
      }
    }
  }
  if(z>9){
    background(#81C7FB);
    for(int i=0;i<300;i++){
        image(imgcloud,cloudX[i],cloudY[i]+a,150,100);
   }
   a+=2;
  }
  z+=10;
  image(imgballoon,balloonX,balloonY,300,300);
  image(imgfrisbee,mouseX,mouseY,70,70);
  for(int i=0;i<300;i++){
    if(stoneFlying[i]==false) continue;
    image(imgstone,stoneX[i],stoneY[i],100,100);
    stoneX[i]+=stoneVX[i];
    stoneY[i]+=stoneVY[i];
    if(dist(stoneX[i],stoneY[i],450,700)<150){
      player3.rewind();
      stoneFlying[i]=false;
      state=2;
      break;
    }
    if(dist(mouseX,mouseY,stoneX[i],stoneY[i])<70){
      player2.rewind();
      player2.play();
      float normalX = stoneX[i]-mouseX;
      float normalY = stoneY[i]-mouseY;
      float len =sqrt(normalX*normalX+normalY*normalY);
      normalX/=len;
      normalY/=len;
      float dotlen = stoneVX[i]*normalX+stoneVY[i]*normalY;
      stoneVX[i]=stoneVX[i]+ -2*(dotlen * normalX);
      stoneVY[i]=stoneVY[i]+ -2*(dotlen * normalY);
      float pushLen =(50+35-len);
      stoneY[i]+= normalY*pushLen;
      stoneX[i]+= normalX*pushLen;
      if(i==299) {
        player5.rewind();
        state=3;
      }
    }
  }
  fill(#E68EFF); textSize(80); text((a/50-10)+"m", 30,80);
}
int w=0;
void End(){
  image(imgbadsky,width/2,height/2,width,height);
  image(imgdie,700,600,300,300);
  image(imgghost,500-w,400,300,300);
  image(imgback,800,800,100,100);
  if(dist(mouseX,mouseY,800,800)<50){
    if(mousePressed && (mouseButton == LEFT)){
      player1.rewind();
      state=0;
      a=500;
      w=0;
      i=0;
      reborn(0);
    }
  }
  fill(#AABCEA); textSize(80); text("best score:"+(a/50-10)+"m", 150,400);
  w+=10;
}
void Goodjob(){
  background(255);
  image(imgsky,width/2,height/2,width,height);
  if(900+i>300){
    image(imgballoon,400,900+i,500,500);
    i-=10;
  }
  else  image(imgballoon,400,300,500,500);
  image(imgback,800,800,100,100);
  if(dist(mouseX,mouseY,800,800)<50){
    if(mousePressed && (mouseButton == LEFT)){
      player1.rewind();
      state=0;
    }
  }
  fill(#FF0000); textSize(80); text("Good job~~", 200,650);
}