2022年10月24日 星期一

week08 互動技術 08160873

 Step01:到moodle 下載音樂(上禮拜交的,接著程式碼如下):

///先安裝Skech-Library-Mange Libraries 裝 Sound

import processing.sound.*;//音樂功能

//使用外掛,要先把外掛裝起來!!!

SoundFile sound1, sound2, sound3;///程式存檔,拉音樂進來

void setup(){

  size(400,300);

  sound1= new SoundFile(this,"In Game Music.mp3");

  sound1.play();

}

void draw(){


}

Step02:開新視窗,並設計可切換音樂的應用,程式碼如下:
///先安裝Skech-Library-Mange Libraries 裝 Sound
import processing.sound.*;//音樂功能
//使用外掛,要先把外掛裝起來!!!
SoundFile sound1, sound2, sound3;///程式存檔,拉音樂進來
void setup(){
  size(400,300);
  textSize(50);
  fill(255,0,0);
  sound1 = new SoundFile(this,"In Game Music.mp3");
  sound2 = new SoundFile(this,"Intro Song_Final.mp3");
  sound1.play();
}
int stage=1;//1, 2, 3
void draw(){
  background(255);
  if(stage==1){//舞台1
    text("stage 1",100,100);
  }else if(stage==2){//舞台2
    text("stage2",100,100);
  }
}
void mousePressed(){
  if(stage==1){ //
    stage=2;
    sound1.stop();
    sound2.play();
  }else if(stage==2){
    stage=1;
    sound2.stop();
    sound1.play();
  }
}


Step03,簡化上列程式碼及寫法:
void setup(){
  size(400,300);
}
int stage=1;//1:start,2:playing
void draw(){
  background(255,255,0);
  fill(255,0,0);
  textSize(80);
  if(stage==1){
    text("stage 1", 100,100);
  }else if(stage==2){
    text("stage 2", 100,100);
  }
}
void mousePressed(){
  if(stage==1) stage=2;
  else if(stage==2) stage=1;
}
Step04,製造有水果跑出來,按按鍵可以把它移掉:
1.讓水果可以飛出來
//目標:有個水果可以飛起來!!
//按按鍵,可以將它消掉
void setup(){
  size(400,300);
}
float fruitX=200,fruitY=150;///水果位置X,Y有小數點精確
float fruitVX=1,fruitVY=-1;///水果的素地 VX VY
boolean flying=true;///if()好朋友,布林變數boolean true:成立 false不成立
void draw(){
  background(255,255,0);///黃色背景 
  
  
  ellipse(fruitX,fruitY,50,50);
  if(flying){///如果在飛,水果的位子會改變
    fruitX += fruitVX;
    fruitY += fruitVY;
    //fruitVY +=0.98/3;///重力加速度
  }
}
void keyPressed(){
  flying=false;
}
Step5接著加上重力加速度:
//目標:有個水果可以飛起來!!
//按按鍵,可以將它消掉
void setup(){
  size(400,300);
}
float fruitX=200,fruitY=300;///水果位置X,Y有小數點精確
float fruitVX=2,fruitVY=-13;///水果的素地 VX VY
boolean flying=true;///if()好朋友,布林變數boolean true:成立 false不成立
void draw(){
  background(255,255,0);///黃色背景 
  
  
  ellipse(fruitX,fruitY,50,50);
  if(flying){///如果在飛,水果的位子會改變
    fruitX += fruitVX;
    fruitY += fruitVY;
    fruitVY +=0.98/3;///重力加速度
  }
}
void keyPressed(){
  flying=false;
  fruitReset();///重新準備另一個水果
}
void fruitReset(){
  fruitX=random(100,300);
  fruitY=300;//固定高度
  fruitVX=random(-2,+2);
  fruitVY=-13;
  flying=true;
}

Step6:改寫程式碼,將每個東西都可以讓她各自分工,程式碼如下;
//目標:class物件:每個水果都可以用物件生出來(值以及函式)
class Fruit{
  float x, y, vx, vy;
  boolean flying;
  PApplet sketch;///為了讓ramdom可以使用,修改一下
  Fruit(PApplet _sketch){///建構子:一開始要做的事情
    sketch = _sketch;///為了讓ramdom可以用,修改一下
    reset();
  }
  void reset(){
    x = sketch.random(100.0, 300.0);///為了讓ramdom可以用,修改一下
    y = 300;
    vx = sketch.random(-2,+2);///為了讓ramdom可以用,修改一下
    vy = -13;
    flying = true;
  }
  void update(){
    x += vx;
    y += vy;
    vy += 0.98/3;///重力加速度
  }
}
Fruit fruit;
void setup(){
  size(400,300);
  fruit = new Fruit(this);///為了讓random可以用,修改一下
}
void draw(){
  background(255,255,0);
  ellipse(fruit.x, fruit.y, 50, 50);
  fruit.update();
}
void keyPressed(){
  fruit.reset();
}

Step7:加入子目錄,讓程式碼認識程式碼與示意圖如下;
Fruit [] fruits;
void setup(){
  size(400,300);
  fruits = new Fruit[3];
  for(int i=0; i<3; i++){
    fruits[i] = new Fruit(this);//為了讓ramdom可以用,修改一下
  }
}
void draw(){
  background(255,255,0);
  for(int i=0; i<3; i++){
    fill(255); ellipse(fruits[i].x, fruits[i].y, 50, 50);
    textSize(30);
    textAlign(CENTER,CENTER);
    fill(0);text(fruits[i].c, fruits[i].x,fruits[i].y);
    fruits[i].update();
  }
}
void keyPressed(){
  for(int i=0; i<3; i++){
    if( keyCode == fruits[i].c){
      fruits[i].reset();
    }
  }
}

String line="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
class Fruit{
  float x, y, vx, vy;
  boolean flying;
  char c;//水果對應的字母
  PApplet sketch;///為了讓ramdom可以使用,修改一下
  Fruit(PApplet _sketch){///建構子:一開始要做的事情
    sketch = _sketch;///為了讓ramdom可以用,修改一下
    reset();
  }
  void reset(){
    x = sketch.random(100.0, 300.0);///為了讓ramdom可以用,修改一下
    y = 300;
    vx = sketch.random(-2,+2);///為了讓ramdom可以用,修改一下
    vy = -13;
    flying = true;
    int i=int(random(26));
    c = line.charAt(i);
  }
  void update(){
    x += vx;
    y += vy;
    vy += 0.98/3;///重力加速度
  }
}
















沒有留言:

張貼留言