2023年10月19日 星期四

WW-Week06_打字遊戲_sound

 第一節課

今天要做一個可以打字的程式小葉老師的範例程式spelling bee,目標是打字遊戲,可以打字可以嗅出來,錯的單字會加入一個資料結構,可以加入音效

第一個小程式week06_1_text_textSize_fill

印出字放大和填充



size(500,500); textSize(64);//放大字體 text("Hello World",100,100); fill(255,0,0);//填充面 text("Red",100,200);//座標

第二個小程式week06_2_keyPressed_string

加入互動,能打入英文字,可以打出英文,可以換行,但是其他鍵可能會有錯誤的符號

void setup(){
  size(500,500);
  textSize(64);
}
String line ="Input: ";
void draw(){
  text( line, 100,100);
}  
void keyPressed(){
  line += key;///鍵盤按的字變成line印出
}

第三個小程式week06_3_if_alphabet


其他東西都不要,只印英文大小寫,空白跳行等等都不會印出來,要甚麼在加甚麼就好


void setup(){
  size(700,400);
  textSize(64);
}
String line ="Input: ";
void draw(){
  text( line, 100,100);
}  
void keyPressed(){
  if(key >= 'A' && key<='Z')line+=key;//不全部印只印大小寫
  if(key >= 'a' && key<='z')line+=key;
}

第四個小程式week06_4_BACKSPACE_string

打錯字的時候怎麼辦,要怎麼知道打錯字了,可以刪掉嗎?

BACKSPACE到退鍵按下去的時候可以刪除字母

看不到刪除的狀態,因為有殘影,所以要加入背景顏色

但是可能會刪到Input,所以加入串列長度,大於0才可以刪除

void setup(){
  size(800,400);
  textSize(64);
}
String line ="";
void draw(){
  background(0);///背景
  text("Input: "+line, 50,100);
}  
void keyPressed(){
  if(key >= 'A' && key<='Z')line+=key;//不全部印只印大小寫
  if(key >= 'a' && key<='z')line+=key;
  if(key == BACKSPACE && line.length()>0) {//當按下倒退鍵,且字串長度大於0時
    line = line.substring(0,line.length()-1);
    //substring減掉字串長度最後面的哪一個
  }
}

第二節課
課前準備:要加入音效所以要先下載一個Sound函數庫

開新檔案

第五個小程式week06_5_sound_play

找到soundfile,並找到一個音樂,記得將音樂拉入程式

import processing.sound.*;

SoundFile file;
void setup() {
  size(300, 300);
  background(255);
  file = new SoundFile(this, "a.mp3");
  file.play();
}    

void draw(){

}

第六個小程式week06_6_game_dadada_good_over_mp3

加入音效按1,2,3時有音效

import processing.sound.*;
SoundFile dadada,good, over;
void setup(){
  size(300,300);
  dadada =new SoundFile(this,"dadada.mp3");
  good =new SoundFile(this,"good.mp3");
  over =new SoundFile(this,"over.mp3");
}
void draw(){
  text("press 1,2,3",100,100);
}
void keyPreesed(){
  if(key=='1')dadada.play();
  if(key=='2')good.play();
  if(key=='3')over.play();
}

第七個小程式week06_7_keyPreesed_da_ENTER_dingdong

結合04和06打字時,有音效

import processing.sound.*;
SoundFile da,dingdong, ouch;
void setup(){
  size(800,400);
  textSize(64);
 
  da =new SoundFile(this,"da.mp3");
  dingdong =new SoundFile(this,"dingdong.mp3");
  ouch =new SoundFile(this,"ouch.mp3");
}
String line ="";
void draw(){
  background(0);///背景
  text("Input: "+line, 50,100);
}  
void keyPressed(){
  if(key >= 'A' && key<='Z') {line+=key; da.play();}///小心大括號
  if(key >= 'a' && key<='z') {line+=key; da.play();}
  if(key == BACKSPACE && line.length()>0) {
    line = line.substring(0,line.length()-1);
    ouch.play();////
  }
  if(key == ENTER){//按enter時
    dingdong.play();
  }
}
amp()聲音大小聲
第三節課
另一 個打字遊戲,字會掉下來,

