2024年11月4日 星期一

SY-BlingBangBang week09 精靈文字 & 音樂控制 & 忍者切水果

   [TODO]

上課內容:

精靈文字1

// week09_1_createFont_loadFont_textFont
size(500,500); //大視窗
background(0); //黑色背景
textSize(50);
text("Hello",50,50);

PFont font = createFont("標楷體",50);
textFont(font);
text("中文看到了",50,150);

PFont font2 = createFont("elffont-rock.otf",50);
textFont(font2); //記得把字型,點兩下,安裝,再把檔案拉進來,才能順利createFont()
text("ㄓㄨㄎㄉㄌ",50,250);


精靈文字2
// week09_2_PFont_outside_void_setup_createFont_void_draw_text
PFont font0, font1, font2; // 3種字型:英文、中文、注音文(外面宣告,兩個函式都看得到)
void setup(){
  size(500,500); //大視窗
  font0 =  createFont("Ariel",50);
  font1 = createFont("標楷體",50);
  font2 = createFont("elffont-rock.otf",50); //字型檔也要拉進來!
  //println(PFont.list()); //印出現在能用的系統的所有字型
}
void draw(){
  background(0); //黑色背景
  textSize(50);
  //PFont font0 = createFont("Ariel",50); //不能寫在裡面,建幾萬次字型電腦會亂掉
  textFont(font0);
  text("Hello",50,50);
  
  //PFont font = createFont("標楷體",50); //不能寫在裡面
  textFont(font1);
  text("中文看到了",50,150);
  
  //PFont font2 = createFont("elffont-rock.otf",50); //不能寫在裡面
  textFont(font2); //記得把字型,點兩下,安裝,再把檔案拉進來,才能順利createFont()
  text("ㄓㄨㄎㄉㄌ",50,250);
}



音遊(撥放音樂)
// week09_3_pressing__sound 聲音相關,使用音樂相關的Library函式庫
// Sketch-Library-Manager Libraries 找 sound 可找到 Sound 函式庫 (Processing 基金會做的),安裝!
// File-Examples, 選 Libraries核心函式庫 剛剛裝的 Sound 的 SimplePlayback 或 JumbleSound
//我們自己寫"最精簡的版本"
import processing.sound.*;
SoundFile sound;

void setup(){
  size(500,500);
  sound = new SoundFile(this, "In Game Music.mp3");
  //sound.play(); //播放一次
  sound.loop(); //一直迴圈播放
}
void draw(){
  
}


音遊(音樂控制)
// week09_4_multiple_sound_files_keyPressed_stop_play
import processing.sound.*;
SoundFile sound1, sound2, hit;
void setup(){
  size(500, 500);
  sound1 = new SoundFile(this, "In Game Music.mp3");
  sound2 = new SoundFile(this, "Intro Song_Final.mp3");
  hit = new SoundFile(this, "sword slash.mp3");
  sound2.play(); //開始時,先播放開場音樂
}
void draw(){
  background(255);
}
void mousePressed(){
  hit.play(); //mouse按下時,揮劍的聲音
}
void keyPressed(){
  if(key=='1'){
    sound2.stop();
    sound1.play();
  }
  else{
    sound1.stop();
    sound2.play();
  }
}



忍者切水果(重力加速度)
// week09_5_keyboard_ninja01_background_image_appleX_appleY_appleVX_appleVY_g
PImage board; //外面宣告變數
void setup(){
  size(600,400);
  board = loadImage("board.png"); //裡面修改變數
}
float appleX = 100, appleY = 500, appleVX = 5, appleVY = -30;
void draw(){
  background(board); //裡面使用變數
  fill(255,0,0);
  ellipse(appleX, appleY, 80, 80); //紅色的蘋果
  appleX += appleVX; //照著運動速度,X往右移
  appleY += appleVY; //照著運動速度,Y也會移動
  appleVY += 0.98; //0.98 gravity 重力加速度 (移動的速度,會受到"加速度"影響)
  if(appleX > 600){ 
    appleX = 100; 
    appleY = 500; 
    appleVX = 5; 
    appleVY = -30;
  } //當蘋果太右邊時,重設新的蘋果位置、速度
}


