//加入背景音樂(BG)及答對音效(hit)//
import processing.sound.*;
SoundFile soundBG, soundHit;
void setup() {
size(300,500);//300*500的視窗
soundBG = new SoundFile(this, "Timer Sound.mp3");//背景音樂
soundBG.loop();//重複播放
soundBG.play();//撥放音樂
soundHit = new SoundFile(this, "hit.mp3");//點擊的音效
colorMode(HSB);//色彩模式:H色調、S飽和度、B亮度
textAlign(CENTER);//文字置中
textSize(20);//文字大小
nextLevel();//呼叫Next Level來設定答案和色差值
}
int H=0, S=255, B=360;//色彩模式:H色調、S飽和度、B亮度
int N=2;
int T=20000;//20.000毫秒=20秒
int oldT=0;
int Level=0;//第幾關
float R=0;//圓的直徑,改用float浮點數計算比較精確
int ansX, ansY,diffH, diffS, diffB;//答案位置和色差量
void draw(){//互動模式的畫圖,每秒60次
background(#E3D7D7);//背景顏色
//計算時間//
fill(#763B3B);//文字顏色
text("LEVEL",75,80);//印出等級標題
text("TIME",230,80);//印出時間標題
fill(0);//字是黑色
text(Level,75,120);
T-=(millis()-oldT);//計算剩下的時間
oldT=millis();//用掉的時間
if(T<0)T=0;//遇到0就不要再扣
int t1=int(T/1000);
int t2=int(T/100%10);
int t3=int(T/10%10);
text(t1+":"+t2+t3,230,120);
//畫圓圈圈//
int R0=300/N,r0=R0/2;//RO=直徑300的圓,r0=半徑
for(int x=0;x<N;x++){
for(int y=0;y<N;y++){
fill(H,S,B);
if(x==ansX && y==ansY){
fill(H+diffH,S+diffS,B+diffB);//答案有色差量
}
ellipse(r0+x*R0,200+r0+y*R0,R,R);
}
}
if(R<R0) R+=R0/60.0;//每次增大1/60
}
//點擊設定//
void mousePressed(){
int R0=300/N,r0=R0/2;//RO=直徑300的圓,r0=半徑
if(dist(mouseX,mouseY, r0+ansX*R0,200+r0+ansY*R0)<R/2){
soundHit.play();//答對播音效
nextLevel();//進到下一關
T+=2000;//答對加兩秒
}
}
//關卡設定//
void nextLevel(){
Level++;//下一關
R=0;//直徑回到0
H+=20;//每次改變顏色的HUE色調
if(H>255)H-=255;
if(Level>N*N*1.5)N++;//增價數量的機制
if(N>8)N=2;//避免圓太多
ansX=int(random(N));//答案位置
ansY=int(random(N));//答案位置
int R0=300/N,r0=R0/2;//直徑300/N,半徑一半
diffH=int(random(8.8+R0/Level));//答案的色差量
diffS=int(random(8.8+R0/Level));//答案的色差量
diffB=int(random(8.8+R0/Level));//答案的色差量
}
沒有留言:
張貼留言