第八個小程式week06_8_game_shoot_word_x_y

字會掉下來
void setup(){
  size(400,600);
  textSize(20);
}
String Q ="Hello",A="";
float x=100, y=100;
void draw(){
  background(0);
  text(Q, x, y);
  ellipse(200,550,20,20);//200*550位置,20*20的圓圈,表示我
  float dx=(200-x) ,dy=(550-y), d = sqrt(dx*dx+dy*dy)*3;//d=距離//*3可以調速度,可以用來分關卡
  x += dx/d;
  y += dx/d;
  
}
按按鍵的時候,拉一條線打上去
void setup(){
  size(400,600);
  textSize(20);
}
String Q ="Hello",A="";
float x=100, y=100;
void draw(){
  background(0);
  text(Q, x, y);
  ellipse(200,550,20,20);//200*550位置,20*20的圓圈,表示我
  float dx=(200-x) ,dy=(550-y), d = sqrt(dx*dx+dy*dy)*2;//d=距離//*3可以調速度,可以用來分關卡
  x += dx/d;
  y += dx/d;
  if(keyPressed){
    stroke(255,0,0);
    line(200,550,x,y);
  }
}

第九個小程式week06_9_game_shoot_string_compare_Q_A

如果打錯要扣分,按按鍵的時候,比較字母,這裡先將自設成白色,當打對的時候將字變成紅色A

void setup(){
  size(400,600);
  textSize(20);
}
String Q ="hello",A="";
float x=100, y=100;
void draw(){
  background(0);
  fill(#FFFFFF);text(Q,x,y);//Q白色
  fill(#FF0000);text(A,x,y);//A紅色
  ellipse(200,550,20,20);//200*550位置,20*20的圓圈,表示我
  float dx=(200-x) ,dy=(550-y), d = sqrt(dx*dx+dy*dy)*2;//d=距離//*3可以調速度,可以用來分關卡
  x += dx/d;
  y += dx/d;
  if(keyPressed){
    stroke(255,0,0);
    line(200,550, x, y);
  }
}
void keyPressed(){
  int i=A.length();
  if( key==Q.charAt(i) ){///打的字和字串內的字相同
    A += key;//打對了變成A紅色
  }
}
第十個小程式week06_A_game_shoot_string_compare_Q_A_next_word 
void setup(){
  size(400,600);
  textSize(20);
}
void randomQ(){
  int i=int(random(QQ.length));//亂數決定改成整數,因為亂數是浮點數
  Q = QQ[i];
  x = random(0,300);
  y = random(0,100);
}
String [] QQ = {"void","setup","float","apple","cat"};
String Q ="hello",A="";
float x=100, y=100;
void draw(){
  background(0);
  fill(#FFFFFF);text(Q,x,y);//Q白色
  fill(#FF0000);text(A,x,y);//A紅色
  ellipse(200,550,20,20);//200*550位置,20*20的圓圈,表示我
  float dx=(200-x) ,dy=(550-y), d = sqrt(dx*dx+dy*dy)*2;//d=距離//*3可以調速度,可以用來分關卡
  x += dx/d;
  y += dx/d;
  if(keyPressed){
    stroke(255,0,0);
    line(200,550, x+textWidth(A), y);///這個會指到在打的字母
  }
}
void keyPressed(){
  int i=A.length();
  if( key==Q.charAt(i) ){///打的字和字串內的字相同
    A += key;//打對了變成A紅色
    if(Q.equals(A)){//當Q都變成A
      randomQ();
      A="";
    }
  }
}


期中期末分組我跟子珈一組,題目是莉露姆做蛋糕,是子珈想到的,是我小時候也很愛看的卡通魔法咪嚕咪嚕
內容可能會分幾個小關卡,包括麵粉攪拌,烤蛋糕,和裝飾。大概想法而已內容還沒有決定。

沒有留言:

張貼留言