忍者切水果(隨機出)
// week09_6_keyboard_ninja02_void_randomApple
PImage board; //外面宣告變數
void setup(){
  size(600,400);
  board = loadImage("board.png"); //裡面修改變數
}
float appleX = 100, appleY = 500, appleVX = 5, appleVY = -30;
void randomApple(){
  appleX = random(100,500);
  appleY = 500;
  appleVX = random(-8,8);
  appleVY = random(-30,-20);
}
void draw(){
  background(board); //裡面使用變數
  fill(255,0,0);
  ellipse(appleX, appleY, 80, 80); //紅色的蘋果
  appleX += appleVX; //照著運動速度,X往右移
  appleY += appleVY; //照著運動速度,Y也會移動
  appleVY += 0.98; //0.98 gravity 重力加速度 (移動的速度,會受到"加速度"影響)
  if(appleX > 600 || appleX < 0 || appleY > 550){ 
    randomApple();
  } //當蘋果出界時,重設新的蘋果位置、速度
}


忍者切水果(秀文字)
// week09_7_keyboard_ninja03_void_keyPressed_appleKey
PImage board; //外面宣告變數
void setup(){
  size(600,400);
  board = loadImage("board.png"); //裡面修改變數
  randomApple();
}
float appleX = 100, appleY = 500, appleVX = 5, appleVY = -30;
char appleKey; //蘋果上面,要秀的字母
void randomApple(){
  appleX = random(100,500);
  appleY = 500;
  if(appleX<300) appleVX = random(0,8);
  else appleVX = random(-8,0);
  appleVY = random(-30,-25);
  appleKey = (char) ('a' + int(random(26)));
}
void draw(){
  background(board); //裡面使用變數
  fill(255,0,0);
  ellipse(appleX, appleY, 80, 80); //紅色的蘋果
  fill(255,255,0);
  textSize(50);
  textAlign(CENTER,CENTER);
  text(appleKey, appleX, appleY);
  appleX += appleVX; //照著運動速度,X往右移
  appleY += appleVY; //照著運動速度,Y也會移動
  appleVY += 0.98; //0.98 gravity 重力加速度 (移動的速度,會受到"加速度"影響)
  if(appleX > 600 || appleX < 0 || appleY > 550){ 
    randomApple();
  } //當蘋果出界時,重設新的蘋果位置、速度
}


忍者切水果(秀文字+計算分數)
// week09_7_keyboard_ninja04_void_keyPressed_appleKey
PImage board; //外面宣告變數
void setup(){
  size(600,400);
  board = loadImage("board.png"); //裡面修改變數
  randomApple();
}
float appleX = 100, appleY = 500, appleVX = 5, appleVY = -30;
char appleKey; //蘋果上面,要秀的字母
void randomApple(){
  appleX = random(100,500);
  appleY = 500;
  if(appleX<300) appleVX = random(0,8);
  else appleVX = random(-8,0);
  appleVY = random(-30,-25);
  appleKey = (char) ('a' + int(random(26)));
}
int score = 0;
void keyPressed(){
  if(key==appleKey){
    score += 100; //答對加分
  }
  else{
    score -= 50; //答錯扣分
  }
}
void draw(){
  background(board); //裡面使用變數
  text("Score:" + score,400,50);
  fill(255,0,0);
  ellipse(appleX, appleY, 80, 80); //紅色的蘋果
  fill(255,255,0);
  textSize(50);
  textAlign(CENTER,CENTER);
  text(appleKey, appleX, appleY);
  appleX += appleVX; //照著運動速度,X往右移
  appleY += appleVY; //照著運動速度,Y也會移動
  appleVY += 0.98; //0.98 gravity 重力加速度 (移動的速度,會受到"加速度"影響)
  if(appleX > 600 || appleX < 0 || appleY > 550){ 
    randomApple();
  } //當蘋果出界時,重設新的蘋果位置、速度
}


忍者切水果(倒數計時)
// week09_8_keyboard_ninja05_start_3_2_1_go
PImage board; //外面宣告變數
void setup(){
  size(600,400);
  board = loadImage("board.png"); //裡面修改變數
  randomApple();
}
float appleX = 100, appleY = 500, appleVX = 5, appleVY = -30;
char appleKey; //蘋果上面,要秀的字母
void randomApple(){
  appleX = random(100,500);
  appleY = 500;
  if(appleX<300) appleVX = random(0,8);
  else appleVX = random(-8,0);
  appleVY = random(-30,-25);
  appleKey = (char) ('a' + int(random(26)));
}
int score = 0;
void keyPressed(){
  if(state==0) state = 1; //按任意鍵,會開始3,2,1倒數
  if(state==2){
    if(key==appleKey){
      score += 100; //答對加分
    }
    else{
      score -= 10; //答錯扣分
    }
  }
}
int state = 0; //0:wait, 1:3、2、1、GO, 2:Game
int countdown = 60*4; //倒數計時3秒+ GO 1秒
void draw(){
  background(board); //裡面使用變數
  textSize(50);
  textAlign(CENTER,CENTER);
  fill(255,255,0);
  if(state==0) text("Press Any Key to Start", 300,200);
  else if(state==1){
    textSize(100);
    countdown--;
    if(countdown>60*3) text("3", 300,200);
    else if(countdown>60*2) text("2", 300,200);
    else if(countdown>60*1) text("1", 300,200);
    else if(countdown>0) text("GO", 300,200);
    else state = 2; //時間用完,就跳入新的畫面
  }
  else{
    text("Score:" + score,400,50);
    fill(255,0,0);
    ellipse(appleX, appleY, 80, 80); //紅色的蘋果
    fill(255,255,0);
    textSize(50);
    textAlign(CENTER,CENTER);
    text(appleKey, appleX, appleY);
    appleX += appleVX; //照著運動速度,X往右移
    appleY += appleVY; //照著運動速度,Y也會移動
    appleVY += 0.98; //0.98 gravity 重力加速度 (移動的速度,會受到"加速度"影響)
    if(appleX > 600 || appleX < 0 || appleY > 550){ 
      randomApple();
    } //當蘋果出界時,重設新的蘋果位置、速度
  }
}


忍者切水果(音樂播放)

// week09_9_keyboard_ninja06_add_music
import processing.sound.*;
SoundFile sound1, sound2, sound3;
PImage board; //外面宣告變數
void setup(){
  size(600,400);
  board = loadImage("board.png"); //裡面修改變數
  randomApple();
  sound1 = new SoundFile(this, "Intro Song_Final.mp3");
  sound2 = new SoundFile(this, "Gong.mp3");
  sound3 = new SoundFile(this, "In Game Music.mp3");
  background(board); //先畫背景,以免看起來像當機的灰色畫面
  sound1.play();
}
float appleX = 100, appleY = 500, appleVX = 5, appleVY = -30;
char appleKey; //蘋果上面,要秀的字母
void randomApple(){
  appleX = random(100,500);
  appleY = 500;
  if(appleX<300) appleVX = random(0,8);
  else appleVX = random(-8,0);
  appleVY = random(-30,-25);
  appleKey = (char) ('a' + int(random(26)));
}
int score = 0;
void keyPressed(){
  if(state==0){
    state = 1; //按任意鍵,會開始3,2,1倒數
    sound1.stop();  
    sound2.play(); //3
  }
  if(state==2){
    if(key==appleKey){
      score += 100; //答對加分
    }
    else{
      score -= 10; //答錯扣分
    }
  }
}
int state = 0; //0:wait, 1:3、2、1、GO, 2:Game
int countdown = 60*4; //倒數計時3秒+ GO 1秒
void draw(){
  background(board); //裡面使用變數
  textSize(50);
  textAlign(CENTER,CENTER);
  fill(255,255,0);
  if(state==0) text("Press Any Key to Start", 300,200);
  else if(state==1){
    textSize(100);
    countdown--;
    if(countdown%60 == 0){
      sound2.stop(); //同一個音樂關掉
      sound2.play(); //再播一次,會像心跳聲
    }
    if(countdown>60*3) text("3", 300,200);
    else if(countdown>60*2) text("2", 300,200);
    else if(countdown>60*1) text("1", 300,200);
    else if(countdown>0) text("GO", 300,200);
    else {
      state = 2; //時間用完,就跳入新的畫面
      sound2.stop();
      sound1.loop();
    }
  }
  else{
    text("Score:" + score,400,50);
    fill(255,0,0);
    ellipse(appleX, appleY, 80, 80); //紅色的蘋果
    fill(255,255,0);
    textSize(50);
    textAlign(CENTER,CENTER);
    text(appleKey, appleX, appleY);
    appleX += appleVX; //照著運動速度,X往右移
    appleY += appleVY; //照著運動速度,Y也會移動
    appleVY += 0.98; //0.98 gravity 重力加速度 (移動的速度,會受到"加速度"影響)
    if(appleX > 600 || appleX < 0 || appleY > 550){ 
      randomApple();
    } //當蘋果出界時,重設新的蘋果位置、速度
  }
}

沒有留言:

張貼留言